我想从declare / begin / end块中的select语句返回行.我可以在T-sql中执行此操作,但我想知道如何在PL / sql中执行此操作.
代码看起来有点像下面这样:
declare blah number := 42; begin select * from x where x.value = blah; end;
解决方法
一个匿名的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; /