动态语句
功能描述
动态语句是指可以动态构造出的SQL语句。动态语句在执行阶段才进行编译执行。
语法格式
EXECUTE IMMEDIATE sql_statement [ INTO variant_name[, ...] ] [ USING { [IN] [OUT] variant_name } [, ...] ]
参数说明
- EXECUTE IMMEDIATE
动态下发SQL语句。
- sql_statement
需要动态下发的SQL语句。存储过程目前支持直接使用七个SQL语句,分别为UPDATE、INSERT、DELETE、MERGE、SELECT ... INTO、COMMIT和ROLLBACK。其他SQL语句不能直接下发,必须通过动态SQL方式(EXECUTE IMMEDIATE)下发,否则会在存储过程编译时报错。
- INTO
把查询结果存放到变量中。使用INTO子句时,sql_statement必须是SELECT语句,并且该语句返回的结果集中只有一条记录。SELECT子句的字段个数需与INTO子句的变量个数一致。
- USING
USING子句的变量和sql_statement绑定参数的个数和数据类型必须一致。
示例
SQL> SET serveroutput ON; ON SQL> DECLARE SQL> a INT; SQL> b CHAR(16); SQL> c VARCHAR(16); SQL> BEGIN SQL> a := 10; SQL> b := 'abc'; SQL> c := 'efc'; SQL> EXECUTE IMMEDIATE 'BEGIN dbms_output.put_line(''a=''||:x);dbms_output.put_line(''b=''||:y);dbms_output.put_line(''c=''||:z); :x := 11; :y := ''aaa''; :z := ''bbb'';END;' USING OUT a, OUT b, OUT c; SQL> DBMS_OUTPUT.PUT_LINE('a='||a); SQL> DBMS_OUTPUT.PUT_LINE('b='||b); SQL> DBMS_OUTPUT.PUT_LINE('c='||c); SQL> END; SQL> / a= b= c= a=11 b=aaa c=bbb PL/SQL procedure successfully completed.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。