【问题标题】:Dynamic sql with bind variable带绑定变量的动态 sql
【发布时间】:2015-01-18 17:25:20
【问题描述】:
/
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;

/

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

/

我正在尝试使用包含动态构建的 SQL 查询的过程返回 empno 和员工姓名。查询是使用绑定变量构建的。但出现以下错误。可能是我调用过程的方式有问题 ORA-06512: 在第 1 行 00903.00000 - “无效的表名”

【问题讨论】:

    标签: sql oracle stored-procedures dynamic sys-refcursor


    【解决方案1】:

    您不能使用绑定变量来代替标识符,例如表名或列名。在解析语句时必须知道这些事情,这发生在绑定变量绑定到值之前。 (使用绑定变量的部分目的是能够解析语句一次,然后使用变量值执行它。)

    在这种情况下,解决方案很简单,因为您已经将查询字符串放入变量中。

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

    【讨论】:

      猜你喜欢
      • 2018-10-18
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 2015-01-01
      • 1970-01-01
      相关资源
      最近更新 更多