database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 35544 게시물 읽기
No. 35544
ORA-01733: 가상 열은 사용할 수 없습니다
작성자
다반향초
작성일
2009-04-14 20:55
조회수
18,937

조인업데이트를 하려고 하는데 자꾸 ORA-01733: 가상 열은 사용할 수 없습니다 라고 메세지가 뜨네요



UPDATE 

(   

    SELECT  RNK, SPARERANK, A.INTERPASSGU,

            A.USERNO, A.USERID, A.USERDTE, USERDTE_CHECK

        FROM

        (          

            SELECT  ROW_NUMBER() OVER

                (

                    PARTITION BY COURSEGU, DEPART, STUDENTGU

                    ORDER BY PAPERINTERTOT DESC, NAME DESC

                ) AS RNK, A.PLANCD, A.RECEIPTNO, INTERPASSGU, PAPERINTERTOT,

                    DECODE(A.COURSEGU,'6','1',A.COURSEGU) COURSEGU,

                    A.DEPART, A.STUDENTGU, SPARERANK,

                    TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') USERDTE_CHECK,

                    B.USERNO, B.USERID, B.USERDTE

                FROM E_APPLICANT A

                JOIN E_APPDATA B ON A.PLANCD=B.PLANCD AND A.RECEIPTNO=B.RECEIPTNO   

            WHERE A.PLANCD=:V_PLANCD AND A.COURSEGU=:V_COURSEGU

                AND A.DEPART=:V_DEPART

                AND PAPERPASSYN='Y' AND PAPERPASSYN IS NOT NULL

                AND PAPERINTERTOT IS NOT NULL

                AND ((INTERPASSGU<>'1' AND INTERPASSGU<>'2') OR INTERPASSGU IS NULL)              

        ) A

        JOIN E_REGISTPERSON B ON A.PLANCD=B.PLANCD AND A.COURSEGU=B.COURSEGU

            AND A.DEPART=B.DEPARTGU AND A.STUDENTGU=B.STUDENTGU               

    WHERE RNK<=SPARECNT

) SET INTERPASSGU='3', SPARERANK=RNK,

      USERNO=:V_USERNO, USERID=:V_USERID, USERDTE=:V_USERDTE


업데이트 구문을 제외하고 셀렉트문만 실행하면 잘나오는데 업데이트문을 실행하면 에러가 뜨네요

ROW_NUMBER() OVER 로 필드를 가공해서 안되는거 같은데 

되게하는 방법없을까요?


답변부탁드립니다

이 글에 대한 댓글이 총 4건 있습니다.

가상 Table에 정보를 저장(Insert) 하거나 변경(update)를 수행할 수 없지요

즉, UPDATE (SELECT....)

SELECT 부분이 실 Table이어야만 하지 Select된 결과에 대한 것은 변경이나 저장을

할 수 없는 것이지요.

따라서 Select 부분을 조건절로 보내고, 실 Table을 정의하시면 됩니다.

시몬님이 2009-04-15 10:22에 작성한 댓글입니다. Edit

답변감사합니다


시몬님의 말이 잘 이해가 안되는데요


ROW_NUMBER() OVER 이구문을 제외하고 실행하면 


업데이트가 됩니다 


이건 어떻게 봐야되는지요?

다반향초님이 2009-04-15 11:27에 작성한 댓글입니다.
이 댓글은 2009-04-15 13:55에 마지막으로 수정되었습니다. Edit

뷰에 대한 update는 sql이 실제테이블에 대한 update 구문으로 변형되어 수행됩니다.

그럼으로 의사열과 같은 컬럼이나 다중테이블로 조인된 구문의 경우 해당하는 열이 update가능한 열인지

[키보존열] 아닌지에 따라 가능하거나 불가능합니다.


수고하세요.

ㅁ님이 2009-04-15 11:47에 작성한 댓글입니다. Edit

답변감사합니다
키보존은 두테이블이 조인으로 연결되면 되는거아닌가요?
현재키두개가 포린키로 연결되어있는데요
힌트를 써도 되고요

컬럼이 가공되어서 안된다는 말씀이신가요?

다반향초님이 2009-04-15 13:58에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
35547하나의 행을 여러행으로 변경 [3]
김명근
2009-04-15
4247
35546RMAN에서 컨트롤 파일 자동백업에 대하여.....
윤철민
2009-04-15
2640
35545RMAN으로 백업하는데 아카이브 파일에 대하여...
윤철민
2009-04-15
2940
35544ORA-01733: 가상 열은 사용할 수 없습니다 [4]
다반향초
2009-04-14
18937
35543유닉스 쉘에서 wait 명령어는 어떤프로세스를 기다리는지..
유지
2009-04-14
2856
35542일별로 갯수가 다른 데이터를 월 단위로 총카운트 뽑는 쿼리 [1]
궁금
2009-04-14
3272
3554110g OCP 에 대해서 문의 드립니다.
이호민
2009-04-14
2538
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다