테이블 A : <pre> 번호 메모 부모 순서 no memo ref order 1 AA 1 1 2 AA-1 1 2 3 AA-1-1 2 3 4 AA-2 1 2 5 AA-2-1 4 3 </pre> 테이블 B는 A 와 구조가 똑같습니다
예를 들어서 행번호 4를 선택하면 4와 연관된 데이타(1, 4,5)를 모두 B테이블에 저장하고 싶은데 어떻게 하면 될까요? 정말 모르겟네요 부탁드리겠습니다 위 테이블 구조를 예쁘게 적을려고 해도 안되네요 엉망으로 글이 적어지네요
by 까망소
[2012.12.10 16:38:05]
CS응용프로그램 이벤트 처리? 또는 웹페이지 ON-CLICK() 이벤트 인가요? 선택된 행의 ref값을 질의하여 insert하는 문장을 작성하시려는 걸 의도하시는 건지...
by 마농
[2012.12.10 17:17:24]
INSERT INTO b
-- 4번부터 계층구조 역탐색(하위에서 상위로)
SELECT *
FROM t
START WITH no = 4
CONNECT BY no = PRIOR NULLIF(ref, no)
UNION ALL
-- 4번 밑으로 계층구조 탐색(상위에서 하위로)
SELECT *
FROM t
START WITH ref = 4
CONNECT BY NOCYCLE PRIOR no = ref
;
by 아발란체
[2012.12.10 17:20:18]
--":FIND_VAL" 부분에 행번호 4의 메모값 "AA-2"를 대입하면 1, 4, 5행 값이 테이블B에 들어갑니다.
INSERT INTO
TABLE_B
SELECT
NO,
MEMO,
REF_NO,
ORDER_NO
FROM
TABLE_A
WHERE
MEMO = SUBSTR(:FIND_VAL, 0, 2) OR MEMO LIKE :FIND_VAL||'%';
by 아발란체
[2012.12.10 17:25:15]
메모 계층 구조가 AA-AA까지만 처리가 됩니다. 그리고 ORDER와 REF는 예약어라 뒤에 "_NO"를 넣었습니다 ~ :)
by 아발란체
[2012.12.10 17:28:10]
검색 계층이 2 Depth 이상 또는 정해지지 않았다면 마농님 것이 진리~
by 헨씀히포
[2012.12.10 18:00:12]
오마이갓 정말 감사드립니다 두분다 정말 감사드려요 복 받으실거에요 아주 잘됩니다 감사합니다
by 까망소
[2012.12.10 18:04:35]
아... 경험과 생각이 부족하다보니 많이 배우게 됩니다. 마농님, 아발란체님 감사합니다. ^^
by 헨씀히포
[2012.12.10 18:05:20]
그런데 한가지 더 질문 드릴께요 B테이블에 제일 상위 데이타(5번을 선택하면 제일 상위가 1번이죠)가 이미 B테이블에 잇으면 에러가 나던데 B테이블에 잇는건 빼고 저장할려면 위 쿼리에서 어떻게 바꿔야하나요? 부탁드리겟습니다
by 마농
[2012.12.10 18:34:12]
MERGE INTO b
USING
(
SELECT *
FROM t
START WITH no = 4
CONNECT BY no = PRIOR NULLIF(ref, no)
UNION ALL
SELECT *
FROM t
START WITH ref = 4
CONNECT BY NOCYCLE PRIOR no = ref
) a
ON (a.no = b.no)
WHEN NOT MATCHED THEN
INSERT VALUES(a.no, a.memo, a.ref, a.order)
;
by 헨씀히포
[2012.12.10 21:14:55]
정말 마술같아요 불가능을 가능으로 해주시네요 대단하십니다 감사드리겟습니다 짱~~~~~~!
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.