-2

下面显示的在 Oracle 8i 版本中可用的 INSERT ALL 语句的最佳和最推荐的替代方法是什么?非常不幸的是,这个特定的语句在 8i 中不起作用,因为它的简单性和可读性。如果您能提供一些输入,那就太好了。谢谢你。

插入所有语句

INSERT ALL
  INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n)
  INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n)
  INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n)
SELECT * FROM dual;

此外,如果您的建议之一由于某些原因与下面显示的查询不同,那会更好。

insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
      select 8000,0,'Multi 8000',1 from dual
union all select 8001,0,'Multi 8001',1 from dual

非常感谢!

4

1 回答 1

2

如果要将这些行作为一个事务插入,只需执行以下操作:

BEGIN 
  SAVEPOINT some_name;
  INSERT INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n);
  INSERT INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n);
  INSERT INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n);
EXCEPTION WHEN OTHERS THEN 
     ROLLBACK TO some_name;
     RAISE; -- reraise current error
END;
/

这模拟了INSERT ALL
INSERT ALL单个命令的行为,因此当发生某些错误时,此事务所做的所有更改都将回滚(请参阅此处的语句级原子性:http : //docs.oracle.com/cd/E25054_01/server. 1111/e25789/transact.htm )

于 2015-12-20T12:09:52.107 回答