UPDATE JOIN 0 1 3,003

by 손님 [SQL Query] bypass_ujvc ORA-01779 [2010.01.23 11:34:45]


결과일자를 접수일자 +1 로 업데이트하려고 합니다.

오라클클럽을 검색해보고 힌트를 사용하면 된다는 글을 찾아서

이렇게 만들어봤는데요.

UPDATE  /*+ bypass_ujvc */   
(
               SELECT C.RESULTDATE AS OLD_RESULT  ,TO_DATE(((JUPDATE + 1) || ' ' || '17:30:00'),'YYYY-MM-DD HH24:MI:SS') AS NEW_RESULT
                   FROM  CCCC  C,
                                 DDDD  D
               WHERE  C.COL1 = D.COL1
                      AND  C.COL2    = '2'
                      AND  C.COL3 >= TO_DATE('2010-01-13','YYYY-MM-DD')                                                 
                      AND  D.COL2 = 'AB'
                      AND  D.COL2 = '999'
)
SET OLD_RESULT = NEW_RESULT

위 문장을 실행하면

ORA-01779: cannot modify a column which maps to a non key-preserved table

이 에러가 뜨네요. 음.  그래서,,

UPDATE CCCC    C
        SET RESULTDATE = (
                     SELECT TO_DATE(((JUPDATE + 1) || ' ' || '17:30:00'),'YYYY-MM-DD HH24:MI:SS') AS NEW_RESULT
                         FROM   DDDD   D
                      WHERE  C.COL1 = D.COL1
                            AND   C.COL2    = '2'
                            AND   C.COL3 >= TO_DATE('2010-01-13','YYYY-MM-DD')                                                 
                            AND   D.COL2 = 'AB'
                            AND   D.COL2 = '999'              )

이렇게도 해보았는데 이건 쿼리 시간이 지금 30분째;;;실행중이네요;;

 어떤부분이 잘못된건지 잘모르겠네요 도와주시면 감사하겠습니다. ㅠㅠ

by 마농 [2010.01.23 22:36:19]
where 절이 빠졌네요.

WHERE EXISTS
(
SELECT 1
FROM DDDD D
WHERE C.COL1 = D.COL1
AND C.COL2 = '2'
AND C.COL3 >= TO_DATE('2010-01-13','YYYY-MM-DD')
AND D.COL2 = 'AB'
AND D.COL2 = '999'
)
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입