代码之家  ›  专栏  ›  技术社区  ›  ScArcher2

如何编写不返回任何内容的Postgres存储过程?

  •  12
  • ScArcher2  · 技术社区  · 17 年前

    如何在Postgres中编写一个根本不返回值的简单存储过程? 即使使用void返回类型,当调用存储过程时,也会返回一行。

    CREATE FUNCTION somefunc(in_id bigint) RETURNS void AS $$
    BEGIN
       DELETE from test_table where id = in_id;
    END;
    $$ LANGUAGE plpgsql;
    
    3 回复  |  直到 11 年前
        1
  •  7
  •   Michael Krelin - hacker    17 年前

    它不是返回值的函数,而是 SELECT 你以前叫它。如果它不返回任何行,则不会运行函数。

        2
  •  6
  •   Jonathan Hall    11 年前

    您可以通过滥用设置返回功能来实现“无返回”功能:

    简单功能:

    create function x () returns setof record as $$
    begin
    return;
    END;
    $$ language plpgsql;
    

    现在您可以:

    # select x();
     x
    ---
    (0 rows)
    

    如果它对您不起作用(抱歉,我使用的是8.5),请尝试以下方法:

    # create function x (OUT o1 bool, OUT o2 bool) returns setof record as $$
    begin
    return;
    END;
    $$ language plpgsql;
    CREATE FUNCTION
    

    参数不相关,但:

    • 您需要1个
    • 他们必须被命名

    现在你可以:

    # select * from x();
     o1 | o2
    ----+----
    (0 rows)
    
        3
  •  5
  •   George Silva    17 年前

    你做得很好。您不需要添加任何其他内容。

    该行的结果为空,因此是一个空返回。

    我不认为你能做些什么。检查我的虚空功能,它们都和你的一样。

    在代码块中返回void作为$$且没有返回语句。

    推荐文章