2013-05-13 41 views
0
CREATE OR REPLACE 
PACKAGE PKG 
AS 
TYPE RESULT_T 
IS 
    TABLE OF VARCHAR2(3000); 
FUNCTION GENERATEF 
    RETURN RESULT_T ; 
END PKG; 
/
CREATE OR REPLACE 
PACKAGE BODY PKG 
AS 
FUNCTION GENERATEF 
    RETURN RESULT_T 
IS 
    i_t RESULT_T := RESULT_T(); 
BEGIN 

    FOR TLC IN 1..3 
    LOOP 
    i_t.extend; 
    i_t(i_t.last) := tlc; 
    END LOOP; 
    RETURN i_t; 
END; 
END PKG; 
/

當我想執行「select * from table(pkg.GENERATEF);」,系統告訴我,有一個「無效數據類型」。我不確定是什麼導致了這個問題。爲什麼我的函數表不可接受?

回答

2

此類型RESULT_T未全局定義,所以這就是爲什麼Oracle(或任何DBMS)無法識別此類型,因此無法將輸出轉換爲表格形式。

您可以將包之外指定這個類型 -

Create or Replace TYPE RESULT_T IS 
    TABLE OF VARCHAR2(3000); 

,然後從包中取出定義這種類型 -

CREATE OR REPLACE PACKAGE Pkg AS 
    /*TYPE RESULT_T 
    IS 
    TABLE OF VARCHAR2(3000);*/ 
    FUNCTION Generatef RETURN Result_t; 
END Pkg; 
/
CREATE OR REPLACE PACKAGE BODY Pkg AS 
    FUNCTION Generatef RETURN Result_t IS 
    i_t Result_t := Result_t(); 
    BEGIN 

    FOR Tlc IN 1 .. 3 LOOP 
     i_t.EXTEND; 
     i_t(i_t.LAST) := Tlc; 
    END LOOP; 
    RETURN i_t; 
    END; 
END Pkg; 
/

,然後當你將查詢 -

select * from table(pkg.GENERATEF);您會根據需要得到結果。

+0

謝謝@Frank Schmitt .. – 2013-05-13 10:59:26

+0

不客氣:-) – 2013-05-13 11:00:47

相關問題