2016-08-24 39 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) 
相關問題