동적으로 프로시져 생성 후 프로시져 결과값 받는방법문의드립니다. 0 6 715

by lgxj20 [2018.08.30 11:53:03]


v_afterProcSql := 'BEGIN ' || v_afterProcNm || '(''' || P_COMP_CD || ''', ''' || P_DOC_NO || ''', ''' || P_DOC_STAT || ''', ''' || P_MANAGERID || ''' ,v_err_code1, v_err_msg1);' || ' END;';

이런식으로 동적으로 프로시져 실행문 만들고

EXECUTE IMMEDIATE v_afterProcSql;

 

실행시키는데 

v_err_code1,v_err_msg1 두개가 각프로시져 리턴값담는 건데 

ORA-06550: 줄 1, 열77:PLS-00201: 'V_ERR_CODE' 식별자가 정의되어야 합니다

이런식으로 메세지가 나옵니다.

결과값을 받으려면 어떻게 해야될까요? 저리턴변수도 동적으로 만들어야될까요?

by 야신 [2018.08.30 13:56:51]
v_afterProcSql := 'Declare v_err_code1 varchar2(200); v_err_msg1 varchar2(200);BEGIN ' || v_afterProcNm || '(''' || P_COMP_CD || ''', ''' || P_DOC_NO || ''', ''' || P_DOC_STAT || ''', ''' || P_MANAGERID || ''' ,v_err_code1, v_err_msg1); dbms_output.put_line(v_err_msg1);' || ' END;';

 


by lgxj20 [2018.08.30 16:01:29]

그럼 제가 원하는건

A라는 프로시져안에사 B를 동적으로 호출한다음 B의 결과값을 A라는 프로시져에서 받아볼수있나요?

EX

CREATE OR REPLACE PROCEDURE A
(
)
IS

v_err_code VARCHAR2(100);
....
BEGIN

V_afterProcSql := 'Declare v_err_code1 varchar2(200); v_err_msg1 varchar2(200);BEGIN ' || v_afterProcNm || '(''' || P_COMP_CD || ''', ''' || P_DOC_NO || ''', ''' || P_DOC_STAT || ''', ''' || P_MANAGERID || ''' ,v_err_code1, v_err_msg1); dbms_output.put_line(v_err_msg1);' || ' END;';


EXECUTE IMMEDIATE v_afterProcSql;

    dbms_output.put_line(v_err_code1);
    
    --신핼한 프로고시져 결과값  
    v_err_code := v_err_code1;
    
    dbms_output.put_line(v_err_code);
END;


by 마농 [2018.08.30 16:47:12]

불가능 할 것 같은데요?
동적쿼리를 사용하는 이유가 있나요?


by lgxj20 [2018.08.30 16:59:40]

업무에따라 호출하는 프로시져가 다른경우라서 가능하다면 그렇게 하려고했는데요

불가능하다면 그냥 if 사용해서 분기를 나눠서 실행 하도록 해야 겠네요...감사합니다.


by 야신 [2018.08.30 16:59:23]

동적sql 중 select, insert, update, delete 는 returning into 로 가능한데 프로시저는 안되는것 같네요.

다른방법으로는 프로시저에서 결과를 db 에 insert 하고 메인에서 해당 데이타를 select 해서 알아볼수는 있을거 같네요


by lgxj20 [2018.08.30 17:28:18]

아 그렇게 하면 되긴하겠네여...

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