【问题标题】:PLS-00306: wrong number or types of arguments in call to 'OUTPUT_ARRAY'PLS-00306:调用“OUTPUT_ARRAY”时参数的数量或类型错误
【发布时间】:2014-03-31 10:45:27
【问题描述】:

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

这是主 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;

【问题讨论】:

    标签: oracle plsql syntax-error


    【解决方案1】:

    主 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 之间的区别。它们相似但不相同。

    【讨论】:

    • 我知道这是一个相当古老的答案,但您是否知道如何在不指定精确“表格”类型的情况下拨打相同的电话?是否可以采用一种允许动态绑定的策略?我也在考虑语法、早期绑定类型表达式(类似于%ROWTYPE
    • @EduardDumitru 从 ADA 继承的 PL/SQL 的设计理念是(几乎)一切都是明确的,所以默认答案是你不能在“纯”PL/SQL 中做到这一点(假设我猜对了你的“问题”)。 (我不会在没有细节的情况下进入动态 PL/SQL 的兔子洞。)但是也许您可以将cursor variablesobject types 应用于您的问题?如果你认为你有一个真正的问题,那么请提出来!
    猜你喜欢
    • 1970-01-01
    • 2018-03-22
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多