Oracle SQL Transcation Block 正确的语法



如果有一个父表表1和子表表2,我想确保要么两者都被创建(以正确的顺序!)要么不被创建,这是正确的语法吗?

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

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

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;

希望对你有帮助...

未测试,但必须如此

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

最新更新