![](/img/trans.png)
[英]I want to make an insert using union all which has a column getting values from a sequence
[英]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.