restrictions on multitable inserts包括:
You cannot specify a sequence in any part of a multitable insert statement. A multitable insert is considered a single SQL statement. Therefore, the first reference to NEXTVAL generates the next number, and all subsequent references in the statement return the same number.
这不是真的 – 你可以使用一个序列,它总是得到相同的值,因此通过引用相同的序列一次创建父记录和子记录会很有用.
如果你想继续使用insert all,你可以通过使用获取序列值的非确定性函数来解决这个问题:
CREATE FUNCTION get_seq RETURN NUMBER IS
BEGIN
RETURN postal_code_seq.nextval;
END;
/
INSERT ALL
INTO POSTAL_CODE( postal_code,description)
VALUES(get_seq,'Coimbatore')
INTO POSTAL_CODE (postal_code,description)
VALUES(get_seq,'Mumbai') SELECT * FROM DUAL;
2 rows inserted.
SELECT * FROM postal_code;
POSTAL_CODE DESCRIPTION
--------------------------------------- --------------------
1 Coimbatore
2 Mumbai
但这有点尴尬.你可能最好使用单独的insert语句 – 在单个表中使用多表插入并不是真正获得了很多 – 或者是从序列中设置唯一列的触发器,或者是CTE /内联视图来生成值插入.