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; |
'프로그래밍 > DB' 카테고리의 다른 글
[oracle] Windows 7 과 oracle, Toad (0) | 2011.03.09 |
---|---|
[Tool] 토드 폰트 변경하기 (0) | 2010.11.19 |
[oracle] select 문을 이용한 update 2 (0) | 2010.08.16 |
[SQLite] Command Line Shell For SQLite (0) | 2010.05.24 |
[SQLite] Quick Start (1) | 2010.05.24 |