DB2 НЕ ATOMIC БЫЛА Ожидается, как мы можем это исправить? - PullRequest
0 голосов
/ 28 мая 2019

Я не уверен, почему я получаю приведенную ниже ошибку при выполнении приведенного ниже SQL в моем редакторе SQL для DB2 (DB2 для 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

Ошибка произошла в: 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, 'БД', 'MDK', '0', '1', '001', 766473) UNION ALL (500151 , 'DB', 'MDK', '0', '2', '002', 766473)

Как мы можем исправить вышеуказанную ошибку? Я не хочу использовать оператор SELECT вместе с UNION ALL для исправления. Есть ли способ заставить эту работу.

Я использую следующую версию DB2

  SELECT GETVARIABLE('SYSIBM.VERSION') FROM SYSIBM.SYSDUMMY1
  -----------
  DSN11015

Что я делаю не так?

1 Ответ

0 голосов
/ 28 мая 2019

Разве вы не можете использовать два отдельных 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
...