Plsql 将两个varray传递给一个过程,以将它们传递给表的索引
我试图将两个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
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语句就做到了。。。对不起。。。非常感谢你!啊,我没有开始和结束陈述就这么做了。。。对不起。。。非常感谢你!