【问题标题】:How to use Pl/SQL Collection within a Function如何在函数中使用 Pl/SQL 集合
【发布时间】: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;

【问题讨论】:

    标签: oracle function collections plsql


    【解决方案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。

    【讨论】:

    • 我已经预料到这是我的一些愚蠢的疏忽,非常感谢,它奏效了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2020-08-20
    相关资源
    最近更新 更多