2009-04-16 2 views
0

PL/SQLで変数を使用してコレクションを定義するにはどうすればよいですか?変数を使用したコレクションの定義

例:私が欲しいもの

v_owner varchar(128) := 'SCHEMA_USER'; 
v_tablename varchar(128) := 'TABLENAME'; 

TYPE t_tab IS TABLE OF SCHEMA_USER.TABLENAME%ROWTYPE; 
v_tab t_tab; 

は、変数の代わりに、所有者/テーブルの名前を使用することです。そのような 何か:

TYPE t_tab IS TABLE OF v_owner.v_tablename%ROWTYPE; 

しかし、それは、もちろん動作しません。

あなたは、動的PL/SQLにこのようなものを使用する必要があり

答えて

2

SQL> DECLARE 
    2  v_owner varchar(128) := 'MYSCHEMA'; 
    3  v_tablename varchar(128) := 'EMP'; 
    4  v_str LONG; 
    5 BEGIN 
    6  v_str := 'DECLARE TYPE t_tab IS TABLE OF ' || v_owner || '.' || v_tablename || '%ROWTYPE;' 
    7    || ' v_tab t_tab;' 
    8    || ' BEGIN' 
    9    || ' SELECT * BULK COLLECT INTO v_tab' 
10    || '  FROM emp WHERE empno = :input1;' 
11    || ' dbms_output.put_line(v_tab(1).ename);' 
12    || 'END;'; 
13  EXECUTE IMMEDIATE v_str USING 7839; 
14 END; 
15/
KING 

PL/SQL procedure successfully completed. 
0

は、応答のためにありがとうございました。

私は全部を少し変更する必要がありましたが、それは働いた:

DECLARE 
v_owner varchar(128) := 'SCHEMA'; 
    v_tablename varchar(128) := 'TABLE'; 
    v_str LONG; 
    BEGIN 
v_str := 'DECLARE TYPE t_tab IS TABLE OF ' || v_owner || '.' || v_tablename || '%ROWTYPE;' 
       || ' v_tab t_tab;' 
       || ' BEGIN' 
       || ' SELECT * BULK COLLECT INTO v_tab' 
       || '  FROM ' || v_owner || '.' || v_tablename ||';' 
       || 'END;'; 
    EXECUTE IMMEDIATE v_str; 
    END; 
/
関連する問題