변수 테이블 이름을 사용하여 select 문을 저장하는 PL/SQL 함수를 작성하려고합니다. (실제로 이상한 결정입니다. . 다음 코드는 작동하지 않습니다 ...하지만 변수 테이블 이름 (쿼리 작성) 및 데이터 집합 반환 방법을 모두 잘 모르겠습니다. 누구든지이 경험이 있습니까? TIA.PL/SQL 및 변수 테이블 이름을 사용하여 데이터 집합 반환
CREATE OR REPLACE
FUNCTION fn_netstat_all (
casename IN VARCHAR2
)
RETURN resultset_subtype
IS
dataset resultset_subtype;
BEGIN
OPEN dataset
FOR 'SELECT * FROM ' || casename || '_netstat';
RETURN dataset;
END fn_netstat_all;
FWIW, 당신은 도움이되는 casename 변수를 포장하기 위해 DBMS_ASSERT 패키지에보고 할 수 있습니다 : 당신의 resultset_subtype가 ref_cursor가 (또는 단지 ref_cursor와 resultset_subtype 교체) 당신이 할 수있는 경우
CREATE OR REPLACE FUNCTION fn_netstat_all (casename in varchar2)
RETURN resultset_subtype
IS
dataset resultset_subtype;
v_sql varchar2(25000);
v_tablename varchar2(50);
begin
v_sql := 'SELECT * FROM ' || casename || '_netstat;';
OPEN dataset FOR
execute immediate v_sql;
return dataset;
end;
모든 테이블 구조가 동일합니까? 그렇지 않은 경우 [기본 동적 SQL] (http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17126/dynamic.htm#i13130)을 사용할 수 없습니다 (사용중인 것). PL/SQL 패키지 [DBMS_SQL] (http://download.oracle.com/docs/cd/E11882_01/appdev.112/e16760/d_sql.htm)에 의존해야합니다. – user272735