暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

数据猿 2023-03-31
879

 

1、RETURN

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

如果返回标量类型,那么可以使用任何表达式。 

示例1: 带有表达式return

CREATE OR REPLACE FUNCTION getCompFoo1(in_col1 int, in_col2 TEXT)

RETURNS compfoo

AS $$

DECLARE

    comp compfoo;

BEGIN

    comp.f1 := in_col1 + 1;

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

    RETURN comp;

END;

$$ LANGUAGE PLPGSQL;


compfoo 为自定义类型:CREATE TYPE compfoo AS (f1 int, f2 text); 

函数返回结果:

test=# select getCompFoo1(1,'a');                                                                            

 getcompfoo1 

--------------

 (2,a_result)

(1 row)


如果声明函数带输出参数,那么就只需要写无表达式的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;

函数返回结果:

test=# select getCompFoo2(1,'a');

 getcompfoo2 

--------------

 (2,a_result)

(1 row)

示例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;


函数返回结果:

test=# select getreturn(1);

NOTICE:  there is 1

 getreturn

-----------

(1 row)

test=# select getreturn(0);

 getreturn

-----------
 (1 row) 


2、RETURN NEXT 

可以用于标量和复合数据类型;对于复合类型,将返回一个完整的结果"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;


返回结果:

test=# select getAllFoo();

  getallfoo 

-------------

 (1,2,three)

 (4,5,six)
 (2 rows) 



3、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;

返回结果:

test=# select getAllFoo2();

 getallfoo2 

-------------

 (1,2,three)

 (4,5,six)

(2 rows)

示例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;

执行结果:

test=# select getAllFoo3(1);

 getallfoo3

------------

 (4,5,six)

(1 row)


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论