金仓数据库KingbaseES之存储过程的RETURN语句

  •  概述

RETURN语句一共有三个命令可以用来从函数中返回数据:

  1. RETURN
  2. RETURN NEXT
  3. RETURN QUERY
  • RETURN命令

语法:

RETURN

RETURN expression;

如果没有使用表达式 RETURN命令用于告诉这个函数已经完成执行了。

如果返回标量类型,那么可以使用任何表达式.要返回一个复合(行)数值,你必须写一个记录或者行变量的expression。

示例1: 带有表达式return

CREATE OR REPLACE FUNCTION getCompFoo1

(in_col1 int, in_col2 TEXT)

RETURNS compfoo

AS $$

DECLARE

    comp compfoo;

BEGIN

    comp.col1 := in_col1 + 1;

    comp.col2 := in_col2 || '_result';

    RETURN comp;

END;

$$ LANGUAGE PLPGSQL;

//compfoo 为自定义类型:

CREATE TYPE compfoo AS (f1 int, f2 text);

如果声明函数带输出参数,那么就只需要写无表达式的RETURN。那么输出参数变量的当前值将被返回。

CREATE OR REPLACE FUNCTION getCompFoo2

(in_col1 IN int,in_col2 IN TEXT,

 out_col1 OUT int, out_col2 OUT TEXT)

AS $$

BEGIN

    out_col1 := in_col1 + 1;

    out_col2 := in_col2 || '_result';

END;

$$ LANGUAGE PLPGSQL;

示例2:不带有表达式return

如果声明函数返回void,那么一个RETURN语句可以用于提前退出函数; 但是不要在RETURN后面写一个表达式。

CREATE OR REPLACE FUNCTION getreturn(in_col1 int)

RETURNS void

AS $$

BEGIN

    if in_col1 > 0 then

      RAISE NOTICE 'there is %',in_col1;

    else

      return;

    end if;

END;

$$ LANGUAGE PLPGSQL;
  • RETURN NEXT 命令

语法:

RETURN NEXT expression;

可以用于标量和复合数据类型;对于复合类型,将返回一个完整的结果"table"。

示例:

CREATE TABLE foo (fooid INT, foosubid INT, fooname TEXT);

INSERT INTO foo VALUES (1, 2, 'three');

INSERT INTO foo VALUES (4, 5, 'six');



CREATE OR REPLACE FUNCTION getAllFoo() RETURNS SETOF foo AS

$$

DECLARE

    r foo%rowtype;

BEGIN

    FOR r IN SELECT * FROM foo WHERE fooid > 0

    LOOP

        -- can do some processing here

        RETURN NEXT r; -- return current row of SELECT

    END LOOP;

    RETURN;

END

$$ LANGUAGE PLPGSQL;
  • RETURN QUERY 命令

语法:

RETURN QUERY query;

RETURN QUERY EXECUTE command-string [ USING expression [, ... ] ];

示例1:将一条查询的结果追加到一个函数的结果集中。

CREATE OR REPLACE FUNCTION getAllFoo2() RETURNS SETOF foo AS

$$

DECLARE

    r foo%rowtype;

BEGIN

    RETURN QUERY SELECT * FROM foo WHERE fooid > 0;

END

$$ LANGUAGE PLPGSQL;

示例2:执行动态SQL。

CREATE OR REPLACE FUNCTION getAllFoo3(filter numeric) RETURNS SETOF foo AS

$$

BEGIN

    RETURN QUERY EXECUTE 'SELECT * FROM foo WHERE fooid > $1'

    USING filter;

END

$$ LANGUAGE PLPGSQL;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值