2017-06-19 69 views
0

我試圖讓所有的表,其中bank_id爲01 我寫了下面的塊凡在動態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; 

我想知道如何把where子句中的執行立即聲明條款。 我收到錯誤 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 ...;