一个匿名的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;
/