update /*+ bypass_ujvc */
(
select a.class1, a.class2, a.class3, a.class4, a.class5, a.depth, b.chk_cls from classfication_plan a,
(select class1, class2, class3, class4, class5, chk_cls, depth, class_nm
from(
select class1, class2, class3, class4, class5,
(decode(class1, '00', '0', '1') + decode(class2, '00', '0', '1') + decode(class3, '00', '0', '1') + decode(class4, '000', '0', '1') + decode(class5, '000', '0', '1'))
as chk_cls,
class_nm, depth
from classfication_plan) order by class1, class2, class3, class4, class5) b
where a.class1 = b.class1
and a.class2 = b.class2
and a.class3 = b.class3
and a.class4 = b.class4
and a.class5 = b.class5
)
set a.depth = b.chk_cls
이게 기본 쿼리입니다.
classfication_plan 이라는 테이블에 depth 가 있는데, class1,2,3,4,5 의 값을 보고 00 이나 000 이면 상관없고 다른 값이면 1을 가져온후 chk_cls 라는 컬럼에 합쳐서 값을 가지고 옵니다.
이후 depth 라는 컬럼과 비교 혹은 비교도 필요없이 그대로 값을 update 하는 쿼리를 짜려고 하는데..열명이 부족하다고 뜨던가..아니면 문제가 생겨버립니다.
가운데 b 로 명명된 select 문은 이상이 없는데..여튼, 기본적인 로직은 메뉴에 대한 depth 를 넣는 건데..어디가 문제인지..후우...
고수분들의 도움을 요청합니다.. |