- 论坛徽章:
- 0
|
第二句执行失败的话,得看第一句的存储过程里面有没有执行过提交或回滚或有没有ddl语句吧。
有较多情况,你可以只测试你实际的存储过程涉及到的情况就可以了。
以下是我在scott用户下做的一个测试:
建一张表来测试:
create table test(f1 numeric(10,2),f2 varchar2(100));
再建一个存储过程:
create or replace procedure sp_ts1(f1 numeric,f2 varchar2)
is
v1 varchar2(50);
begin
select sysdate into v1 from dual;
insert into test(f1,f2) values(1,v1);
--rollback;
--commit;
end sp_ts1;
执行两条测试语句:
call sp_ts1(1,'aa');
create table test3 as select * from test11;
我测的结果是这样:
当测试语句的第二条失败时,如果存储过程sp_ts1里既没有rollback也没有commit,也没有其他ddl语句,sp_ts1里执行的insert会成功
当测试语句的第二条失败时,如果存储过程sp_ts1里有rollback,sp_ts1里执行的insert不会成功
当测试语句的第二条失败时,如果存储过程sp_ts1里有commit,sp_ts1里执行的insert会成功
ddl是隐式提交,这个得看你的实际存储过程里的语句了,也可能你的存储过程比较复杂有嵌套事务之类的既有rollback又有commit还有ddl语句等,得你自己分析了。你也可以自己模拟来测试看看结果是什么样的啊。
|
|