对于在Oracle 8i版本中有效的INSERT ALL语句,最佳和最推荐的替代方法是什么?非常不幸的是,这个特殊的声明在8i中不具备其简单性和可读性。如果你能提供一些输入,那就太好了。谢谢。
INSERT ALL Statement
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
非常感谢!
答案 0 :(得分: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
的{{1}}行为是单个命令,因此当发生某些错误时,此事务所做的所有更改都将被回滚(请参阅语句 - 水平原子性:http://docs.oracle.com/cd/E25054_01/server.1111/e25789/transact.htm)