Plsql 将两个varray传递给一个过程,以将它们传递给表的索引

Plsql 将两个varray传递给一个过程,以将它们传递给表的索引,plsql,package,procedure,Plsql,Package,Procedure,我试图将两个varray传递到一个过程中,但当调用它进行测试时,我的数据库没有得到任何响应 CREATE OR REPLACE PACKAGE PKG_TEST AS TYPE PNO IS VARRAY(20) OF VARCHAR(20); TYPE QTY IS VARRAY(20) OF INTEGER; TYPE indexTest IS TABLE OF NUMBER INDEX BY VARCHAR2(20); PROCEDURE blatest(i_PNO IN

我试图将两个varray传递到一个过程中,但当调用它进行测试时,我的数据库没有得到任何响应

CREATE OR REPLACE PACKAGE PKG_TEST AS
  TYPE PNO IS VARRAY(20) OF VARCHAR(20);
  TYPE QTY IS VARRAY(20) OF INTEGER;
  TYPE indexTest IS TABLE OF NUMBER INDEX BY VARCHAR2(20);
  PROCEDURE blatest(i_PNO IN PNO, i_QTY IN QTY);
END PKG_TEST;
/

CREATE OR REPLACE PACKAGE BODY PKG_TEST AS
  PROCEDURE blatest(i_PNO IN PNO , i_QTY IN QTY)
    IS
      V_COUNT_PNO INTEGER;
      V_COUNT_QTY INTEGER;
      bla_list indexTest;
      name VARCHAR(20);
    BEGIN
      V_COUNT_PNO := i_PNO.COUNT;
      V_COUNT_QTY := i_QTY.COUNT;
    IF V_COUNT_PNO = V_COUNT_QTY THEN
      FOR I IN 1..V_COUNT_PNO LOOP
        bla_list(i_PNO(I)) := i_QTY(I);
      END LOOP;
      name := bla_list.FIRST;
      WHILE name IS NOT null LOOP
        dbms_output.put_line('Name: ' || name || ' is ' || TO_CHAR(bla_list(name)));
        name := bla_list.NEXT(name);
      END LOOP;
    ELSE
      dbms_output.put_line('Amount of Variables is not identical!');
    END IF;
  END blatest;
END PKG_TEST;
/

PKG_TEST.blatest(PKG_TEST.PNO('P123','P124'), PKG_TEST.QTY(2,3));
/

如果有任何更简单的方法可以通过表I动态填写索引,我非常乐意阅读此^^。提前谢谢

按如下方式调用,您将得到响应:

set serveroutput on;

BEGIN
   pkg_test.blatest (pkg_test.pno ('P123', 'P124'), pkg_test.qty (2, 3));
END;

按如下方式调用,您将得到响应:

set serveroutput on;

BEGIN
   pkg_test.blatest (pkg_test.pno ('P123', 'P124'), pkg_test.qty (2, 3));
END;

PKG_TEST.PNO('P123','P124')-->这个集合声明你需要动态地拥有它?PKG_TEST.PNO('P123','P124')-->这个集合声明你需要动态地拥有它?啊,我没有使用begin和end语句就做到了。。。对不起。。。非常感谢你!啊,我没有开始和结束陈述就这么做了。。。对不起。。。非常感谢你!