我有一个返回字符串的PostgreSQL函数。我想将此函数用于另一个函数,但我得到了一个错误。
这些是示例函数,get_some_string
返回文本,use_the_string
我要调用前一个函数并将结果存储在变量中:
CREATE OR REPLACE FUNCTION public.get_some_string()
RETURNS text AS
$func$
DECLARE
BEGIN
return 'mystring';
END
$func$ LANGUAGE plpgsql VOLATILE;
CREATE OR REPLACE FUNCTION public.use_the_string()
RETURNS boolean AS
$func$
DECLARE
mytext text;
BEGIN
mytext := select public.get_some_string();
END
$func$ LANGUAGE plpgsql VOLATILE;
如果我运行此查询,我会收到错误:
ERROR: syntax error at or near "select"
LINE 24: mytext := select public.get_some_string();
我做错了什么?如何将第一个函数的返回值用于第二个函数?
答案 0 :(得分:3)
您不需要选择:
CREATE OR REPLACE FUNCTION public.use_the_string()
RETURNS boolean AS
$func$
DECLARE
mytext text;
BEGIN
mytext := public.get_some_string();
END
$func$ LANGUAGE plpgsql VOLATILE;
答案 1 :(得分:2)
第二个必须是:
RETURNS boolean AS
$func$
DECLARE
mytext text;
BEGIN
select public.get_some_string() into mytext;
END
$func$ LANGUAGE plpgsql VOLATILE;
或
mytext := (select public.get_some_string());
或
mytext := public.get_some_string();
答案 2 :(得分:1)
注意其他答案:在{plpgsql上下文中隐式添加select
。例如:
do $$
declare
v text[];
begin
v := array_agg(datname) from pg_database;
raise info 'List of databases: %', v;
end $$;
因此,当您致电mytext := select public.get_some_string();
时,它会在内部转换为select select public.get_some_string();
。
这就是为什么括号mytext := (select public.get_some_string());
可能是解决方案:select (select public.get_some_string());
是可接受的陈述。