2016-08-24 38 views
0

我在Postgres的9.4的功能与此类似:定义以及Postgres存储过程:如何使用out参数返回多个记录?

CREATE OR REPLACE FUNCTION myF(
    INOUT _p1 character varying, 
    IN _p2 integer, 
    OUT _p3 boolean) 
RETURNS setof retVal AS 
$BODY$ 
    _p3 := '0'; 
    RETURN query SELECT 1 AS col1, 'test' as col2; 
END;$BODY$ 
LANGUAGE plpgsql VOLATILE NOT LEAKPROOF 
COST 100; 

有型retVal的:

create type retVal as (col1 int, col2 character varying); 

的函数体要复杂得多(我需要PLPGSQL为这个目的),我不得不从Java程序调用它通一

CallableStatement.executeQuery() 

我的问题是: 1)我应该把为RE TURNS值在函数中? 2)通过RETURN查询语法返回结果是否正确?

非常感谢!

回答

0

这是不可能的 - 功能可以返回标量或记录或一组标量或一组记录。而已。

您可以将一组记录转换为记录数组,然后当一个领域是一个记录的数组,你可以返回一个记录:

CREATE TYPE footype AS (a int, b int); 

CREATE OR REPLACE FUNCTION public.foo(OUT x integer, OUT y footype[]) 
RETURNS record 
LANGUAGE plpgsql 
AS $function$ 
BEGIN 
    x := 10; 
    SELECT ARRAY(SELECT (i, i+1)::footype FROM generate_series(1,10) g(i)) INTO y; 
    RETURN; 
END; 
$function$ 

postgres=# SELECT * FROM foo(); 
┌────┬──────────────────────────────────────────────────────────────────────────────────────┐ 
│ x │           y           │ 
╞════╪══════════════════════════════════════════════════════════════════════════════════════╡ 
│ 10 │ {"(1,2)","(2,3)","(3,4)","(4,5)","(5,6)","(6,7)","(7,8)","(8,9)","(9,10)","(10,11)"} │ 
└────┴──────────────────────────────────────────────────────────────────────────────────────┘ 
(1 row) 
相关问题