【问题标题】:Not able to call multiple functions from one function in PostgreSQL无法从 PostgreSQL 中的一个函数调用多个函数
【发布时间】:2021-11-22 20:16:51
【问题描述】:

这是我的两个函数,

CREATE OR REPLACE FUNCTION public.insert_stagging()
 RETURNS void
 LANGUAGE plpgsql
AS $function$
      BEGIN
         INSERT into stagging(data)
         select data from mytable where data not like 'table%';
      END;
  $function$;
CREATE OR REPLACE FUNCTION clear_mytable2() 
    RETURNS TABLE(data1 text) as
$BODY$   
BEGIN
    RETURN QUERY (select data from mytable2);
END;
$BODY$
    LANGUAGE plpgsql;

不能从另一个函数调用以上两个函数,

CREATE OR REPLACE FUNCTION func_test()
  returns void as
$func$
BEGIN
    EXECUTE 'SELECT insert_stagging()';
    EXECUTE 'SELECT clear_mytable2()';
END
$func$ LANGUAGE plpgsql;

使用上面的代码,如果我改变 'SELECT insert_stagging()'; 的顺序,我只能得到写在 BEGIN 子句中的第一个函数的执行结果 >'SELECT clear_mytable2()'; 那么我只会从 clear_mytable2() 函数中获取执行结果。

如何在 1 个 PostgreSQL 函数中执行两个函数调用?

【问题讨论】:

    标签: database postgresql function plpgsql psql


    【解决方案1】:

    当函数返回表时,然后将结果返回给调用者函数。当调用者函数忽略此结果时,将抛出结果。

    如果你想调用void函数,那么你应该使用PERFORM。在这种情况下使用EXECUTE 是个坏主意。这是为使用动态 SQL 而设计的。如果要调用表函数,必须再次使用RETURN QUERY

    CREATE OR REPLACE FUNCTION func_test()
      RETURNS TABLE(data1 text) AS
    $func$
    BEGIN
        PERFORM insert_stagging();
        RETURN QUERY SELECT * FROM clear_mytable2();
    END
    $func$ LANGUAGE plpgsql;
    
    SELECT * FROM func_test();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-09
      • 2011-08-08
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      相关资源
      最近更新 更多