Plsql返回关联数组函数

时间:2015-11-21 17:26:02

标签: arrays plsql

我有一个关于在plsql函数上返回数组的问题。 我已经找到了很多关于使用数组的信息

但是我在一个应该返回数组的函数上苦苦挣扎。

来源示例: http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites.htm#LNPLS99931

据我通过Google搜索了解到,返回数组的方法是首先创建一个表数组,然后在函数中使用此类型。

我实际想要完成的是返回在函数内创建的数组。

不确定我是否清楚但在这里我有代码:

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

1 个答案:

答案 0 :(得分:2)

您需要先创建类型,然后在函数声明中使用if。创建一个包并在那里声明类型。

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;
/