2014-03-31 49 views
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; 

回答

2

主SQL文件类型定义不是由程序包子程序期望的类型。子程序需要IOPACKAGE.NUMBER_ARRAY_TYPE。您不必重新定义类型。下面应该工作:

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

IOPACKAGE.NUMBER_ARRAY_TYPENUMBER_ARRAY_TYPE之间的差异。他们是相似的,但不一样。

+0

谢谢,这解决了我的问题。 – Vytaus

+0

我知道这是一个相当古老的答案,但您是否有机会知道如何在不指定精确的“表格”类型的情况下进行相同的调用?有没有可以采用哪种策略来实现动态绑定?我也在考虑语法的早期绑定类型表达式(类似'%ROWTYPE') –

+0

@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

相关问题