2017-05-13 7 views
0

DB2 테이블을 업데이트하는 데 도움을주십시오.이 거대한 테이블을 업데이트하는 더 좋은 방법이 있습니까? Adv thxs.DB2 테이블을 업데이트 할 수 없습니다

UPDATE RT.ITEM IM SET 
IM.ITEMNAME = GT.ITEM_D, IM.ITEMSIZE = GT.SIZE, IM.COLOR = GT.COL, 
IM.ITEMINFO = GT.ITEM_I WHERE IM.RET = 14 AND IM.LAN = 10 and 
    IM.ITEMK IN (SELECT GT.SN_N FROM GD.G_TEMP GT); 

다른 스키마 테이블 (GD.G_TEMP)에서 테이블 (RT.ITEM)를 업데이트하려고 및 오류 MSG 아래 점점 : [코드 : -206, SQL 상태 : 42703] DB2의 SQL 오류 : SQLCODE = -206, SQLSTATE = 42703, SQLERRMC = GT.ITEM_D

답변

0

코드가 작동하지 않습니다. DB2는 명시 적 JOINUPDATE에 지원하지 않습니다. 단일 sn_n 값에 대한 여러 행 gd_temp 테이블의 문제가 해결되지 않는 별개의 경우

UPDATE RT.ITEM IM 
    SET (ITEMNAME, ITEMSIZE, COLOR, ITEMINFO) = 
     (SELECT GT.ITEM_D, GT.SIZE, GT.COL, GT.ITEM_I 
      FROM GD.G_TEMP GT 
      WHERE GT.SN_N = IM.ITEMK 
      FETCH FIRST 1 ROW ONLY 
     ) 
    WHERE IM.RET = 14 AND IM.LAN = 10 AND 
      EXISTS (SELECT 1 
        FROM GD.G_TEMP GT 
        WHERE GT.SN_N = IM.ITEMK 
       ); 
+0

답장을 보내 주셔서 감사합니다.하지만 실행 중에 다른 오류가 표시됩니다. 여기서 나를 도울 수 있니? [코드 : -811, SQL 상태 : 21000] DB2 SQL 오류 : SQLCODE = -811, SQLSTATE = 21000, SQLERRMC = null입니다. – user2522503

+0

하위 쿼리가 두 개 이상의 행을 반환하기 때문에 발생합니다. 'fetch first 1 row only'를 사용하여 오류를 수정할 수는 있지만 해결 방법이 될 수 있습니다. –

0

안녕하세요 당신은 당신이해야합니다, 병합 명령을 시도 할 수 있습니다 :하지만 당신은 상관 하위 쿼리와 함께 당신이 원하는 무엇을 할 수 하위 쿼리에 필터를 추가하십시오.

MERGE INTO RT.ITEM IM 
USING 
    (SELECT DISTINCT 
    GT.ITEM_D, 
    GT.SIZE, 
    GT.COL, 
    GT.ITEM_I 
    FROM GD.G_TEMP gt 

) gt on gt.sn_n=im.itemk AND IM.RET = 14 AND IM.LAN = 10 
WHEN MATCHED THEN UPDATE 
SET (im.ITEMNAME, im.ITEMSIZE, im.COLOR, im.ITEMINFO) = (GT.ITEM_D, GT.SIZE, GT.COL, GT.ITEM_I) 
+0

답장을 보내 주신 Thx. 오류 메시지 이하로 실행 중입니다. 너 나 좀 도와 줄 수있어? 오류 메시지 : DB2 SQL 오류 : SQLCODE = -134, SQLSTATE = 42907, SQLERRMC = ITEM_I – user2522503

+0

예제 데이터가이 두 테이블에 대한 ddl을 제공해 주시겠습니까? 이 오류는 "CLOB, DBCLOB, BLOB, LONG VARCHAR 또는 LONG VARGRAPHIC 데이터 유형을 초래하는 표현식은 다음과 같이 허용되지 않습니다. SELECT DISTINCT 문, group by ....". gt.sn_n 당 하나의 행을 가질 수 있도록 여분의 필터를 추가해야합니다. – zlidime

+0

이유를 잊어 버렸습니다. 별개 또는 그룹 별을 사용하지 않고 gt.sn_n 당 하나의 행만 가질 수 있도록 추가 필터를 추가해야합니다. – zlidime