2014-11-20 92 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;