by 배기염 [어플리케이션관련] function parameter pda [2015.05.19 14:16:19]
M3 SMART를 위한 PDA 프로그램을 개발중인데
윈도우에 데몬을 하나 두고
데몬으로 쿼리를 넘겨서 데몬에서 실행해서 데이터를 받아오도록 하고 있습니다.
기본적인 select, update, insert는 문제가 안되고 리턴값만 받는 펑션 실행도 문제 없는데
function 실행할때 리턴값 외에 out parameter값을 받으려고 합니다.
select function(in_param, out_param) from dual;
이런식으로 파라메터 넘겨서 out_param으로 값을 받고 싶은데 어떻게 해야 될까요?
아무래도 제가 설명을 제대로 못하는 부분이 더 큰것 같네요..
예를 들어, (10,'select sysdate from dual') 이런식으로 데몬에 넘겨주면
10이 executecommand라고 생각하고 'select sysdate from dual' 문장을 실행하면
나오는 데이터 셋을 PDA로 던져 주거나 합니다.
public const string SQL_EXECUTE_COMMAND_BYPASS = "10"; public const string SQL_EXECUTE_SCALAR_BYPASS = "20"; public const string SQL_EXECUTE_NONQUERY_TX_BYPASS = "30"; public const string SQL_EXECUTE_NONQUERY_NTX_BYPASS = "31"; public const string PROCEDURE_EXECUTE_NONQUERY_TX_BYPASS = "35"; public const string PROCEDURE_EXECUTE_NONQUERY_NTX_BYPASS = "36";
코드 정의가 이정도 되있습니다. 그래서 코드를 선택해서 형식이 맞는 쪽에 쿼리를 보내면
executenonquery 한다던지 executescalar한다던지 해서 결과값을 넘겨 주는거죠..
근데 여기서 문제점은 out parameter가 없는 function은
'select function(파라메터1, 파라메터2) from dual'
이렇게만 넘겨주면 function안의 return value만 넘겨받아서 쓰면 되는데
전 return value에 더해서 out parameter값을 받아서 쓰고 싶은거죠..
음.. 일단 다른방법으로 우회해서 사용하기로 했구요. 개발 기간이 짧아서 걍 패스하기로 했어요..ㅋ
return이 있는건 상관없이, 파라메터가 output이 있는건 select functest1(param1, param2) from dual로 돌리면 인수의 갯수가 안 맞아서 오류가 나는거에요.
declare 변수 선언
begin
변수 := 데이터;
functest(변수1, 변수2, 변수3, out변수);
select out변수 into :aa from dual;
end;
이런식으로 aa값으로 out변수값을 받는 것 까진 했는데
시간이 더 걸릴것 같아서 패스하고 리턴값을 문자열로 받아서 잘라서 쓰기로 했어요..ㅋㅋ
프로젝트 끝나고 따로 연구해 봐야겠네요. 데몬을 수정해야 할듯..
- 간단하게 짜봤습니다. CREATE OR REPLACE FUNCTION inout_fn (outparm IN OUT VARCHAR2) RETURN VARCHAR2 IS BEGIN outparm := 'Coming out'; RETURN 'return param'; END inout_fn; declare l_outvar varchar2(100); l_funcret varchar2(100); Begin l_funcret := inout_fn(l_outvar); DBMS_OUTPUT.Put_line('return value is ' ||l_funcret||', out paramater is '||l_outvar); END;