加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – 使用EXECUTE IMMEDIATE和多个相同的绑定参数

发布时间:2021-05-18 10:46:18 所属栏目:站长百科 来源:网络整理
导读:当我建设以下进程时 create or replace procedure check_exec_imm(tab IN VARCHAR2,col IN VARCHAR2,col_name IN VARCHAR2)IS cv SYS_REFCURSOR; col_value VARCHAR2(32767); lv_query VARCHAR2(32767); BEGIN lv_query := 'SELECT ' ||col|| ' FROM ' ||tab

当我建设以下进程时

create or replace procedure check_exec_imm(
tab IN VARCHAR2,col IN VARCHAR2,col_name IN VARCHAR2

)

IS

 cv  SYS_REFCURSOR;
 col_value  VARCHAR2(32767);
 lv_query VARCHAR2(32767); 

 BEGIN
   lv_query := 'SELECT ' ||col||
           ' FROM ' ||tab||
           ' WHERE (:1 = ''EUR'' OR :1 = ''USD'') and rownum <=1';


    EXECUTE IMMEDIATE lv_query INTO col_value USING  col_name ;


DBMS_OUTPUT.PUT_LINE('COLUMN VALUE : ' || col_value);

END;

执行该进程时,我收到以下错误

ORA-01008: not all variables bound
ORA-06512: at "GRM_IV.CHECK_EXEC_IMM",line 18
ORA-06512: at line 2

当我再次给出绑定参数col_name时,该进程运行正常.

EXECUTE IMMEDIATE lv_query INTO col_value USING  col_name,col_name ;

为什么oracle在此进程中示意差异.既然,它是沟通的绑定变量,一个绑定参数应该足够了.. !!?请表明我的逻辑错误.

Oracle: Repeated Placeholder Names in Dynamic SQL Statements中存在“非凡”举动

在匿名块或CALL语句中,假如名称沟通,则不必要一再绑定值.
譬喻,这个匿名块正在事变:

DECLARE
  a NUMBER := 4;
  b NUMBER := 7;
  plsql_block VARCHAR2(100);
BEGIN
  plsql_block := 'BEGIN calc_stats(:x,:x,:y,:x); END;';
  EXECUTE IMMEDIATE plsql_block USING a,b;  -- calc_stats(a,a,b,a)
END;
/

可是这个EXECUTE IMMEDIATE plsql_block行使a,b;在措施中不起浸染.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读