gpt4 book ai didi

oracle - 在Oracle中按顺序插入多行

转载 作者:行者123 更新时间:2023-12-04 17:08:38 25 4
gpt4 key购买 nike

这是我用于在Oracle数据库中插入多行的查询。但是,当在其中使用序列时,它将引发错误,即ORA-00001:唯一约束。怎么做。

INSERT ALL
INTO POSTAL_CODE( postal_code,desc)
VALUES(postal_code.NEXTVAL,'Coimbatore')
INTO POSTAL_CODE (postal_code,desc)
VALUES(postal_code.NEXTVAL,'Mumbai') SELECT * FROM DUAL;

最佳答案

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

但这有点尴尬。您可能最好使用单个插入语句-在单个表中使用多表插入实际上并不会真正给您带来很多好处-或从序列中设置唯一列的触发器,或CTE/内联 View 来生成值插入。

关于oracle - 在Oracle中按顺序插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31968093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com