我是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行
需要帮助。
答案 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>