cursor에서 변수에 파라미터로 받은 값 in 에 넣기 0 2 3,016

by 옹네 [PL/SQL] [2010.08.11 15:26:43]


이중 커서 선언이구요...
그중 맨 처음 커서의 select 문에 in 이 있어요.
그것은 프로시저 호출할때 파라미터 값이에요.
프로시저 호출은,
exec sp_aac_102delete_p2( '750,749',a  );

이런식으로 했어요...
위에 '750,749' 가 아래 첫번째 커서의 in 에 들어가고...
그 결과값 갯수만큼 커서2가 돌아가는 형식이어야 하는데요.
처음부터 막혀요...ㅠ.ㅠ

그리고 아래 방식처럼 이중커서 사용하는것도 맞는지.... ㅠ.ㅠ

도와주세요......

======================================================================
CREATE OR REPLACE procedure ACCT.sp_test
(  
    arg_expn_no   in    varchar2,
    ret_msg out    varchar2
 ) is

    ld_expn_no   aacm_expd.o_pay%type    :=  0; -- 지급번호

    cursor c_expd_list_proc is
    SELECT o_pay
    FROM    AACM_EXPD
    WHERE D_YY   = arg_base_year
   AND I_OFFI = arg_offi_cd
   and O_PAY  IN  (arg_expn_no);

    cursor c_expd_proc (ld_expn_no in number) is
    SELECT col1, col2
  FROM AACM_ORIEXPD D
WHERE D_YY   = arg_base_year
   AND I_OFFI = arg_offi_cd
   and O_PAY  = ld_expn_no;

begin

for f_expd_list_proc in c_expd_list_proc LOOP    -- 첫번째커서 루프
    ld_expn_no := f_expd_list_proc.o_pay;  
    for f_expd_proc in c_expd_proc(f_expd_list_proc.o_pay) loop   --두번째커서 첫번째커서 변수로 루프

기타작업1

    end loop;

    기타작업2

    if ret_msg <> 'SUCCESS' then
    ROLLBACK WORK;
    return;
    else
    ret_msg := 'SUCCESS';
    COMMIT;
    end if;

END LOOP;


EXCEPTION
    WHEN OTHERS THEN
    ROLLBACK WORK;
    ret_msg := '오류 최종  (Massage : '||replace(replace(replace(sqlerrm,'"',''), chr(10),''), chr(13),'')||')';
    return;
end sp_test;
/

by 知音 [2010.08.11 16:01:28]
dynamic 으로 쿼리를 바꾸셔야 할 듯...

'750,749' 는 750, 749로 변도로 인식하는게 아니라 750,749 라는 문자로 인식됩니다.

by 마농 [2010.08.11 16:09:40]
--and O_PAY IN (arg_expn_no)
AND ','||arg_expn_no||',' LIKE '%,'||o_pay||',%'
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입