1
我被这个错误困住了,真的不知道如何解决它。也许我以不正确的方式传递数组?PLS-00306:调用'OUTPUT_ARRAY'时参数的数量或类型错误
这是主要的sql文件。
DECLARE
v_array_length NUMBER := &v_array_length;
BEGIN
DECLARE
TYPE number_array_type IS TABLE OF NUMBER(6, 2) INDEX BY BINARY_INTEGER;
v_array NUMBER_ARRAY_TYPE;
BEGIN
--Isvediams
IOPACKAGE.OUTPUT_MESSAGE('Original array:');
--Sugeneruoja atsitiktinius array elementus is intervalo [1, 1000]
FOR i IN 1..v_array_length LOOP
v_array(i) := SYS.DBMS_RANDOM.VALUE(1, 1000);
END LOOP;
IOPACKAGE.OUTPUT_ARRAY(v_array);
END;
END;
这是IOpackage SQL文件
CREATE OR REPLACE PACKAGE IOpackage IS
l_message VARCHAR2(100);
PROCEDURE output_message(l_message IN VARCHAR2);
TYPE number_array_type IS TABLE OF NUMBER(6, 2) INDEX BY BINARY_INTEGER;
PROCEDURE output_array(v_array NUMBER_ARRAY_TYPE);
END IOpackage;
,这是IOpackage_body文件。
CREATE OR REPLACE PACKAGE BODY IOpackage IS
PROCEDURE output_message(l_message IN VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE(l_message);
END output_message;
PROCEDURE output_array(v_array IN NUMBER_ARRAY_TYPE) IS
BEGIN
FOR i IN 1..v_array.COUNT LOOP
DBMS_OUTPUT.PUT(v_array(i) || ' ');
END LOOP;
DBMS_OUTPUT.PUT_LINE('');
END output_array;
END IOpackage;
谢谢,这解决了我的问题。 – Vytaus
我知道这是一个相当古老的答案,但您是否有机会知道如何在不指定精确的“表格”类型的情况下进行相同的调用?有没有可以采用哪种策略来实现动态绑定?我也在考虑语法的早期绑定类型表达式(类似'%ROWTYPE') –
@EduardDumitru从ADA继承的PL/SQL的设计原理是(几乎)所有东西都是显式的,所以默认答案是可以的不要用“纯粹的”PL/SQL来实现(假设我猜对了你的“问题”)。 (我不会在没有细节的情况下进入动态PL/SQL的兔子洞。)但是,也许你可以应用[游标变量](http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/ static.htm#LNPLS00605)或[对象类型](http://docs.oracle.com/cd/E11882_01/appdev.112/e11822/adobjplsql.htm#ADOBJ070)到您的问题?如果你认为你有一个真正的问题,那么请问! – user272735