加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 08:26:37 所属栏目:MsSql教程 来源:网络整理
导读:我想从declare / begin / end块中的select语句返回行.我可以在T-SQL中执行此操作,但我想知道如何在PL / SQL中执行此操作. 代码看起来有点像下面这样: declare blah number := 42;begin select * from x where x.value = blah;end; 解决方法 一个匿名的PL / S
我想从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;
/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读