oracle sql事务块正确的语法?

时间:2012-04-26 10:39:21

标签: sql oracle

如果有一个ParentTable table1和child-table table2,我想确保两者都创建(按正确顺序!)或者没有创建,这是正确的语法吗?

begin    
  insert into table1 values (seq.nextvalue, 'test') ;
  insert into table2 values (seq.currvalue, 'test3');
  commit;
end;

2 个答案:

答案 0 :(得分:1)

如果您担心序列分配中的不同值,请在插入之前将其提取到变量中。 如果引发任何异常,它将回滚插入,否则它将提交它们。

DECLARE
   v_seq_id NUMBER;
BEGIN
   SELECT seq.nextval
     INTO v_seq_id
     FROM dual;
   --
   INSERT INTO table1
   VALUES (
      v_seq_id,
      'test'
   );
   --
   INSERT INTO table2
   VALUES (
      v_seq_id,
      'test3'
   );
   --
   COMMIT;
EXCEPTION
   WHEN others
   THEN
      <log_error>
      ROLLBACK;
END;

希望它有所帮助...

答案 1 :(得分:0)

未经测试但必须像那样

begin    
  insert into table1 values(seq.nextval, 'test') ;
  insert into table2 values(seq.currval, 'test3');
  commit;
end;