oracle动态语句事务,oracle 动态SQL execute immediate
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相关推荐
- oracle添加语句 commit,Oracle COMMIT语句
在Oracle中,COMMIT语句可以用来提交当前事务的所有更改.提交后,其他用户将能够看到您的更改.本文要为大家带来的就是COMMIT语句的用法. COMMIT语句语法: Oracle / PLSQ ...
- oracle循环语句loop,oracle循环语句loop
Oracle循环语句的写法有哪些呢 如果您对Oracle循环语句方面感兴趣的话,不妨一看. loop循环: 1. create or replace procedure pro_test_loop i ...
- oracle查询语句大全(oracle 基本命令大全一)
来源:http://www.jb51.net/article/40467.htm 1.create user username identified by password;//建用户名和密码orac ...
- oracle查询语句子句,Oracle 查询执行顺序
Oracle 语句提高查询效率的方法 1:.. where column in(select * from ... where ...); 2:... where exists (select 'X' ...
- oracle人语句大全,oracle查询语句大全
oracle分页查询的时候,不能使用limit,所以只能这样 1. select * from table_name where rownum>begin and rownum ...
- oracle模拟重叠事务,ORACLE的事务读一致性与语句读一致性
SET TRANSACTION READ ONLY来实现事物级别的一致性.一个事物所有语句读到的数据都是一致的. 我们开始试验一,模拟语句级别读一致性.第一个session使用显示打开一个游标模拟数据 ...
- Oracle执行语句跟踪(1)——使用sql trace实现语句追踪
1.安装dbms_support包 SQL> @?/rdbms/admin/dbmssupp.sqlPackage created.Package body created.SQL> gr ...
- mysql oracle 查询语句执行顺序_MySQL sql语句执行顺序
(8) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING ...
- oracle查询语句 switch,ORACLE SQL语句中的“SWITCH语句”函数DECODE
下面这个例子介绍ORACLE SQL Functions对DECODE函数的用法,引自官方文档 SELECT product_id, DECODE (warehouse_id, 1, ' ...
最新文章
- 此为太阳历的技术支持博客
- 一次性供应商不能用特别总账标准程序修改
- nginx 允许跨域_细谈跨域请求的桥梁
- mysql 事物状态有几种_mysql第三章 事务以及日志
- Java集合框架:LinkedHashMap
- 开关电源环路的零极点可以在反馈端补偿吗_【干货分享】开关电源环路补偿设计步骤讲解...
- nginx停止,平滑重启命令
- BC div2补题以及 复习模除 逆元__BestCoder Round #78 (div.2)
- python向量化和c哪个快_在python中向量化6 for循环累积和
- Java7并发编程指南——第七章:定制并发类
- 从39个kaggle竞赛中总结出来的图像分割的Tips和Tricks
- XenMotion 与HA的区别
- 小博老师精选Java十大CMS ——建站神器
- 【测试沉思录】3. 如何测试微信公众号?
- LM324运放器应用实例
- 如何防止亚马逊账户关联?
- [1125]AES加密报错:Illegal key size or default parameters
- 阿里云部署vmware报错
- 免费换背景app、在线修改图片像素、在线照片压缩网站
- js - 内存溢出与内存泄漏