簡體   English   中英

無法使用UNION ALL將多個值插入DB2並從序列中生成ID

[英]Can't insert multiple values into DB2 by using UNION ALL and generate IDs from sequence

我通過以下語句創建了序列:

CREATE SEQUENCE MAIN.MY_SEQUENCE START WITH 1 INCREMENT BY 1 CACHE 50;

並通過以下語句表:

CREATE TABLE MAIN.EMPLOYEES(
        ID INTEGER NOT NULL, 
        NAME VARCHAR(512), 
        EMAIL VARCHAR(254),

        PRIMARY KEY (ID)
) 

現在,當我嘗試使用以下語句插入新記錄時:

INSERT INTO MAIN EMPLOYEES (ID, NAME, EMAIL) 
VALUES (MAIN.MY_SEQUENCE.NEXTVAL, 'Name 1', 'email1@example.com') UNION ALL
VALUES (MAIN.MY_SEQUENCE.NEXTVAL, 'Name 2', 'email2@example.com')

我收到一個錯誤:

"NEXTVAL FOR MAIN.MY_SEQUENCE.NEXTVAL" cannot be specified in this context.. SQLCODE=-348, SQLSTATE=428F9, DRIVER=4.17.30

當我嘗試插入一行時,一切正常。

我發現使用的限制列表NEXT VALUE 這里 ,但這里沒有提到我的情況還是我找不到它。

我的問題是可以通過使用序列中的ID插入多行嗎,如果可以,如何實現?

它確實列出了您的情況。 該文檔包含以下內容:

在以下情況下不能指定NEXT VALUE表達式:
...
•使用集合運算符( 例如 UNION,EXCEPT或INTERSECT)將外部SELECT與另一個SELECT語句組合的SELECT語句
....

(強調我的)此語句不是窮舉性的,並且因為UNION ALL被視為設置操作,所以該操作被排除在外。

這應該是可以解決的-我有點驚訝您以這種方式編寫了該聲明; DB2允許您用逗號分隔數據行。 也就是說,以下內容應有效:

INSERT INTO MAIN.EMPLOYEES (ID, NAME, EMAIL) 
VALUES (MAIN.MY_SEQUENCE.NEXTVAL, 'Name 1', 'email1@example.com'),  
       (MAIN.MY_SEQUENCE.NEXTVAL, 'Name 2', 'email2@example.com')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM