Execute Execute를 사용하여 레코드를 얻는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/891919

  •  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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top