2015-11-21 103 views
0

我有一個關於在plsql函數上返回數組的問題。 我已經發現了很多關於使用數組的信息Plsql返回關聯數組函數

但是我在一個應該返回數組的函數上掙扎。

來源的例子: http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites.htm#LNPLS99931

據我所知,從谷歌搜索周圍,一種方法來返回一個數組首先被創建表陣列分開,然後使用這種類型的功能的內部。

我實際上想完成的是返回一個在函數內部創建的數組。

不知道如果我很清楚但在這裏我有我的代碼:

CREATE OR REPLACE FUNCTION createChecksumArray(checksumNumber VARCHAR2) 
RETURN textGroupArray 
AS 
    ..  
    TYPE textGroupArray IS TABLE OF VARCHAR2(30) 
    INDEX BY    BINARY_INTEGER; 
    textGroups   textGroupArray; 
    .. 
BEGIN 
    .. 
    textGroups := textGroupArray(); 
    .. 
    (A LOOP) 
    -- add textgroup into the array 
    IF textGroup != 0 THEN 
     arrayCount    := arrayCount + 1; 
     textGroups(arrayCount) := TRIM(textGroup); 
    END IF; 
    (END THE LOOP) 
    .. 
    RETURN textGroups; 

我首先做的代碼的功能外,測試如果陣列工作。通過輸出陣列測試的結果:

spaced text: 3536 2029 2712 3456 789 

我無法設法返回在函數tho中聲明的數組。不知道這是否可能,所以問題是:這是可能的,如果是這樣,如何?我在這裏做錯了嗎?

我找不到在包含此特定主題的Stackoverflow上發佈的問題。但抱歉,如果我的搜索不好。

另外,如果您不喜歡我的發帖,請添加一個修改,以便我可以向您學習。

Full code/function

回答

2

您需要先創建類型,然後在函數聲明中使用,如果。創建一個包並在那裏聲明類型。

create or replace package my_pkg as 

    type textGroupArray IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER; 

    FUNCTION createChecksumArray(checksumNumber VARCHAR2) RETURN textGroupArray; 

end my_pkg; 
/

create or replace package body my_pkg as 
    FUNCTION createChecksumArray(checksumNumber VARCHAR2) 
    RETURN textGroupArray 
    is 
     ..  
     TYPE textGroupArray IS TABLE OF VARCHAR2(30) 
     INDEX BY    BINARY_INTEGER; 
     textGroups   textGroupArray; 
     .. 
    BEGIN 
     .. 
     textGroups := textGroupArray(); 
     .. 
     (A LOOP) 
     -- add textgroup into the array 
     IF textGroup != 0 THEN 
      arrayCount    := arrayCount + 1; 
      textGroups(arrayCount) := TRIM(textGroup); 
     END IF; 
     (END THE LOOP) 
     .. 
     RETURN textGroups; 
    end; 

end my_pkg; 
/
+0

你好德米特里!感謝您的迴應。試圖使用你的代碼,但我絕對做錯了什麼.. http://pastebin.ca/3265839 –

+0

@JimVercoelen對不起,我有一個錯誤(現在糾正)。正確的是'create package ... as'和'function .... is'。 – Dmitry

+0

@JimVercoelen您的代碼有兩個錯誤:1)函數內部的一個變量與函數參數具有相同的名稱,2)您不需要行'textGroups:= textGroupArray();' – Dmitry