加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Oracle中插入带序列的多行

发布时间:2020-12-12 13:50:48 所属栏目:百科 来源:网络整理
导读:这是我用于在oracle数据库中插入多行的查询.但是当我在其中使用序列时,它会引发错误,如ORA-00001:唯一约束.怎么做. INSERT ALL INTO POSTAL_CODE( postal_code,desc) VALUES(postal_code.NEXTVAL,'Coimbatore') INTO POSTAL_CODE (postal_code,'Mumbai') SE
这是我用于在oracle数据库中插入多行的查询.但是当我在其中使用序列时,它会引发错误,如ORA-00001:唯一约束.怎么做.
INSERT ALL
  INTO POSTAL_CODE( postal_code,desc)
    VALUES(postal_code.NEXTVAL,'Coimbatore')
  INTO POSTAL_CODE (postal_code,'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,'Mumbai') SELECT * FROM DUAL;

2 rows inserted.

SELECT * FROM postal_code;

                            POSTAL_CODE DESCRIPTION        
--------------------------------------- --------------------
                                      1 Coimbatore          
                                      2 Mumbai

但这有点尴尬.你可能最好使用单独的insert语句 – 在单个表中使用多表插入并不是真正获得了很多 – 或者是从序列中设置唯一列的触发器,或者是CTE /内联视图来生成值插入.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读