2017-06-19 27 views
0

私は私が実行即時文でwhere句を配置する方法を知りたい、次のブロック動的SQLの句

DECLARE 

cursor cBankId is 
    select owner||'.'||table_name from all_tab_columns where column_name = 'BANK_ID'; 
     v_table  all_tab_columns.table_name%TYPE; 
     vcount varchar2(50); 

BEGIN 

    open cBankId; 
    loop 
     fetch cBankId into v_table; 
     exit when cBankId%notfound; 

execute immediate 'select count(*) from ' || v_table into vcount || ' where bank_id = 01'; 


IF vcount > 0 THEN 
    DBMS_OUTPUT.PUT_LINE (v_table); 
END IF; 

end loop; 
    close cBankId; 

END; 

を書かれているbank_idが01 あるすべてのテーブルを取得しようとしています。 エラーが発生します ORA-06550:行15、列67: PLS-00103:シンボル "|"が検出されました。次のいずれかを予期している場合:

(、%;あなたが動的に使用代わりに、テーブル名に変数を使用することはできません

答えて

-1

を使用して返す返さ:

DECLARE 

cursor cBankId is 
select owner||'.'||table_name from all_tab_columns where column_name = 'BANK_ID'; 
    v_table  all_tab_columns.table_name%TYPE; 
    vcount varchar2(50); 
    v_sql varchar2(1000); 


BEGIN 

open cBankId; 
loop 
    fetch cBankId into v_table; 
    exit when cBankId%notfound; 

v_sql := 'select count(*) from ' || v_table || ' into vcount where bank_id = 01'; 

execute immediate v_sql; 

IF vcount > 0 THEN 
    DBMS_OUTPUT.PUT_LINE (v_table); 
END IF; 

end loop; 
    close cBankId; 

END; 
+0

あなたは、テーブル名に変数を使用できます。また、これはヲありませんrk? – Aleksej

0

あなただけがあなたのクエリの部分を書いている順序を変更する必要があります。 、動的SQLを使用している場合、あなたはこのようなものが必要です。ある

SQL> declare 
    2  v_table varchar2(30); 
    3  vCount number; 
    4 begin 
    5  v_table := 'dual'; 
    6  execute immediate 'select count(*) from ' || v_table || ' where 1=1' into vcount; 
    7  -- 
    8  dbms_output.put_line('vCount: ' || vCount); 
    9 end; 
10 
11/
vCount: 1 

PL/SQL procedure successfully completed. 

:。execute immediate 'select ... from ... where ...' INTO ...;