我有一个关于在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上发布的问题。但对不起,如果我的搜索不是那么好。
此外,如果您不喜欢我的发布,请添加一个编辑,以便我向您学习。
答案 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;
/