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 41333 게시물 읽기
No. 41333
bypass_ujvc 옵션을 대체하는 방법이 무엇인가요?
작성자
앙마승재(hadessj)
작성일
2017-02-13 21:05ⓒ
2017-02-14 08:22ⓜ
조회수
6,540

오라클 10g Enterprise 에서

오라클 11g Standard RAC환경으로 변경되었습니다.

 

DB서비스 다 변경하고 보니.... 아래 bypass_ujvc 옵션이 11g 에서는 지원되지 않는다고 하는군요. >.<

명시되지 않은 Inline뷰에서의 업데이트가 안된다고 하는데...

 

에러메시지 -> ORA-01779: 키-보존된것이 아닌 테이블로 대응할 열을 수정할 수 없습니다

 

아래 쿼리를 어떤 식으로 바꾸면 좋을까요?

 

참고로. primary key값은 존재합니다. PRPRTY_SN 값입니다.

 

고수님들의 의견이나 간략한 조언 부탁드립니다. _(..)_

 

 

 

 

UPDATE /*+ bypass_ujvc */

(

select tm.lqd_valu_amount

, t1.real_asset v_lqd_valu_amount

from ta_total tm

join (

SELECT a1.reqst_no

, a1.prprty_sn

, a1.mktc

, NVL(SUM(a3.prncpal), 0) prncpal

, NVL(SUM(a3.intr), 0) intr

, GREATEST(a1.mktc - NVL(SUM(a3.prncpal), 0) - NVL(SUM(a3.intr), 0), 0) real_asset /* 청산가치금액 구함 */

FROM (select t2.reqst_no, t2.prprty_sn, calc_need_yn, lqd_valu_amount

, CASE WHEN t2.prprty_ty = 'SM4LEASE'

THEN t2.prprty_amount

ELSE CASE WHEN t3.pbsvnt_yn IS NULL

THEN t2.mktc

ELSE CASE WHEN t3.pbsvnt_yn = 'Y'

THEN 0

ELSE CEIL(t2.mktc / 2)

END

END

END mktc

from ta_total t2

left join ta_retire t3

on t3.prprty_sn = t2.prprty_sn

where t2.reqst_no = :REQ

) a1

LEFT JOIN tr_foreclose a2

ON a2.prprty_sn = a1.prprty_sn

LEFT JOIN td_total a3

ON a3.credit_sn = a2.credit_sn

WHERE a1.reqst_no = :REQ

AND not exists (select 1 from ta_total where reqst_no = :REQ and CALC_NEED_YN = 'N')

GROUP BY a1.reqst_no, a1.prprty_sn, a1.mktc

 

UNION all

 

SELECT a1.reqst_no

, a1.prprty_sn

, a1.mktc

, NVL(SUM(a3.prncpal), 0) prncpal

, NVL(SUM(a3.intr), 0) intr

, GREATEST(MAX(a1.lqd_valu_amount), 0) real_asset /* 청산가치금액 구함 */

FROM (select t2.reqst_no, t2.prprty_sn, calc_need_yn, lqd_valu_amount

, CASE WHEN t2.prprty_ty = 'SM4LEASE'

THEN t2.prprty_amount

ELSE CASE WHEN t3.pbsvnt_yn IS NULL

THEN t2.mktc

ELSE CASE WHEN t3.pbsvnt_yn = 'Y'

THEN 0

ELSE CEIL(t2.mktc / 2)

END

END

END mktc

from ta_total t2

left join ta_retire t3

on t3.prprty_sn = t2.prprty_sn

where t2.reqst_no = :REQ

) a1

LEFT JOIN tr_foreclose a2

ON a2.prprty_sn = a1.prprty_sn

LEFT JOIN td_total a3

ON a3.credit_sn = a2.credit_sn

WHERE a1.reqst_no = :REQ

AND exists (select 1 from ta_total where reqst_no = :REQ and calc_need_yn = 'N')

GROUP BY a1.reqst_no, a1.prprty_sn, a1.mktc

) t1

on t1.prprty_sn = tm.prprty_sn

where tm.reqst_no = :REQ

)

 

SET lqd_valu_amount = v_lqd_valu_amount

 

 

 

-- 위 쿼리의 update라인만 빼고 select한 결과값은 대략 아래와 같습니다.

LQD_VALU_AMOUNT V_LQD_VALU_AMOUNT PRPRTY_SN

2000000 2000000 2016121300000092

1111 1111 2017010900000053

1500000 1500000 2016121300000091

 

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

11g부터는 그냥 merge문 사용하시면 됩니다.

손재균(iikii)님이 2017-02-14 08:10에 작성한 댓글입니다.

넵. 감사합니다. merge 밖에 없나 보네요 ^^;

 

열심히 merge로 변경하고 있습니다~

앙마승재(hadessj)님이 2017-02-14 08:37에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41336대량 delete 질문드립니다ㅠ [1]
이름
2017-02-17
6768
41335힌트 문의사항 입니다.
이민우
2017-02-17
6172
41334컬럼의 결과를 IN으로 조회하는 방법? [3]
작성자
2017-02-14
6604
41333bypass_ujvc 옵션을 대체하는 방법이 무엇인가요? [2]
앙마승재
2017-02-13
6540
41332오라클9i -> 오라클10i로 이전 [1]
매수신호
2017-02-13
6371
41331오라클 데이터파일 관련 질문입니다 [2]
이민호
2017-02-10
6209
41330Oracle error SQL문 도와주세요..
도와주세요.
2017-02-07
6084
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다