我陷入这个错误,真的不知道如何解决。也许我以不正确的方式传递数组?

这是主要的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 -subroutine期望类型为IOPACKAGE.NUMBER_ARRAY_TYPE。您不必重新定义类型。以下应该工作:

declare
  v_array IOPACKAGE.NUMBER_ARRAY_TYPE;
begin
  IOPACKAGE.OUTPUT_ARRAY(v_array);
end;

查看IOPACKAGE.NUMBER_ARRAY_TYPENUMBER_ARRAY_TYPE之间的区别。它们相似但不相同。

关于oracle - PLS-00306 : wrong number or types of arguments in call to 'OUTPUT_ARRAY' ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22759571/

10-13 07:14