execute immediate的语法如下:

execute immediate 'sql';

execute immediate 'sql_select' into var_1, var_2;

execute immediate 'sql' using [in|out|in out] bind_var_1, [in|out|in out] bind_var_2;

execute immediate 'sql_select' into var_1, var_2 using [in|out|in out] bind_var_1, [in|out|in out] bind_var_2;

execute immediate 'sql' returning into var_1;

execute immediate 'sql' bulk collect into indexed_var;

当我们碰到有一类存储名称和过程的参数上都相似时,可以使用execute immediate来动态执行这些存储过程,在这次的项目中我有一类用“P_InsertInto_”开头的存储过程,后面是表名如:P_InsertInto_AC01、P_InsertInto_AC02等等,用来给AC01、AC02........这些表插入数据的,我们就只能用execute immediate动态执行这些过程,像这样速度和代码编写上就会方便很多了。

这个方法整整研究了一大半天,不容易啊,呵呵。。。。,最终还是成功了!

我对execute immediate的用法的理解用一个实例说明一下,有一个存储过程名为:p_test,它有三个参数,分别为:两个输入参数和一个输出参数,实现过程如:

declare

v_sql varchar2(1000);

c varchar2(1000);

a varchar2(1) :='1';

b number :=1;

begin

--当然动态存储过程可以在这实现了,直接放到v_sql这个变量中就可以了(在这里是一个指定的过程p_test)

v_sql:='begin p_test(:v1,:v2,:v3); end;';

execute immediate v_sql using in '1',in '2',out c;

--或execute immediate v_sql using '1', '2',out c;

dbms_output.put_line(c);

end;

上面我们就实现了动态传递参数和动态存储过程的调用方法。值得注意的是:默认为in,in可省,out不可省!

还有一个值得注意的地方就是:每一个动态(execute immediate)执行的方法都有自己的begin.........end;包住才行呀,如果有多个就这样写:

--第一个

begin

v_sql:='begin p_test1(:v1,:v2,:v3); end;';

execute immediate v_sql using in '1',in '2',out c;

--或execute immediate v_sql using '1', '2',out c;

dbms_output.put_line(c);

end;

--第二个

begin

v_sql:='begin p_test2(:v1,:v2,:v3); end;';

execute immediate v_sql using in '1',in '2',out c;

--或execute immediate v_sql using '1', '2',out c;

dbms_output.put_line(c);

end;

。。。。。。。

--第N个

begin

--

end;

EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTE IMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTE IMMEDIATE,因为它获的收益在包之上。

使用技巧

1. EXECUTE IMMEDIATE将不会提交一个DML事务执行,应该显式提交

如果通过EXECUTE IMMEDIATE处理DML命令,那么在完成以前需要显式提交或者作为EXECUTE IMMEDI

oracle动态语句事务,oracle 动态SQL execute immediate相关推荐

  1. oracle添加语句 commit,Oracle COMMIT语句

    在Oracle中,COMMIT语句可以用来提交当前事务的所有更改.提交后,其他用户将能够看到您的更改.本文要为大家带来的就是COMMIT语句的用法. COMMIT语句语法: Oracle / PLSQ ...

  2. oracle循环语句loop,oracle循环语句loop

    Oracle循环语句的写法有哪些呢 如果您对Oracle循环语句方面感兴趣的话,不妨一看. loop循环: 1. create or replace procedure pro_test_loop i ...

  3. oracle查询语句大全(oracle 基本命令大全一)

    来源:http://www.jb51.net/article/40467.htm 1.create user username identified by password;//建用户名和密码orac ...

  4. oracle查询语句子句,Oracle 查询执行顺序

    Oracle 语句提高查询效率的方法 1:.. where column in(select * from ... where ...); 2:... where exists (select 'X' ...

  5. oracle人语句大全,oracle查询语句大全

    oracle分页查询的时候,不能使用limit,所以只能这样 1.  select * from table_name where   rownum>begin   and   rownum   ...

  6. oracle模拟重叠事务,ORACLE的事务读一致性与语句读一致性

    SET TRANSACTION READ ONLY来实现事物级别的一致性.一个事物所有语句读到的数据都是一致的. 我们开始试验一,模拟语句级别读一致性.第一个session使用显示打开一个游标模拟数据 ...

  7. Oracle执行语句跟踪(1)——使用sql trace实现语句追踪

    1.安装dbms_support包 SQL> @?/rdbms/admin/dbmssupp.sqlPackage created.Package body created.SQL> gr ...

  8. mysql oracle 查询语句执行顺序_MySQL sql语句执行顺序

    (8)     DISTINCT (1)     FROM (3)      JOIN (2)     ON (4)     WHERE (5)     GROUP BY (6)     HAVING ...

  9. oracle查询语句 switch,ORACLE SQL语句中的“SWITCH语句”函数DECODE

    下面这个例子介绍ORACLE SQL Functions对DECODE函数的用法,引自官方文档 SELECT product_id,        DECODE (warehouse_id, 1, ' ...

最新文章

  1. 此为太阳历的技术支持博客
  2. 一次性供应商不能用特别总账标准程序修改
  3. nginx 允许跨域_细谈跨域请求的桥梁
  4. mysql 事物状态有几种_mysql第三章 事务以及日志
  5. Java集合框架:LinkedHashMap
  6. 开关电源环路的零极点可以在反馈端补偿吗_【干货分享】开关电源环路补偿设计步骤讲解...
  7. nginx停止,平滑重启命令
  8. BC div2补题以及 复习模除 逆元__BestCoder Round #78 (div.2)
  9. python向量化和c哪个快_在python中向量化6 for循环累积和
  10. Java7并发编程指南——第七章:定制并发类
  11. 从39个kaggle竞赛中总结出来的图像分割的Tips和Tricks
  12. XenMotion 与HA的区别
  13. 小博老师精选Java十大CMS ——建站神器
  14. 【测试沉思录】3. 如何测试微信公众号?
  15. LM324运放器应用实例
  16. 如何防止亚马逊账户关联?
  17. [1125]AES加密报错:Illegal key size or default parameters
  18. 阿里云部署vmware报错
  19. 免费换背景app、在线修改图片像素、在线照片压缩网站
  20. js - 内存溢出与内存泄漏

热门文章

  1. 以海航集团的全面战略转型反驳海航集团违约的谣言
  2. 基于NSCT变换的人脸图像特征提取matlab仿真
  3. Gmail POP3设定
  4. vue项目不能使用localhost访问
  5. Learning-Lip-Sync-from-Audio 算法笔记
  6. PDF格式分析(二十二)书签 outlines
  7. 万维网发布服务(w3svc)已停止。除非万维网发布服务(w3svc)正在运行,否则无法启动网站。
  8. Click House介绍
  9. 个人收藏的一些很有性价比的Github链接
  10. 如何使用pmd检查代码规范