绑定变量在oracle中

时间:2014-09-12 03:47:54

标签: oracle plsql

我是oracle PL / SQL的新手,并为绑定变量编写了一段代码。我不清楚绑定变量如何工作的概念以及USING子句的目的是什么。

我已经编写了一段代码来理解绑定变量但是它失败了。

CREATE OR REPLACE FUNCTION updNVAl(col IN VARCHAR2,val IN VARCHAR2)
 RETURN INTEGER
 IS
 BEGIN 
    EXECUTE IMMEDIATE
    'UPDATE emp SET '||col||' =:the_value' USING col,val;
    return SQL%ROWCOUNT;
  END;

  DECLARE
    val INTEGER;
  BEGIN
   val:= updNVAl('ename','deepak');
   DBMS_OUTPUT.PUT_LINE(val);
  END;

错误是:ORA-01006:绑定变量不存在 ORA-06512:at" SCOTT.UPDNVAL",第5行 ORA-06512:第4行

需要帮助。

2 个答案:

答案 0 :(得分:3)

    EXECUTE IMMEDIATE
   'UPDATE emp SET '||col||' =:the_value' USING val;

您只将:the_value定义为绑定变量,因此在USING子句中绑定它就足够了。

实际上,

col形成为String而不是绑定变量。另请注意,db对象(表,列..)不能用作绑定元素。

答案 1 :(得分:1)

SQL> CREATE OR REPLACE FUNCTION updNVAl(ename IN VARCHAR2,val IN VARCHAR2)
  2   RETURN INTEGER
  3   IS
  4   BEGIN
  5      EXECUTE IMMEDIATE
  6      'UPDATE emp SET '||ename||' =:the_value' USING val;
  7      RETURN SQL%ROWCOUNT;
  8    END;
  9  /

Function created.

SQL> set serveroutput on;
SQL> DECLARE
  2      val INTEGER;
  3    BEGIN
  4     val:= updNVAl('ename','deepak');
  5     DBMS_OUTPUT.PUT_LINE(VAL);
  6    END;
  7  /
14

PL/SQL procedure successfully completed.

SQL> select ename from emp;

ENAME
----------
deepak
deepak
deepak
deepak
deepak
deepak
deepak
deepak
deepak
deepak
deepak

ENAME
----------
deepak
deepak
deepak

14 rows selected.

SQL>