PostgreSQL存储过程-return语句

Posted lottu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL存储过程-return语句相关的知识,希望对你有一定的参考价值。

1. return语句

有三个命令可以用来从函数中返回数据:

  • RETURN
  • RETURN NEXT
  • RETURN QUERY

 2. RETURN命令

 语法:

RETURN
RETURN expression;

如果没有使用表达式 RETURN命令用于告诉这个函数已经完成执行了。
如果返回标量类型,那么可以使用任何表达式.要返回一个复合(行)数值,你必须写一个记录或者行变量的expression。

2.1 案例1:带有表达式return案例

CREATE OR REPLACE FUNCTION getCompFoo1
(in_col1 int, in_col2 TEXT)
RETURNS compfoo
AS $$
DECLARE 
    lottu compfoo;
BEGIN
    lottu.col1 := in_col1 + 1;
    lottu.col2 := in_col2 || _result;
    RETURN lottu;
END;
$$ LANGUAGE PLPGSQL;

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

3. RETURN NEXT命令

语法:

RETURN NEXT expression;

3.1 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;

4. RETURN QUERY命令

语法:

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

4.1 RETURN QUERY命令

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

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;

4.2 RETURN QUERY EXECUTE命令

是执行动态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;

 




以上是关于PostgreSQL存储过程-return语句的主要内容,如果未能解决你的问题,请参考以下文章

Postgresql存储过程select into temp table。

Sql优化 PostgreSQL存储过程

PostgreSQL-存储过程

Hibernate 调用存储过程 该语句没有返回结果集

POSTGRESQL 存储过程实战

mssql 存储过程中循环如何写,在循环中用啥语句跳出循环呢,在线等