프로시저 커서 질문입니다..... 0 4 1,709

by 완전초짜 [PL/SQL] [2012.09.20 18:10:36]


CREATE OR REPLACE function DINSOWN.sf_f0702002(v_dt in char, v_emp in char)
    return varchar2
is
    v_cur_dt char(8);

    CURSOR CR IS
    SELECT EMP_NO
   FROM aaaa
    WHERE NVL(RETI_DATE,'99999999') >= v_cur_dt
   AND ENT_CO_DATE < v_cur_dt
   AND EMP_NO   LIKE   v_emp||'%'
   AND ( SUBSTR(ENT_CO_DATE, 5, 4) = SUBSTR(v_cur_dt, 5, 4)

    SR CR%ROWTYPE;

BEGIN
    v_cur_dt = :v_dt   <-------------------- 여기서 넣어주는거 같은데요....

    loop
fetch cr   into sr
    end loop

시작을 이렇게 하는 프로시져가 있습니다..
제가 궁금한것은요 in으로 v_dt,v_emp를 받자나요? 그런데 is 에서 변수선언하면서 cursor cr의 쿼리문을 돌리는데요
쿼리문에서 v_emp는 그대로 써있는데 v_dt가 아닌 v_cur_dt로 저렇게 되면 데이터가 나오나요???
아님 loop에서 페치할때 데이터를 불러오는건가요?

by 마농 [2012.09.20 18:26:17]

IS 와 Begin 사이는 선언부입니다.
선언부에서는 커서를 선언만 한거구요.
실행부는 Begin 부터죠.
이곳에서 커서 오픈하고 패치하지요.


by 완전초짜 [2012.09.21 08:08:11]

아... 그럼 위에서 데이터를 가져오는게 아니라 begin 에서 커서오픈할때 데이터를 가져오는거군요...
감사합니다~~ 여태 is 문에서 미리 데이터를 가져오는걸로 생각하고있었어요..


by 최성호 [2012.09.21 10:33:16]

어? IS 부분에 선언해놓은 커서는 프로시저 호출시에 선언부에서 TEMP 형식으로 데이타를 저장해두 지 않나요? 저도 그렇게 알고 있었는데;;

by 손님 [2012.09.21 14:02:02]

CREATE OR REPLACE function DINSOWN.sf_f0702002(v_dt in char, v_emp in char)
    return varchar2
is
    CURSOR CR (p_cur_dt CHAR ,p_emp CHAR)
    IS
    SELECT EMP_NO
    FROM aaaa
    WHERE NVL(RETI_DATE,'99999999') >= p_cur_dt
    AND ENT_CO_DATE < p_cur_dt
    AND EMP_NO   LIKE  p_emp || '%'
    AND ( SUBSTR(ENT_CO_DATE, 5, 4) = SUBSTR(p_cur_dt, 5, 4)
    ;
    SR CR%ROWTYPE;

BEGIN
    OPEN CR (v_dt,v_emp);
    loop
    fetch  cr  into sr;
    EXIT WHEN cr%NOTFOUND;

    end loop;
END

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