안녕하세요. MERGE문 질문 드립니다.. 0 3 2,945

by 동안이 [2013.07.10 20:34:23]



MERGE INTO TNOTIFY MST
  USING (SELECT * FROM TNOTIFY INN
   WHERE INN.GOODS_CODE = #goodsCode#
AND INN.GOODS_TYPE = #goodsType#
    AND INN.NOTIFY_CODE = #notifyCode#
   )
   ON (MST.GOODS_CODE=INN.GOODS_CODE
 AND MST.GOODS_TYPE = INN.GOODS_TYPE
 AND MST.NOTIFY_CODE = INN.NOTIFY_CODE)
   WHEN MATCHED THEN UPDATE 
  SET  MST.NOTIFY_TITLE=#notifyTitle#
  , MST.NOTIFY_NOTE=#notifyNote#
  , MST.DISPLAY_SEQ=#displaySeq#
  , MST.USE_FLAG=#useFlag#
  , MST.MODIFY_DATE=SYSDATE
  , MST.MODIFY_ID=#modifyId#
  , MST.MODIFY_IPADDR=#modifyIpaddr#
  WHERE MST.GOODS_CODE=#goodsCode#
   AND MST.NOTIFY_CODE=#notifyCode#
   AND MST.GOODS_TYPE=#goodsType#
  WHEN NOT MATCHED THEN INSERT  
  ( MST.GOODS_CODE
  , MST.NOTIFY_CODE
  , MST.GOODS_TYPE
  , MST.NOTIFY_TITLE
  , MST.NOTIFY_NOTE
  , MST.DISPLAY_SEQ
  , MST.USE_FLAG
  , MST.INSERT_DATE
  , MST.INSERT_ID
  , MST.INSERT_IPADDR
  , MST.MODIFY_DATE
  , MST.MODIFY_ID
  , MST.MODIFY_IPADDR )
  VALUES ( 
 #goodsCode#
   , #notifyCode#
  , #goodsType#
  , #notifyTitle#
  , #notifyNote#
  , #displaySeq#
  , #useFlag#
  , SYSDATE
  , #insertId#
  , #insertIpaddr#
  , SYSDATE
  , #modifyId#
  , #modifyIpaddr# )


이렇게 쿼리문을 짰는데..  ON 문에 같은 테이블 끼리는 안되는 건가요?

현재 TNOTIFY 테이블에는 데이터가 하나도 없는 상태 이며. UI 단에서 입력한 값이 들어가게 할려고 합니다.

PK는 GOODS_CODE,  NOTIFY_CODE, GOODS_TYPE

에러 메세지는 ORA-00904: "INN"."NOTIFY_CODE": 부적합한 식별자  이렇게 나옵니다.

제 설명이 부족하다면 조언 부탁 드리겠습니다.

문제점이 무엇인지 답변 부탁드릴께요..
by 마농 [2013.07.11 08:18:27]
--USING (...) INN 요렇게 알리아스를 줘야 인식되겠지요.
--괄호 안의 INN 은 무의미하구요 밖에서 줘야죠.
--요건 에러에 대한 것만 얘기구요.
--위처럼 하면 업데이트는 될 수 있어도 인서트는 안됩니다.
--USING 절의 건수만큼만 실행된다고 보시면 됩니다.
--조건을 만족하는게 있으면 찾아서 업데이트 하겠지만
--조건을 만족하는게 없으면 아예 실행이 안됩니다.
--따라서 USING절에서 직접 테이블 조건 걸지 마시고 그냥 Dual 사용하세요.
--그리고 Update 절에서 Where 절도 빼세요.
MERGE INTO tnotify mst
USING dual inn
 ON ( MST.GOODS_CODE  = #goodsCode#
  AND MST.GOODS_TYPE  = #goodsType#
  AND MST.NOTIFY_CODE = #notifyCode# )
...

by 장비 [2013.07.11 08:51:00]

저 에러에 해당하지는 않지만  참고로  ON절에 포함된 컬럼은 업데이트 못하는걸로 알고 있습니다.

by 동안이 [2013.07.11 09:23:25]

마농님 감사합니다!!  답답함이 풀렸네요.^^ 장비님 제가 생각못하고 있는 부분이었는데 감사합니다. ^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입