Execute Execute를 사용하여 레코드를 얻는 방법은 무엇입니까?
-
23-08-2019 - |
문제
나는 다음과 같은 서명이있는 다양한 기능이 있습니다.
FUNCTION func1 (par1 IN VARCHAR2, par2 IN NUMBER) RETURN my_rec;
그리고이 다양한 기능에서 데이터를 검색 할 수있는 기능이 있습니다.
FUNCTION get_result (func_name IN VARCHAR2, par1 IN VARCHAR2, par2 IN NUMBER) RETURN my_rec;
IS
rec1 my_rec;
BEGIN
EXECUTE IMMEDIATE 'SELECT ' || func_name || '(:par1, :par2) FROM DUAL'
INTO rec1
USING IN par1, IN par2;
RETURN rec1;
END;
그러나이 코드는 ORA-01007 'SELECT LIST에 있지 않은 변수'에서 실패합니다.
진술을 어떻게 다시 작성할 수 있습니까?
해결책
그것은 모두 나에게 잘 작동합니다 (Oracle 10G). 하나는 기능 정의에서 구문 오류를 수정합니다 (첫 번째 줄의 원치 않는 반 콜론) :
SQL> create type my_rec is object (id integer, name varchar2(30))
2 /
Type created.
SQL> create FUNCTION func1 (par1 IN VARCHAR2, par2 IN NUMBER) RETURN my_rec
2 is
3 l_rec my_rec := my_rec (1, 'x');
4 begin
5 return l_rec;
6 end;
7 /
Function created.
SQL> CREATE OR REPLACE
2 FUNCTION get_result (func_name IN VARCHAR2, par1 IN VARCHAR2, par2 IN NUMBER) RETURN my_rec
3 IS
4 rec1 my_rec;
5 BEGIN
6 EXECUTE IMMEDIATE 'SELECT ' || func_name || '(:par1, :par2) FROM DUAL'
7 INTO rec1
8 USING IN par1, IN par2;
9 RETURN rec1;
10 END;
11 /
Function created.
SQL> select get_result ('func1',1,2) from dual;
GET_RESULT('FUNC1',1,2)(ID, NAME)
-------------------------------------------------
MY_REC(1, 'x')
다른 팁
당신이했던 것처럼 쿼리에 연결할 수 있다고 생각합니다. func_name.
제휴하지 않습니다 StackOverflow