Postgresql 如何从Postgres函数返回多个值?
我在PostgreSQL中使用这个函数,它可以工作,但现在我需要返回多个值,例如:Postgresql 如何从Postgres函数返回多个值?,postgresql,plpgsql,Postgresql,Plpgsql,我在PostgreSQL中使用这个函数,它可以工作,但现在我需要返回多个值,例如:\u value和\u prefix 我该怎么办 CREATE或REPLACE函数generate_sequence(_account_id integer,_sequencetext)将文本返回为$$ 声明 _前缀文本; _下一个值文本; _零位整数; _价值文本; 开始 选择asq.prefix,asq.next\u value::text,asq.zero\u pad 插入_前缀、_下一个_值、_零\u焊盘
\u value
和\u prefix
我该怎么办
CREATE或REPLACE函数generate_sequence(_account_id integer,_sequencetext)将文本返回为$$
声明
_前缀文本;
_下一个值文本;
_零位整数;
_价值文本;
开始
选择asq.prefix,asq.next\u value::text,asq.zero\u pad
插入_前缀、_下一个_值、_零\u焊盘
从帐户顺序asq
其中asq.account\u id=\u account\u id
和asq.sequence=_序列;
_值:=_前缀| | | u下一个_值;
如果_zero_pad不为空,则
_值:=lpad(_值,_零,'0');
如果结束;
更新帐户\u序列集
下一个值=下一个值+1
其中account\u id=\u account\u id
和序列=_序列;
返回_值;
结束;
$$语言plpgsql;
您应该使用OUT
参数:
CREATE OR REPLACE FUNCTION fxreturns2(IN a int, OUT b int, OUT c int)
AS $$
BEGIN
b := a + 1;
c := a + 2;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
DO $$
DECLARE r record;
BEGIN
r := fxreturns2(10);
RAISE NOTICE 'b=% c=%', r.b, r.c;
END;
$$;
或
请阅读plpgsql。这个主题和其他主题在这里都有很好的描述,可能不到50页
有时更好的方法是返回复合类型的值。复合类型确保所有代码的一致性:
CREATE TYPE typ2 AS (b int, c int);
CREATE OR REPLACE FUCNTION fxtyp2(a int)
RETURNS typ2 AS $$
DECLARE r typ2;
BEGIN
r.b := a + 1;
r.c := a + 2;
RETURN r;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
用法与使用OUT
参数时相同
您的代码对于并发使用是不安全的。你应该读一些关于。您应该使用或强制-选择更新
。应针对当前写入锁定将要更新的所有选定行
CREATE TYPE typ2 AS (b int, c int);
CREATE OR REPLACE FUCNTION fxtyp2(a int)
RETURNS typ2 AS $$
DECLARE r typ2;
BEGIN
r.b := a + 1;
r.c := a + 2;
RETURN r;
END;
$$ LANGUAGE plpgsql IMMUTABLE;