2017-10-31 2 views
0

テーブル内に値を持たないが機能していない列の合計数を検索するためにこのクエリを作成しました。テーブル内の値がないすべての列を検索するクエリ

SET serveroutput ON; 
     DECLARE 
      v_count  NUMBER; 
      v_table_name VARCHAR2(200); 
      CURSOR c2 
      IS 
      SELECT Column_name FROM all_tab_columns WHERE table_name= A; 
     BEGIN 
      FOR r1 IN c2 
      LOOP 
      dbms_output.put_line(r1.column_name); 
      EXECUTE immediate('SELECT COUNT(r1.column_name) INTO v_count FROM HR'||'.'||A); 
      IF v_count =0 THEN 
       dbms_output.put_line(v_count); 
      END IF; 
      END LOOP; 
END; 
+1

EXECUTE IMMEDIATEは、 'INTO v_count'をコンパイルしません。代わりに、次のようにします。 '即時実行( 'SELECT COUNT(r1.column_name)FROM HR' || '。' || 'A')INTO v_count;'。これを最初に実行してから、値を出力してから、さらに検討します。 – g00dy

+0

r1.column_nameエラーをスローする無効な識別子 –

+0

'EXECUTE immediate 'SELECT COUNT(' || r1.column_name || ')FROM HR' || '。' | '' A 'INTO v_count;'このコマンドは文字列として取得するため、r1.column_nameを評価できません。 – g00dy

答えて

0

このコードを試してください。それは私のために働く:)

SET serveroutput ON; 
DECLARE 
    myOwner VARCHAR2(20):='HR'; 
    myTable VARCHAR2(25):='A'; 
    CURSOR c2 
    IS 
    SELECT column_name, 
     avg_col_len 
    FROM all_tab_columns 
    WHERE table_name = myTable 
    AND owner  = myOwner; 
BEGIN 
    FOR r1 IN c2 
    LOOP 
    IF r1.AVG_COL_LEN =0 THEN 
     dbms_output.put_line('column_name = '||r1.column_name); 
    END IF; 
    END LOOP; 
END; 

希望これはあなたを助けることができる。

+0

私のコードはうまく動作していますが、ハードコードされているので、テーブル名の入力をユーザから受け取りたい: –

+0

SET serveroutput ON; DECLARE v_count NUMBER; カーソルc2 IS SELECT Column_name FROM all_tab_columns WHERE table_name = 'A'; BEGIN FOR r1 IN c2 LOOP EXECUTE immediate 'SELECT COUNT(' || r1.column_name || ')FROM HR' || '。' | 'A' INTO v_count;IF v_count = 0その後dbms_output.put_line( '列' || '' || r1.column_name || '' ||は '||' '|| v_count)です。 END IF; END LOOP; END; –

+0

私はuserSET serveroutputからの入力を取ることができるように助けてください。 DECLARE v_count NUMBER; カーソルc2 IS SELECT Column_name FROM all_tab_columns WHERE table_name = 'A'; BEGIN FOR r1 IN c2 LOOP EXECUTE immediate 'SELECT COUNT(' || r1.column_name || ')FROM HR' || '。' | 'A' INTO v_count;IF v_count = 0その後dbms_output.put_line( '列' || '' || r1.column_name || '' ||は '||' '|| v_count)です。 END IF; END LOOP; END; –

関連する問題