프로그래밍/DB
[oracle] SELECT 를 사용한 UPDATE 3
galad
2010. 9. 14. 14:42
UPDATE /*+ bypass_ujvc */ ( SELECT CONTENT_ID, HDV_YN, META18 AS META_HDV_YN FROM ( SELECT A.CONTENT_ID ,CASE WHEN COUNT(B.META02) > 0 THEN 'Y' ELSE 'N' END AS HDV_YN ,C.META18 FROM SUB_CONTENT_META A, SUB_CONTENT_META_EXTEND B, CONTENT_META_EXTEND C WHERE A.SUB_CONTENT_ID = B.SUB_CONTENT_ID AND A.CONTENT_ID = C.CONTENT_ID AND B.META02 = 'PD009703' -- AND A.CONTENT_ID = '' GROUP BY A.CONTENT_ID, C.META18 ) ) SET META_HDV_YN = HDV_YN |
CONTENT_META_EXTEND 의 컬럼을 업데이트하고 싶은데 위와 같이 안쪽(?)에서 뷰를 만들 때 같이 조인해버리면
"가상 열은 사용할 수 없습니다" 라는 에러가 난다.
아래처럼 실제 데이터 넣을 컬럼은 가장 외부로 뺄 것
참고: http://database.sarang.net/?inc=read&aid=35544&criteria=oracle&subcrit=&id=36136&limit=20&keyword=&page=50
[가상 Table에 정보를 저장(Insert) 하거나 변경(update)를 수행할 수 없지요
즉, UPDATE (SELECT....)
SELECT 부분이 실 Table이어야만 하지 Select된 결과에 대한 것은 변경이나 저장을
할 수 없는 것이지요.
따라서 Select 부분을 조건절로 보내고, 실 Table을 정의하시면 됩니다.]
UPDATE /*+ bypass_ujvc */ ( SELECT T.CONTENT_ID, T.HDV_YN, C.META18 AS META_HDV_YN FROM ( SELECT A.CONTENT_ID ,CASE WHEN COUNT(B.META02) > 0 THEN 'Y' ELSE 'N' END AS HDV_YN FROM SUB_CONTENT_META A, SUB_CONTENT_META_EXTEND B WHERE A.SUB_CONTENT_ID = B.SUB_CONTENT_ID AND B.META02 = 'PD009703' AND A.CONTENT_ID = '0000024061' GROUP BY A.CONTENT_ID ) T, CONTENT_META_EXTEND C WHERE T.CONTENT_ID = C.CONTENT_ID ) SET META_HDV_YN = HDV_YN; |