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 38820 게시물 읽기
No. 38820
안뇽하세요 질문이 있습니다. (재귀 프로시져)
작성자
윤명철(nidty)
작성일
2011-08-25 10:31ⓒ
2011-08-25 10:33ⓜ
조회수
5,287

 

업무상 컨넥바이로 풀지 못하는것이 생겨서 아무래도 재귀 프로시져를 써야될것 같습니다.

오라클에서 재귀 프로시져가 아무런 제한없이 무질서한 무제한 계층구조를 풀수있는지 궁금합니다.

얼핏 듣기로는 db 데드락을 방지하기 위해서 몆개 이상 못한다 이런제약이 있었던거 같은데..

 

업무는

레시피(식품 요리 설계서 ????) 를 푸는 업무인데.

이게 계층구조로 되어 있습니다.

완제품, 반제, 원료 이렇게 있어서.

반제는 다시 반제, 원료 이렇게 들어갑니다.

공장 마다 만드는 제품(완제, 반제)가 다른데 레시피를 풀때

해당 생산팀의 제품이 아니면 반제라도 그냥 원료처럼 취급해줘야됩니다.

예)                                       양념갈비(완제품 [1공장])

                                                    |

                |------------------------------------------------------------------------|

               |                                              |                                                   |

 양파채 (반제[1공장])             양념(반제[2공장])       호주산우육(원료)

        |                                                     |

        |                       ----------------------------------------------------

        |                       |                          |                                       |  

    양파 (원료)      간장(원료)     설탕(원료)            볶음깨(반제[1공장])

                                                                                                    |

                                                                                                깨(원료)

 

이런식으로 풀어야되는 상황입니다.

위의 2LV에 양념은 반제이지만 2공장이기때문에 하위 반제나 원료를 풀면 안됩니다.(양념 하나만 있으면됨)

이 레벨이 20~50까지 내려갈거 같습니다.

이게 재귀로 가능한지 궁금합니다.

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

WITH t AS
(
SELECT '001' cd, '양념갈비' nm, '완제' gb, '1' fc, '' pcd FROM dual
UNION ALL SELECT '002', '양파채'    , '반제', '1', '001' FROM dual
UNION ALL SELECT '003', '양파'      , '원료', '' , '002' FROM dual
UNION ALL SELECT '004', '양념'      , '반제', '2', '001' FROM dual
UNION ALL SELECT '005', '간장'      , '원료', '' , '004' FROM dual
UNION ALL SELECT '006', '설탕'      , '원료', '' , '004' FROM dual
UNION ALL SELECT '007', '볶음깨'    , '반제', '1', '004' FROM dual
UNION ALL SELECT '008', '깨'        , '원료', '' , '007' FROM dual
UNION ALL SELECT '009', '호주산우육', '원료', '' , '001' FROM dual
)
SELECT cd, nm, gb, fc, pcd
     , LEVEL lv
     , SYS_CONNECT_BY_PATH(nm, '-') nms
  FROM (
        SELECT cd, nm, gb, fc, pcd
             , DECODE(CONNECT_BY_ROOT(fc), fc, gb, '원료') gb2
          FROM t
         START WITH pcd IS NULL
         CONNECT BY PRIOR cd = pcd
        )
 START WITH pcd IS NULL
 CONNECT BY PRIOR cd = pcd
        AND PRIOR gb2 != '원료'
;

마농(manon94)님이 2011-08-25 14:14에 작성한 댓글입니다.

 

앗 마농님 감사합니다.

휴 이렇게 쉽게 풀수도 있군요.

오전내내 재귀 로직 구상하고 있었습니다. 하하..

윤명철(nidty)님이 2011-08-25 15:17에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
38824목록 도움요청 [1]
오라클초보임
2011-08-26
4108
38823비어있는 시간구하는 방법 sql 좀 알려주세요... [3]
김영민
2011-08-25
4747
38822쿼리 좀 부탁 드립니다. [2]
초보
2011-08-25
3834
38820안뇽하세요 질문이 있습니다. (재귀 프로시져) [2]
윤명철
2011-08-25
5287
38819자동백업스크립트입니다.
오라클초보임
2011-08-25
5025
38816검색 속도 문제 입니다. [7]
최진규
2011-08-24
9458
38815Script 관련 질문입니다. [3]
나그네
2011-08-24
5566
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.023초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다