我用 HeidiSQL 创建的 postgresql 函数没有返回结果

My postgresql function created with HeidiSQL is not returning results

v_all_my_tables 包含我想遍历的单个列(来自 charvar)和 运行 一个 select 查询。

HeidiSQL 使用以下代码创建函数。但是,当我 运行 例程时,没有返回任何结果并记录此错误

SELECT "myFunc"();
/* Unknown datatype oid #2278 for "myFunc". Fall back to UNKNOWN.

我是 postgres 的新手,所以我可能在这里遗漏了一些明显的东西。谢谢!

DELIMITER //
CREATE OR REPLACE FUNCTION myFunc() 
  RETURNS void AS
$func$
DECLARE
   _tbl text;
BEGIN
   FOR _tbl IN
      SELECT table_name FROM v_all_my_tables ORDER BY TABLE_NAME ASC
   LOOP
      EXECUTE
      format('SELECT distinct lastupdate FROM %I order by lastupdate DESC LIMIT 1', _tbl); 
   END LOOP;
END
$func$  LANGUAGE plpgsql;

您需要使用 INTO 子句调用 EXECUTE 来存储执行的 SQL 语句的结果。 您可能需要使用 RETURN 到 return 某些结果。 如果在定义函数时没有使用双引号,则在调用函数时不应使用双引号(通常在 PostgreSQL 中标识符不需要双引号)。

示例:

select * from t1;
 lastupdate 
------------
 2020-06-18
(1 row)

select * from v_all_my_tables;
 table_name 
------------
 t1
(1 row)


CREATE OR REPLACE FUNCTION myFunc() 
 RETURNS date AS
$func$
DECLARE
   _tbl text;
   v_lastupdate date;
BEGIN
   FOR _tbl IN
      SELECT table_name FROM v_all_my_tables ORDER BY TABLE_NAME ASC
   LOOP
      EXECUTE
       format('SELECT distinct lastupdate FROM %I order by lastupdate DESC LIMIT 1', _tbl)
       INTO v_lastupdate;
   END LOOP;
   RETURN v_lastupdate;
END
$func$  LANGUAGE plpgsql;
CREATE FUNCTION

select myFunc();
   myfunc   
------------
 2020-06-18
(1 row)