db2 插入多条记录返回 [42601][-104] ILLEGAL SYMBOL ","

问题描述 投票:0回答:1

尝试执行具有多个值子句的插入语句。收到错误:

[42601][-104] ILLEGAL SYMBOL ",". SOME SYMBOLS THAT MIGHT BE LEGAL ARE: FOR <END-OF-STATEMENT> NOT ATOMIC. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.26.14 

这是声明:

insert into
    CLAIM_ITEM  (CLAIM_NBR,CLMS_ITEM_SEQ_NBR,ITEM_TYPE_CODE,ITEM_STAT_CODE,ADD_DATE,UPD_DATE_TIME,FOL_PROC_INDT,ITEM_CODE,ALT_ITEM_DESC)
values
    (479156072, 1, 'C', 'REPT', '2023-08-14', '2023-08-14 23:20:59.436', ' ', 'TBC', 'Wood top black metal coff'),
    (479156072, 2, 'C', 'REPT', '2023-08-14', '2023-08-14 23:20:59.436', ' ', 'TVBS', 'LG TV'),
    (479156072, 3, 'C', 'REPT', '2023-08-14', '2023-08-14 23:20:59.436', ' ', 'SOFA', 'Off White fabric sofa'),
    (479156072, 4, 'C', 'REPT', '2023-08-14', '2023-08-14 23:20:59.436', ' ', 'BDHQ', 'Q Grey HB master bedroom')
;

我做了 RTFM,并严格遵循 IBM 的这个示例: https://www.ibm.com/docs/en/i/7.1?topic=statement-inserting-rows-using-values-clause

绝对没有任何错误的逗号(至少根据“TFM”)。特别令人抓狂的是,错误消息中的“可能合法的符号”列表是空白的,所以即使它也无法告诉我它想要什么。

它适用于一个值列表,但一旦我添加更多值,它就会出错。

省略值列表之间的逗号会产生相同的错误,但它会列出“,”作为预期符号。

这让我快疯了。不过这是典型的 IBM 产品。严格按照手册操作,但它总是不适合您的情况。而且错误消息完全没有帮助且神秘。

我使用的是 DataGrip,驱动程序是 com.ibm.db2.jcc.DB2Driver 版本 4.26.14。这些是由 Ensono 托管的 db2 实例决定的(我有 DataGrip 指向该实例),所以我必须遵循它。

尝试将方言从 Z/os 更改为 LUW。都不起作用。

无论如何,我都会将其放入我的 Java 代码中,看看它是否能在那里工作。也许(希望)这只是 DataGrip 的事情。

如上所述, 按照 IBM 的这个例子: https://www.ibm.com/docs/en/i/7.1?topic=statement-inserting-rows-using-values-clause

尝试将方言从 Z/os 更改为 LUW。

尝试了一个值列表,该列表有效。一旦我添加更多内容(用逗号分隔),就会出错。

尝试省略值列表之间的逗号,但收到相同的错误,但随后它将“,”列为预期符号。

更新 - 进一步调查显示我们使用的是 zos ver 12,它不支持这种类型的插入 (https://www.ibm.com/docs/en/db2-for-zos/12?topic=statements-insert)

但是,这个结构是有效的:

insert into
UNITEST.CLAIM_ITEM
(CLAIM_NBR,CLMS_ITEM_SEQ_NBR,ITEM_TYPE_CODE,ITEM_STAT_CODE,ADD_DATE,UPD_DATE_TIME,FOL_PROC_INDT,ITEM_CODE,ALT_ITEM_DESC)
SELECT 479156072, 1, 'C', 'REPT', '2023-08-14', '2023-08-14 23:20:59.436', ' ', 'TBC', 'Wood top black metal coff' FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 479156072, 2, 'C', 'REPT', '2023-08-14', '2023-08-14 23:20:59.436', ' ', 'TVBS', 'LG TV' FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 479156072, 3, 'C', 'REPT', '2023-08-14', '2023-08-14 23:20:59.436', ' ', 'SOFA', 'Off White fabric sofa' FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 479156072, 4, 'C', 'REPT', '2023-08-14', '2023-08-14 23:20:59.436', ' ', 'BDHQ', 'Q Grey HB' FROM SYSIBM.SYSDUMMY1

类似的 stackoverflow 帖子在这里: 将多行插入 DB2 数据库

insert db2
1个回答
0
投票

更新 - 进一步调查显示我们使用的是 zos 版本 12,它不支持这种类型的插入(https://www.ibm.com/docs/en/db2-for-zos/12?topic=statements -插入

但是,这个结构是有效的:

    insert into
    UNITEST.CLAIM_ITEM
    (CLAIM_NBR,CLMS_ITEM_SEQ_NBR,ITEM_TYPE_CODE,ITEM_STAT_CODE,ADD_DATE,UPD_DATE_TIME,FOL_PROC_INDT,ITEM_CODE,ALT_ITEM_DESC)
    SELECT 479156072, 1, 'C', 'REPT', '2023-08-14', '2023-08-14 23:20:59.436', ' ', 'TBC', 'Wood top black metal coff' FROM SYSIBM.SYSDUMMY1 UNION ALL
    SELECT 479156072, 2, 'C', 'REPT', '2023-08-14', '2023-08-14 23:20:59.436', ' ', 'TVBS', 'LG TV' FROM SYSIBM.SYSDUMMY1 UNION ALL
    SELECT 479156072, 3, 'C', 'REPT', '2023-08-14', '2023-08-14 23:20:59.436', ' ', 'SOFA', 'Off White fabric sofa' FROM SYSIBM.SYSDUMMY1 UNION ALL
    SELECT 479156072, 4, 'C', 'REPT', '2023-08-14', '2023-08-14 23:20:59.436', ' ', 'BDHQ', 'Q Grey HB' FROM SYSIBM.SYSDUMMY1

类似的 stackoverflow 帖子在这里: 将多行插入 DB2 数据库

© www.soinside.com 2019 - 2024. All rights reserved.