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

2015-01-22 22:06:42 · 作者: · 浏览: 24
; 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,个人更倾向于使用前者
?