【问题标题】:My postgresql function created with HeidiSQL is not returning results我用 HeidiSQL 创建的 postgresql 函数没有返回结果
【发布时间】:2020-06-18 11:54:01
【问题描述】:

v_all_my_tables 包含一列(来自 charvar),我想循环并在其上运行选择查询。

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;

【问题讨论】:

    标签: postgresql heidisql


    【解决方案1】:

    您需要使用 INTO 子句调用 EXECUTE 来存储 SQL 语句的执行结果。 您可能需要使用 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)
    

    【讨论】:

      猜你喜欢
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 2014-02-12
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      相关资源
      最近更新 更多