我不确定,为什么在我的 SQL 编辑器中执行以下 SQL for DB2 时出现以下错误(DB2 for z/OS(
DECLARE GLOBAL TEMPORARY TABLE SESSION.VTI_GUI_TMP (
ENCRP_PRC_RL_ID INTEGER NOT NULL,
PROC_SYS_CD VARCHAR(10) NOT NULL,
VER_KEY_SET_CD VARCHAR(10) NOT NULL,
TRNSLT_TP_CD VARCHAR(10) NOT NULL,
SET_INDEX_NUM VARCHAR(10) NOT NULL,
SET_MDK_DKI_NUM VARCHAR(10) NOT NULL,
PACKET_NUM INTEGER NOT NULL ) ON COMMIT PRESERVE ROWS;
INSERT INTO SESSION.VTI_GUI_TMP (
ENCRP_PRC_RL_ID, PROC_SYS_CD, VER_KEY_SET_CD, TRNSLT_TP_CD,
SET_INDEX_NUM, SET_MDK_DKI_NUM, PACKET_NUM
)
VALUES (500159, 'DB', 'MDK', '0', '1', '001', 766473)
UNION ALL
(500151, 'DB', 'MDK', '0', '2', '002', 766473);
select * from SESSION.VTI_GUI_TMP;
DROP TABLE SESSION.VTI_GUI_TMP;
我在执行上述SQL时收到以下错误
非法使用关键字联合。 非原子的令牌是预期的。SQLCODE=-199, SQLSTATE=42601, DRIVER=3.63.75 SQL 代码: -199, SQL 状态: 42601
错误发生在: 插入会话。VTI_GUI_TMP(ENCRP_PRC_RL_ID、PROC_SYS_CD、VER_KEY_SET_CD、TRNSLT_TP_CD、SET_INDEX_NUM、SET_MDK_DKI_NUM、PACKET_NUM( 值(500159、"DB"、"MDK"、"0"、"1"、"001"、"766473( 全部联合(500151、"DB"、"MDK"、"0"、"2"、"002"、"766473(
我们如何解决上述错误?我不想将 SELECT 语句与 UNION ALL 一起使用来修复。有没有办法做到这一点。
我正在使用以下 DB2 版本
SELECT GETVARIABLE('SYSIBM.VERSION') FROM SYSIBM.SYSDUMMY1
-----------
DSN11015
我做错了什么?
你不能使用两个单独的INSERT
语句吗?例如:
DECLARE GLOBAL TEMPORARY TABLE SESSION.VTI_GUI_TMP (
ENCRP_PRC_RL_ID INTEGER NOT NULL,
PROC_SYS_CD VARCHAR(10) NOT NULL,
VER_KEY_SET_CD VARCHAR(10) NOT NULL,
TRNSLT_TP_CD VARCHAR(10) NOT NULL,
SET_INDEX_NUM VARCHAR(10) NOT NULL,
SET_MDK_DKI_NUM VARCHAR(10) NOT NULL,
PACKET_NUM INTEGER NOT NULL
) ON COMMIT PRESERVE ROWS;
INSERT INTO SESSION.VTI_GUI_TMP (
ENCRP_PRC_RL_ID, PROC_SYS_CD, VER_KEY_SET_CD, TRNSLT_TP_CD,
SET_INDEX_NUM, SET_MDK_DKI_NUM, PACKET_NUM
) VALUES (500159, 'DB', 'MDK', '0', '1', '001', 766473)
INSERT INTO SESSION.VTI_GUI_TMP (
ENCRP_PRC_RL_ID, PROC_SYS_CD, VER_KEY_SET_CD, TRNSLT_TP_CD,
SET_INDEX_NUM, SET_MDK_DKI_NUM, PACKET_NUM
) VALUES (500151, 'DB', 'MDK', '0', '2', '002', 766473);
或者也许:
INSERT INTO SESSION.VTI_GUI_TMP (
ENCRP_PRC_RL_ID, PROC_SYS_CD, VER_KEY_SET_CD, TRNSLT_TP_CD,
SET_INDEX_NUM, SET_MDK_DKI_NUM, PACKET_NUM)
SELECT 500159, 'DB', 'MDK', '0', '1', '001', 766473 FROM sysibm.sysdummy1
UNION ALL
SELECT 500151, 'DB', 'MDK', '0', '2', '002', 766473 FROM sysibm.sysdummy1
由于语法不准确,Db2 试图就预期的内容提供指导。在示例 SQL 中,Db2 认为您可能希望使用多行插入,其中需要 NOT ATOMIC。 对于 INSERT 语句,VALUES 子句支持表达式、DEFAULT 和 NULL (https://www.ibm.com/support/knowledgecenter/SSEPEK_12.0.0/sqlref/src/tpc/db2z_sql_insert.html(。当前不支持使用 UNION ALL 的带有值的插入。 @The Impaler提供的两个示例似乎是有效的语法:1(使用有效表达式插入值和2(使用完全选择插入。