해석 좀 부탁드립니다 (CONNECT BY, DBMS_RANDOM.VALUE등) 0 2 6,306

by stevekim [SQL Query] CONNECT BY DBMS_RANDOM.VALUE [2024.08.07 13:13:12]


안녕하세요. 다음의 쿼리문이 잘 돌아가는데 (이거작성하느라 꼬박 하루가 ㅠㅠ), 여하튼 AI등 물어 물어 작성하였는바.

이해가 잘 안되는 부분이 있어서 알기쉽게 말씀해주시면 복을 마니마니 받으실겁니다. ^^

아래의 쿼리문에서  PRIOR  YEAR||SEMSTR_CD = YEAR||SEMSTR_CD 이렇게 해도 오류(무한루프)고, YEAR및 SEMSTR_CD가 KEY즉 UNIQUE가 아니어도 오류입니다.

또 PRIOR dbms_random.value IS NOT NUL 이문장을 왜써야하는지 잘모르겠어요 ㅠㅠ (안쓰면 오류 ㅠㅠ)

WITH your_table AS (
    SELECT
          year
        , semstr_cd
        , begin_dt
        , end_dt
    FROM
        wu_hak.th_hakj_schdul c
)
SELECT
      year || substr(semstr_cd,5,1) AS clw_yyse
    , '1' as clw_camp
    , to_char(LEVEL) AS clw_clwk
    , TO_CHAR(TO_DATE(begin_dt, 'YYYYMMDD') + ((LEVEL - 1) * 7), 'YYYYMMDD') AS clw_stdt
    , TO_CHAR(TO_DATE(begin_dt, 'YYYYMMDD') + ((LEVEL - 1) * 7) + 6, 'YYYYMMDD') AS clw_eddt
    , '' as clw_cmnt
FROM
    your_table
CONNECT BY
    PRIOR year = year AND
    PRIOR semstr_cd = semstr_cd AND
    PRIOR dbms_random.value IS NOT NULL AND
    LEVEL <= FLOOR((TO_DATE(end_dt, 'YYYYMMDD') - TO_DATE(begin_dt, 'YYYYMMDD')) / 7) + 1
ORDER BY
    year, semstr_cd, clw_stdt;
by 마농 [2024.08.07 14:28:50]

단일행을 여러행으로 복제할 때 사용하는 기법 중 하나가
CONNECT BY LEVEL 을 이용하는 방법입니다.
이 방식은 1건의 자료일 때만 적용하는 방식인데
여러건의 자료에 직접 적용을 하면
원치 않게 기하급수로 늘어나게 되어 큰일이 납니다.
이를 방지하는 기법중에 하나가 dbms_random 조건을 넣는 것인데
이게 왜 되는지도 모르고 의미를 알 수 없는 코드가 되어버리므로 저는 이 방법을 추천하지 않습니다.
http://gurubee.net/article/55635
 

SELECT year || SUBSTR(semstr_cd, 5, 1) AS clw_yyse
     , '1'         AS clw_camp
     , TO_CHAR(lv) AS clw_clwk
     , TO_CHAR(sdt + ((lv - 1) * 7)    , 'yyyymmdd') AS clw_stdt
     , TO_CHAR(sdt + ((lv - 1) * 7) + 6, 'yyyymmdd') AS clw_eddt
     , '' AS clw_cmnt
  FROM (SELECT year
             , semstr_cd
             , TO_DATE(begin_dt, 'yyyymmdd') sdt
             , TO_DATE(end_dt  , 'yyyymmdd') edt
          FROM wu_hak.th_hakj_schdul
        )
     , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 99)
 WHERE lv <= FLOOR((edt - sdt) / 7) + 1
 ORDER BY year, semstr_cd, lv
;

 


by stevekim [2024.08.12 09:07:05]

단순명료함의 극치네요. 마농님은 최고중의 최고^^ 감사드립니다. 또 한수 배웠습니다. IT에서는 어디 물어보고 의지 할 곳이 있다는게 재산중의 재산이죠. 마농님은 제게 그런 존재같아요.^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입