像您显示的那样,匿名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
如果将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;
/