[英]How to return the value of function 2 from within function 1
我將如何從函數內部返回函數的返回值(例如foo()
調用bar()
)?
create or replace function bar ()
returns text
as $$
begin
select md5(random()::text);
end
$$ language 'plpgsql';
create or replace function foo ()
returns text
as $$
begin
return select bar ();
end
$$ language 'plpgsql';
我不斷收到錯誤,例如query has no destination for result data
您需要提供一些東西來接受查詢的輸出:
CREATE OR REPLACE FUNCTION public.bar()
RETURNS text
LANGUAGE plpgsql
AS $function$
declare
md5_val text;
begin
select into md5_val md5(random()::text);
return md5_val;
end
$function$
;
create or replace function foo ()
returns text
as $$
declare
md5_val2 text;
begin
select into md5_val2 bar();
return md5_val2;
end
$$ language 'plpgsql';
select * from foo();
foo
----------------------------------
ac6a4910fac3472d226dc54bb147336e
看:
https://www.postgresql.org/docs/current/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-ONEROW
你的兩個函數都是“plpgsql”語言和“sql”語言函數的一些不允許的混合。 此外,這與從另一個調用一個無關,即使您直接調用 bar() 也會被破壞,一旦修復,則 foo() 會獨立於 bar() 被破壞而被破壞。
這里什么都不需要在plpgsql中,所以最簡單的修復就是把它們變成'sql'語言函數。
create or replace function bar ()
returns text
as $$
select md5(random()::text);
$$ language 'sql';
create or replace function foo ()
returns text
as $$
select bar();
$$ language 'sql';
如果你希望它們是 plpgsql,那么在第一種情況下你需要return
一些東西,它不會像 SQL 語言函數那樣自動返回最后一個查詢的結果。 而在第二個中,“返回選擇”無效。 您可以選擇一個臨時變量,然后返回該臨時變量,但只需將第一個中的“選擇”更改為“返回”,並在第二個中刪除任性的“選擇”就更容易了。
create or replace function bar ()
returns text
as $$
begin
return md5(random()::text);
end
$$ language 'plpgsql';
create or replace function foo ()
returns text
as $$
begin
return bar();
end
$$ language 'plpgsql';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.