PL/SQL-->动态SQL调用包中函数或过程(二)

2014-11-24 12:57:29 · 作者: · 浏览: 2
; end;
PL/SQL procedure successfully completed.
4、动态SQL中调用包中函数的情形
[sql]
--下面我们来调用 系统包所带的函数dbms_output.put_line
--Author : Leshami
--Blog : http://blog.csdn.net/leshami
scott@USBO> DECLARE
2 v_sql VARCHAR2 (300);
3 BEGIN
4 v_sql := 'begin dbms_output.put_line(''This is only a test''); end;';
5
6 --DBMS_OUTPUT.put_line (v_sql);
7
8 EXECUTE IMMEDIATE v_sql;
9 END;
10 /
This is only a test
PL/SQL procedure successfully completed.
--直接使用下面的方式可以实现
scott@USBO> BEGIN
2 EXECUTE IMMEDIATE 'begin dbms_output.put_line(''This is only a test''); end;';
3 END;
4 /
This is only a test
PL/SQL procedure successfully completed.
5、小结
a、对于动态SQL来调用函数,我们需要使用begin .. end来封装块,而不是简单的类似于DML以及DDL的调用方法
b、不能使用'exec pkg_name.proc_name'方式来拼接动态sql
c、可以拼接sql到变量,也可以直接将动态sql紧跟在EXECUTE IMMEDIATE,个人更倾向于使用前者