안녕하세요. 오라클 사용하다가 참 희한한 광경을 많이보네요. 아래 SQL 돌아가는 환경은 Oracle Database 10g Release 10.2.0.4.0 - 64bit Production 이고, 서버 이관하기전에는 작동했던 SQL 인데요. 실제로 TT라는 테이블에 바인드 변수 넣은데로 SITE_CD, IN_DATE, STORE_CD, ACO_CD, SHOP_ID 조건으로 SELECT 를 하면 데이터가 조회됩니다. 그러나 UPDATE 문이 돌지 않습니다. 혹시나 WHERE 절에 ( AND B.RTN_APPLY_YN = 'Y' AND B.FEE_APPLY_YN = 'Y') 이 조건이 아닌가 하여도 실제 데이터에서 이 데이터가 맞습니다. UPDATE 문에서 ( AND B.RTN_APPLY_YN = 'Y' AND B.FEE_APPLY_YN = 'Y') 아래조건을 빼도 돕니다. 그러나 아래의 조건에 또다른 조건을 넣어도 돕니다. 오라클 집합문제...(?) 오라클 버전문제...(?) 도대체 무슨 문제때문에 이럴까요 ? 도움좀 주세요 ㅜ_ㅜ 참고로 10.2.0.1환경에서는 돕니다. <strong> [오류 SQL]</strong> UPDATE TT T SET T.FEE_APPLY_YN = 'N' WHERE (T.SITE_CD, T.IN_DATE, T.STORE_CD, T.ACO_CD, T.SHOP_ID) IN ( SELECT A.SITE_CD , B.DAYS IN_DATE , A.STORE_CD, C.CARD_CD ACO_CD, D.SHOP_ID SHOP_ID FROM ( SELECT :SITE_CD SITE_CD, SITE_CD STORE_CD FROM AA A START WITH SITE_CD = :STORE_CD CONNECT BY PRIOR SITE_CD = P_CD ) A, BB B, CC C, DD D WHERE B.DAYS >= :FROMDATE AND B.DAYS <= :TODATE AND C.SITE_CD = A.SITE_CD AND (:ACO_CD = '*' OR :ACO_CD = C.CARD_CD ) AND D.SITE_CD = A.SITE_CD AND D.STORE_CD = A.STORE_CD AND D.ACO_CD = C.CARD_CD AND (:SHOP_ID = '*' OR :SHOP_ID = D.SHOP_ID ) ) AND B.RTN_APPLY_YN = 'Y' AND B.FEE_APPLY_YN = 'Y' [실행되는 SQL] UPDATE TT T SET T.FEE_APPLY_YN = 'N' WHERE (T.SITE_CD, T.IN_DATE, T.STORE_CD, T.ACO_CD, T.SHOP_ID) IN ( SELECT A.SITE_CD , B.DAYS IN_DATE , A.STORE_CD, C.CARD_CD ACO_CD, D.SHOP_ID SHOP_ID FROM ( SELECT :SITE_CD SITE_CD, SITE_CD STORE_CD FROM AA A START WITH SITE_CD = :STORE_CD CONNECT BY PRIOR SITE_CD = P_CD ) A, BB B, CC C, DD D WHERE B.DAYS >= :FROMDATE AND B.DAYS <= :TODATE AND C.SITE_CD = A.SITE_CD AND (:ACO_CD = '*' OR :ACO_CD = C.CARD_CD ) AND D.SITE_CD = A.SITE_CD AND D.STORE_CD = A.STORE_CD AND D.ACO_CD = C.CARD_CD AND (:SHOP_ID = '*' OR :SHOP_ID = D.SHOP_ID ) ) AND B.SITE_CD = :SITE_CD AND B.RTN_APPLY_YN = 'Y' AND B.FEE_APPLY_YN = 'Y'
(T.SITE_CD, T.IN_DATE, T.STORE_CD, T.ACO_CD, T.SHOP_ID) IN .. 이 부분에 컬럼 형식이 안 맞는 데이터가 있어서 오류 나는 것 아닐까요? t테이블의
IN_DATE 컬럼은 date 형인데 b 테이블의
DAYS IN_DATE 컬럼에는 20150132 와 같이 varchar2형의 잘못된 데이터가 있다든지.. 혹은 char형 컬럼이 있다든지 해서 :site_cd 조건이 들어가서 해당 데이터가 포함 되어있지 않으면 update되고 잘못된 데이터가 들어있으면 update 안 되고.. 뭐 그런 상황 같은데요.. 그런데 오류가 아니라 update 결과가 0건이라시니.. 프로그램단에서 말고 쿼리 직접 날려도 오류가 안 난다는 말씀이시죠?