오라클 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
|