oracle 存储过程事务控制

我要往两个表里面insert数据、这两个表是有外键关联的!我在一个事务里进行两条insert语句!先在主表里面insert一条后!需要commit才能拿到这个id再往子表... 我要往两个表里面insert数据、这两个表是有外键关联的!我在一个事务里进行两条insert语句!先在主表里面insert一条后!需要commit才能拿到这个id再往子表里面进行插入!但是!如果再往子表里面insert时报错了!但是主表的数据又已经commit了!如果把主表的数据也回滚?求答案、、、
存储过程如下:
create or replace procedure aaa
is var2 number; begin
SELECT Seq_Tbtopic.nextval INTO var2 FROM dual; insert into tbTopic values (var2 , 1, 1, '口语3333',1,3,2,'',''); commit; insert into tbchildtopic values (Seq_Tbchildtopic.Nextval,var2,'','duck','/kangsi/Resource/test/B1/1_2_2_1_Emily_duck_.mp3','duck'); commit;
end aaa;
展开
 我来答
micro0369
2012-12-17 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4075万
展开全部
把第一个commit去掉既可,如下:

create or replace procedure aaa is
var2 number;
begin SELECT Seq_Tbtopic.nextval INTO var2 FROM dual;
insert into tbTopic values (var2 , 1, 1, '口语3333',1,3,2,'','');

insert into tbchildtopic values (Seq_Tbchildtopic.Nextval,var2,'','duck','/kangsi/Resource/test/B1/1_2_2_1_Emily_duck_.mp3','duck');

commit;
end aaa;
追问
第二个表是子表必须要先有了第一个主表的id才能插入、不commit的话id还没生成?直接插子表不会报错?
匿名用户
2012-12-17
展开全部
1. 为什么第一个insert后必须要commit??
2. 如果已经commit了,就只好删除或修改了
追问
因为我第二条insert语句是要现有第一个条语句的id才能插入的。我第一个表的外键、如果不commit的话能插入吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式