2014-11-20 94 views
0
/ 
create or replace procedure search_proc(p_string varchar2,p_table varchar2,p_col varchar2,search_result OUT sys_refcursor) 
is 
SQL_QRY VARCHAR2(2000); 
BEGIN 
SQL_QRY:='SELECT EMPNO,:1 FROM :2'; 
--DBMS_OUTPUT.PUT_LINE('SQL:'||SQL_QRY); 
OPEN SEARCH_RESULT FOR SQL_QRY USING p_col,p_table; 
END; 

/與綁定變量

動態SQL
VARIABLE REFC REFCURSOR; 
EXEC SEARCH_PROC('TEST','EMP','ENAME',:REFC); 
PRINT REFC; 

/

我試圖使用包含.The查詢使用綁定variables.but得到以下內置動態生成的SQL查詢的程序返回EMPNO和員工姓名error.May可能是錯誤的方式我打電話的程序 ORA-06512:在行1 00903. 00000 - 「無效的表名」

回答

1

您不能使用綁定變量來代替標識符,如表名或列名。在解析語句時必須知道這些事情,這些事件發生在綁定變量綁定到值之前。 (部分使用綁定變量的目的是爲了能夠解析語句,然後使用變量值執行)

在這種情況下,解決方案很簡單,因爲您已經將查詢字符串放入變量。

BEGIN 
SQL_QRY:='SELECT EMPNO,' || p_col || ' FROM ' || p_table; 
--DBMS_OUTPUT.PUT_LINE('SQL:'||SQL_QRY); 
OPEN SEARCH_RESULT FOR SQL_QRY;