如何在函数中使用 Pl/SQL 集合
Posted
技术标签:
【中文标题】如何在函数中使用 Pl/SQL 集合【英文标题】:How to use Pl/SQL Collection within a Function 【发布时间】:2015-01-23 08:50:39 【问题描述】:对于作业,建议使用集合。简单地说,我需要将一个字符串分成几个子字符串,将这些字符串的顺序颠倒并将它们放在一起。
省略了实际代码,因为它在声明部分崩溃。 不断收到错误:stringlist1 不是过程或未定义 因此,出于某种原因,我尝试分配给 stringlist1 的类型没有这样做。 你们知道为什么会这样吗?如果这无法解决,除了为集合中的每一行创建一个变量之外,还有什么巧妙的解决方法?
我尝试过的事情:
* 事先在“创建类型”语句中创建我自己的类型 * 在函数之前的匿名块中创建类型 * 在函数的声明部分中创建一个 varchar 集合 * 下面使用的 dbms 包 * 重命名它 * 尝试启动类似 stringlist1 dbms_utility.name_array 的类型 := dbms_utility.name_array();Create or replace FUNCTION TEST (p_number varchar2)
RETURN varchar2
IS
stringlist1 dbms_utility.name_array;
stringlist2 dbms_utility.name_array;
BEGIN
stringlist1('test');
stringlist2('test');
dbms.output.put_line(stringlist1(1));
return stringlist1(1);
END;
【问题讨论】:
【参考方案1】:字符串可以像stringlist1(1) := 'test';
一样添加到数组中
所以你的代码会在更正后编译
CREATE OR REPLACE FUNCTION TEST (p_number VARCHAR2)
RETURN VARCHAR2
IS
stringlist1 DBMS_UTILITY.name_array;
stringlist2 DBMS_UTILITY.name_array;
BEGIN
stringlist1(1) := 'test';
stringlist2(1) := 'test';
dbms_output.put_line (stringlist1 (1));
RETURN stringlist1 (1);
END;
PS:包名不是dmbs.output
,正确的是dbms_output
。
【讨论】:
我已经预料到这是我的一些愚蠢的疏忽,非常感谢,它奏效了!以上是关于如何在函数中使用 Pl/SQL 集合的主要内容,如果未能解决你的问题,请参考以下文章