Oracle 用变量定义集合
如何使用变量在PL/SQL中定义集合 例如 我想要的是使用变量,而不是所有者/表的名称。 诸如此类:Oracle 用变量定义集合,oracle,plsql,Oracle,Plsql,如何使用变量在PL/SQL中定义集合 例如 我想要的是使用变量,而不是所有者/表的名称。 诸如此类: TYPE t_tab IS TABLE OF v_owner.v_tablename%ROWTYPE; 但这当然行不通 有什么想法吗?您需要使用动态PL/SQL,如下所示: SQL> DECLARE 2 v_owner varchar(128) := 'MYSCHEMA'; 3 v_tablename varchar(128) := 'EMP'; 4
TYPE t_tab IS TABLE OF v_owner.v_tablename%ROWTYPE;
但这当然行不通
有什么想法吗?您需要使用动态PL/SQL,如下所示:
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.
非常感谢您的回复 我不得不对整件事稍加修改,但效果不错:
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;
/
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;
/