我用 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)
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)