sql – 如何从Oracle中的declare / begin / end块返回行?

前端之家收集整理的这篇文章主要介绍了sql – 如何从Oracle中的declare / begin / end块返回行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想从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;
/

猜你在找的MsSQL相关文章