【问题标题】:How to pass NUMBER_LIST_TYPE IN parameter to ORACLE stored procedure如何将 NUMBER_LIST_TYPE IN 参数传递给 ORACLE 存储过程
【发布时间】:2019-06-03 21:14:00
【问题描述】:

我有一个这样的存储过程:

Create or replace procedure readEmpDetails (empRowList NUMBER_LIST_TYPE, 
                                            created_by VARCHAR2, 
                                            accessid NUMBER )
is

如何为 NUMBER_LIST_TYPE 传递参数:

begin  readEmpDetails([124, 155, 147], '100', 2);  end;

我想在 Oracle SQL Developer 中传递上述参数。

【问题讨论】:

    标签: oracle plsql oracle11g


    【解决方案1】:

    执行以下步骤:

    create or replace type T_array_readEmpDetails AS VARRAY(10) of number(4)
    /
    
    Create or replace procedure readEmpDetails (t_ar T_array_readEmpDetails, 
                                                created_by VARCHAR2, 
                                                accessid NUMBER )
    is
    begin
          FOR i IN 1..t_ar.count LOOP
            dbms_output.put_line(t_ar(i));
         END LOOP;
    end;
    /
     DECLARE
          v T_array_readEmpDetails;
        BEGIN
          v := T_array_readEmpDetails();
          v.EXTEND(3);
          v(1) := 124;
          v(2) := 155;
          v(3) := 147;
          readEmpDetails(v,'A',1);
        END;
    /
    

    【讨论】:

    • 为什么是EXTEND(4) 而不是EXTEND(3)?您将传递值为NULL 的第四个元素。
    • @MT0 上面是一个简单的例子。
    【解决方案2】:

    如果 NUMBER_LIST_TYPE 是有效的 oracle 类型,则将其传递为 NUMBER_LIST_TYPE(124, 155, 147)。 然后,您正在“即时”创建具有 3 个元素的类型的实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 2016-04-05
      相关资源
      最近更新 更多