【问题标题】:Postgres function: assiging results from built-in function to variablePostgres 函数:将内置函数的结果分配给变量
【发布时间】:2022-07-02 09:16:41
【问题描述】:

如何将 REPLACE() 内置 Postgres 函数的结果分配给另一个变量? 我正在尝试这样的事情,但它不起作用:

CREATE FUNCTION uri2text(uri text) RETURNS text AS $$
SET temp_text = SELECT REPLACE(uri , '%20', ' ');
RETURN temp_text;
$$ LANGUAGE SQL;

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    SQL 中不能有变量(这是language sql 为函数选择的语言)。要使用变量,您需要 PL/pgSQL,并且在 PL/pgSQL 中使用 :=(或 =)完成 as documented in the manual 赋值。而且你需要先声明一个变量才能使用它。

    您也不需要SELECT 语句来调用函数。

    所以如果你确实想使用 PL/pgSQL,函数需要如下所示:

    CREATE FUNCTION uri2text(uri text) 
      RETURNS text 
    AS $$
    declare
      temp_text text;
    begin
      temp_text := REPLACE(uri , '%20', ' ');
      RETURN temp_text;
    end;
    $$ LANGUAGE plpgsql;
    

    但是你甚至不需要变量:

    CREATE FUNCTION uri2text(uri text) 
      RETURNS text 
    AS $$
    begin
      RETURN REPLACE(uri , '%20', ' ');
    end;
    $$ LANGUAGE plpgsql;
    

    你甚至不需要 PL/pgSQL 来做这个:

    CREATE FUNCTION uri2text(uri text) 
      RETURNS text 
    AS $$
     SELECT REPLACE(uri , '%20', ' ');
    $$ LANGUAGE sql;
    

    请注意,对于 SQL 函数,您确实需要 SELECT,因为在 SQL 中没有 return 或赋值。

    【讨论】:

      猜你喜欢
      • 2013-11-12
      • 2010-10-02
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 2011-10-22
      • 2021-08-21
      相关资源
      最近更新 更多