1. 苏葳的备忘录首页
  2. 数据库

PL/SQL中动态调用函数的方法

oracle pl/sql  动态 函数PL/SQL中的execute immediate语句代替了以前Oracle 8i中的DBMS_SQL包,既可用于动态执行sql语句,也可以动态执行函数或过程。据称此语句性能相比DBMS_SQL包有较大幅度提高。那么,执行的SQL语句能不能是多条?参数如何传递?在这里将使用时遇到的一些问题记录如下:

调用函数:

 EXECUTE IMMEDIATE 'begin :1:=testfun(''' || parmstr || '''); end;'
    USING OUT RESULT;

注意:end;后的;必须加,否则编译时不会出错,而执行时将报错。而begin和end的存在也意味着中间可写多条SQL语句。

或者用:

  EXECUTE IMMEDIATE 'select  testfun(''' || parmstr || ''') from dual'
  --  EXECUTE IMMEDIATE 'begin :1:=testfun(''' || parmstr || '''); end;'
  --    USING OUT RESULT;
    INTO RESULT;

形式来调用,注意:此处dual后一定不能加;号,否则也是编译时通过,而调用时报错。

由于pl sql中的字符串只能是单引号括起,所以,串中有单引号时,需用两个单引号来替换。

当然,第一种形式可同样用于传入参数,如using in pram1 parm2等。参数可有in,out 或者in out 三种。

但用拼字符串的方法也会种方便的途径。

后查相关资料:

EXECUTE IMMEDIATE 不能用于需返回多行查询的情况,此时需用引用游标或其它方式实现

另EXECUTE IMMEDIATE 在执行sql 语句时不可加;,但执行语句块时,如前述的begin,end块时必须以;结尾。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/343.html

发表评论

邮箱地址不会被公开。 必填项已用*标注