【问题标题】:Defining Collections with variables使用变量定义集合
【发布时间】:2009-04-16 08:31:49
【问题描述】:

如何在 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;

但这当然行不通。

有什么想法吗?

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    您需要像这样使用动态 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.
    

    【讨论】:

      【解决方案2】:

      非常感谢您的回复。

      我不得不稍微修改一下,但效果很好:

      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;
      /
      

      【讨论】:

        猜你喜欢
        • 2013-07-10
        • 2019-01-27
        • 2020-02-07
        • 1970-01-01
        • 1970-01-01
        • 2012-06-27
        • 1970-01-01
        • 2014-01-20
        • 1970-01-01
        相关资源
        最近更新 更多