2014-03-31 53 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

相關問題