我想从declare/begin/end块中的select语句返回行.我可以在T-SQL中执行此操作,但我想知道如何在PL/SQL中执行此操作.
代码看起来有点像下面这样:
declare
blah number := 42;
begin
select *
from x
where x.value = blah;
end;
Run Code Online (Sandbox Code Playgroud)
Dav*_*sta 11
一个匿名的PL/SQL块,就像你展示的一样,不能"返回"任何东西.但是,它可以通过绑定变量与调用者进行交互.
所以我在这种情况下使用的方法是声明一个游标引用,在PL/SQL块中打开它以获得所需的查询,然后让调用的应用程序从中获取行.在SQLPlus中,这看起来像:
variable rc refcursor
declare
blah number := 42;
begin
open :rc for
select *
from x
where x.value = blah;
end;
/
print x
Run Code Online (Sandbox Code Playgroud)
如果将PL/SQL重铸为存储函数,则它可以返回值.在这种情况下,您可能要做的是创建一个集合类型,将所有行提取到该类型的变量中,然后返回它:
CREATE TYPE number_table AS TABLE OF NUMBER;
CREATE FUNCTION get_blah_from_x (blah INTEGER)
RETURN number_table
IS
values number_table;
BEGIN
SELECT id
BULK COLLECT INTO values
FROM x
WHERE x.value = blah;
RETURN values;
END;
/
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
34784 次 |
最近记录: |