PostgreSQL,一个函数调用另一个函数并向调用者获取2个值

问题描述

Postgresql 12.要从另一个函数testB()调用函数testA(),并将两个“输出”值分配给2个局部变量。不知道该如何做作业,请帮忙。

create or replace function testA(
out outA int,out outB varchar)
returns record as $$
begin
    outA := 100;
    outB := '1234';
end; $$ language plpgsql;

create or replace function testB()
returns void as $$
declare aa int; bb varchar;
begin
-- select * from testA(aa,bb);
end; $$ language plpgsql;

解决方法

赞:

CREATE OR REPLACE FUNCTION public.testa(OUT outa integer,OUT outb character varying)
 RETURNS record
 LANGUAGE plpgsql
AS $function$
begin
    outA := 100;
    outB := '1234';
end; $function$
;

CREATE OR REPLACE FUNCTION public.testb()
 RETURNS void
 LANGUAGE plpgsql
AS $function$
declare
    aa int; bb varchar;
begin
    select into aa,bb * from testa();
    RAISE NOTICE 'a: %,b: %',aa,bb;
end; $function$
;

select * from testb();
NOTICE:  a: 100,b: 1234
 testb 
-------
 
(1 row)


SELECT INTO会将testa的输出分配给您在testb中声明的变量。有关更多信息,请参见here