【问题标题】:Binding Variables In oracle在 oracle 中绑定变量
【发布时间】:2014-09-12 13:14:31
【问题描述】:

我是 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:在“SCOTT.UPDNVAL”,第 5 行 ORA-06512: 在第 4 行

需要帮助。

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:
        EXECUTE IMMEDIATE
       'UPDATE emp SET '||col||' =:the_value' USING val;
    

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

    col 实际上是作为字符串而不是绑定变量形成的。另请注意,数据库对象(表、列..)不能用作绑定元素。

    【讨论】:

      【解决方案2】:
      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>
      

      【讨论】:

      • 兄弟,这和我的回答有什么不同吗?
      • 我没有注意到你在我面前的回答,我的错。对不起
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 2013-11-22
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      相关资源
      最近更新 更多