我不确定,为什么在我的DB2 SQL编辑器(DB2 for z / OS)中执行以下SQL时出现以下错误
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
发生错误: 插入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)值(500159,'DB','MDK','0','1','500' ,“ DB”,“ MDK”,“ 0”,“ 2”,“ 002”,766473)
如何解决以上错误?我不想将SELECT语句与UNION ALL一起使用来修复。有什么办法可以使这项工作。
我正在使用下面的DB2版本
SELECT GETVARIABLE('SYSIBM.VERSION') FROM SYSIBM.SYSDUMMY1
-----------
DSN11015
我在做什么错了?
答案 0 :(得分:0)
您不能使用两个单独的 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
答案 1 :(得分:0)
由于语法不正确,因此Db2尝试提供有关可能期望的指导。在示例SQL中,Db2认为您可能希望使用 multiple-row-insert ,其中期望 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将VALUES插入。 @The Impaler提供的两个示例似乎是有效的语法:1)使用有效表达式的VALUES进行INSERT,以及2)使用fullselect的INSERT。