我被这个错误困住了,真的不知道如何修复它。也许我以不正确的方式传递数组?
这是主要的 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;
类型定义在主sql文件不是包子例程所期望的类型。IOPACKAGE.OUTPUT_ARRAY
- 子程序需要类型IOPACKAGE.NUMBER_ARRAY_TYPE
。您不必重新定义类型。以下应该有效:
declare
v_array IOPACKAGE.NUMBER_ARRAY_TYPE;
begin
IOPACKAGE.OUTPUT_ARRAY(v_array);
end;
查看之间的区别IOPACKAGE.NUMBER_ARRAY_TYPE
and NUMBER_ARRAY_TYPE
。它们相似但不相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)