복붙노트

[SQL] SQL0418N 오류 해결 방법

SQL

SQL0418N 오류 해결 방법

내가 매개 변수없이 실행하면 I 업데이트 아래 문을 사용하고 /, 그것의 벌금을 테이블에 일부 데이터를 삽입합니다. 그러나, 곧 시도 하는 발생 매개 변수를 사용하여 실행합니다 :

SQL0418N - 문은 유형이 지정되지 않은 매개 변수 표시 문자, DEFAULT 키워드 또는 유효하지 않은 널 (null) 값의 사용이 포함되어 있습니다.

여기 오류 정보를 읽었습니다,하지만 난 여전히 내 문은 실행되지 않습니다 이유와 사투를 벌인거야.

--This statement works
MERGE Into AB.Testing_Table A
USING (VALUES('TEST', 'P')) B(TEST_ID, "ACTION")
ON (A.TEST_ID = B.TEST_ID)
WHEN NOT MATCHED THEN
INSERT (TEST_ID, "ACTION")
VALUES ('TEST', 'P')
WHEN MATCHED THEN
UPDATE SET TEST_ID = 'TEST'
,"ACTION" = 'P';

--This statement fails with error SQL0418N
MERGE Into AB.Testing_Table A
USING (VALUES(@TEST, @ACTION)) B(TEST_ID, "ACTION")
ON (A.TEST_ID = B.TEST_ID)
WHEN NOT MATCHED THEN
INSERT (TEST_ID, "ACTION")
VALUES (@TEST, @ACTION)
WHEN MATCHED THEN
UPDATE SET TEST_ID = @Test
,"ACTION" = @Action;

도움에 미리 감사드립니다!

해결법

  1. ==============================

    1.기본적으로, DB2는 이러한 매개 변수에에 보내는 어떤 데이터 유형을 알 수 없습니다. 난 당신이 DB2의 이전 버전에 하나있어 추측 (리눅스 / 유닉스 / 윈도우 미만 9.7, 또는 메인 프레임 버전보다 오래된 10.1)에 "자동"형식 변환의 전체를 많이하지 않는거야. 또는 당신은 (그것이 소리 이상으로, 여전히 "입력"할 필요가) NULL 값에 전송하고 있습니다.

    기본적으로, DB2는 이러한 매개 변수에에 보내는 어떤 데이터 유형을 알 수 없습니다. 난 당신이 DB2의 이전 버전에 하나있어 추측 (리눅스 / 유닉스 / 윈도우 미만 9.7, 또는 메인 프레임 버전보다 오래된 10.1)에 "자동"형식 변환의 전체를 많이하지 않는거야. 또는 당신은 (그것이 소리 이상으로, 여전히 "입력"할 필요가) NULL 값에 전송하고 있습니다.

    당신은 (내가 여기에 데이터 유형을 믿고있어 적절한 것이 무슨 소용)를 입력 매개 변수로 매개 변수 마커를 작성하여 문제를 해결할 수 있습니다 :

    MERGE INTO AB.TESTING_TABLE A
    USING (VALUES (
              CAST(@TEST AS CHAR(4))
             ,CAST(@ACTION AS CHAR(1))
           )) B(TEST_ID, "ACTION")
       ON (A.TEST_ID = B.TEST_ID)
     WHEN NOT MATCHED THEN
         INSERT (TEST_ID, "ACTION")
         VALUES (B.TEST_ID, B.ACTION)
    WHEN MATCHED THEN
         UPDATE SET "ACTION" = B.ACTION
    

    당신은 MERGE를 사용하고 있기 때문에 또한, 당신은 당신이 전달 된 사용 테이블에있는 값을 참조 할 수 업데이트에서 매개 변수 또는 INSERT 부품을 사용할 필요가 없습니다. 또한, 이후있는 거 매칭을 TEST_ID에, 당신은 할이 업데이트되지 않을 것이기 때문에 어쨌든, 당신의 UPDATE 문에서 것을 포함 할 필요는 없습니다.

  2. from https://stackoverflow.com/questions/13381898/how-to-resolve-sql0418n-error by cc-by-sa and MIT license