如何从 PLSQL 中的函数返回一组 NUMBERS,然后在 FOR LOOP 中使用它?
Posted
技术标签:
【中文标题】如何从 PLSQL 中的函数返回一组 NUMBERS,然后在 FOR LOOP 中使用它?【英文标题】:How to return a set of NUMBERS from a Function in PLSQL and then use it in a FOR LOOP? 【发布时间】:2011-05-12 16:21:09 【问题描述】:我想在 PLSQL 中有一个函数,它会返回一组数字,然后有一个 for 循环来遍历该数据集并对其进行处理。
有什么建议吗?该函数是否需要成为管道函数才能在 for 循环中使用?即使我只是返回数字,我是否需要创建一个新类型?
谢谢!
CREATE OR REPLACE PACKAGE BODY someBody AS
FUNCTION getListOfNumbers RETURN someList IS -- what type do I return ??
BEGIN
RETURN SELECT SID FROM V$SESSION; -- Not sure what do here ??
END;
PROCEDURE soSomeStuff IS
BEGIN
FOR rec IN(getListOfNumbers) -- how do I select from the function?
LOOP
dbms_output.put_line(rec);
END LOOP;
END;
END;
【问题讨论】:
【参考方案1】:您需要声明一个collection 类型:
SQL> CREATE OR REPLACE PACKAGE my_package AS
2
3 TYPE someList IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
4
5 FUNCTION getListOfNumbers RETURN someList;
6 PROCEDURE soSomeStuff;
7
8 END my_package;
9 /
Package created
然后您可以像这样使用定义的类型:
SQL> CREATE OR REPLACE PACKAGE BODY my_package AS
2
3 FUNCTION getListOfNumbers RETURN someList IS
4 l_list someList;
5 BEGIN
6 SELECT SID BULK COLLECT INTO l_list FROM V$SESSION;
7 RETURN l_list;
8 END;
9
10 PROCEDURE soSomeStuff IS
11 l_list someList;
12 BEGIN
13 l_list := getListOfNumbers;
14 FOR i IN 1..l_list.count LOOP
15 dbms_output.put_line(l_list(i));
16 END LOOP;
17 END;
18
19 END my_package;
20 /
Package body created
SQL> exec my_package.soSomeStuff;
284
285
287
288
[...]
PL/SQL procedure successfully completed
【讨论】:
很好,我没想到...我最终使用了流水线函数(优点是我可以将它直接放入 forloop 即。for rec in (select * from table( getListOfNUMbers))以上是关于如何从 PLSQL 中的函数返回一组 NUMBERS,然后在 FOR LOOP 中使用它?的主要内容,如果未能解决你的问题,请参考以下文章
在一行上返回函数中的多个主键列。 PLSQL、SQL ORACLE 开发
如何从从 plsql 函数 ORACLE 返回的游标中进行选择