2017-10-14 1 views
0

누군가이 코드가 작동하지 않는 이유를 말해 줄 수 있습니까? 나는 라인 1에 오류가 계속 2.행이 삽입되지 않음

나는 CustCodeCUSTCATEGORY 소스 테이블의 PK 값과 일치하지 않는 CUSTLA 테이블의 각 행에 대해 PROBLEMTABLE 테이블에 행을 삽입 할.

1 행의 오류로 인해 이유가 없지만 2 행의 오류로 인해 열이 애매하게 정의되어 있습니다.

INSERT INTO PROBLEMTABLE (problemid, source_rowid, source_table, filterid, datetime, action) 
    SELECT 
     PROBLEM_SEQ.NEXTVAL, ROWID, 'CUSTLA', 2, CURRENT_DATE, 'MODIFY' 
    FROM 
     CUSTLA U, CUSTCATEGORY Y 
    WHERE 
     U.CustCode != Y.CustCode; 

SELECT * FROM PROBLEMTABLE; 
+0

오류의 전체 텍스트를 제공해 주실 수 있습니까? –

+0

설명이 편집되었습니다. @GiorgosBetsos –

+0

CUSTLA와 CUSTCATEGORY 테이블은 모두 같은 이름의 열 (ROWID 열)을 포함합니다. SELECT 문에서 두 테이블에있는 컬럼에 테이블 별칭을 추가하십시오 (예 : SELECT U.ROWID ...). – Serge

답변

1

당신은 제대로 CUSTLA 테이블에 존재하지 않는 레코드를 확인하지 않습니다. 대신이 쿼리 :

INSERT INTO PROBLEMTABLE (problemid, source_rowid, source_table, 
          filterid, datetime, action) 
    SELECT PROBLEM_SEQ.NEXTVAL, ROWID, 'CUSTLA', 
      2, CURRENT_DATE, 'MODIFY' 
    FROM CUSTLA U 
    WHERE NOT EXISTS (SELECT 1 FROM CUSTCATEGORY Y WHERE U.CustCode = Y.CustCode) 

당신이 얻을 오류가 모두CUSTLACUSTCATEGORY 테이블이 존재하는 SELECT 절에 지정된 필드, 때문이다. 이는 RDBMS 엔진이 선택할 수있는 필드를 결정할 수 없기 때문에 모호한 필드라고합니다.

참고 : 쿼리에 암시 적 CROSS JOIN을 사용하여 기존 레코드가 없는지 확인합니다. 이런 식으로 중복 된 레코드를 많이 얻을 것입니다.

관련 문제