Postgres:使用在另一个函数中返回字符串的函数

时间:2017-11-17 11:51:33

标签: postgresql function return-value

我有一个返回字符串的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();

我做错了什么?如何将第一个函数的返回值用于第二个函数?

3 个答案:

答案 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());是可接受的陈述。