调用函数:
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