PostgreSQL循环在访问嵌套函数生成的结果表时出错
我有以下情况,当调用嵌套的PostgreSQL循环在访问嵌套函数生成的结果表时出错,sql,postgresql,loops,Sql,Postgresql,Loops,我有以下情况,当调用嵌套的函数my\u other\u function()时,从循环的第一部分生成的\u my\u other\u函数生成的表中检索数据时,会生成OID错误。如何解决这个问题 函数function my_other_function()生成一个表,其中只有一行数据和7列,因此可以以其他方式存储或返回此结果吗?如果没有提交,表就不存在,我是否会收到错误 函数my\u other\u function()自身工作正常 CREATE OR REPLACE FUNCTION my_fu
函数my\u other\u function()
时,从循环的第一部分生成的\u my\u other\u函数生成的表中检索数据时,会生成OID错误。如何解决这个问题
函数function my_other_function()
生成一个表,其中只有一行数据和7列,因此可以以其他方式存储或返回此结果吗?如果没有提交,表就不存在,我是否会收到错误
函数my\u other\u function()
自身工作正常
CREATE OR REPLACE FUNCTION my_function() RETURNS varchar AS $$
DECLARE
row_data RECORD;
helper int;
BEGIN
EXECUTE '
DROP TABLE IF EXISTS my_table_loop_result;
';
EXECUTE '
CREATE TABLE my_table_loop_result (
var1 varchar, var2 varchar, var3 varchar, var4 int,
var5 varchar, var6 varchar, var7 int)
';
FOR row_data IN SELECT var_x1, var_x2 FROM my_table_too
LOOP
SELECT my_other_function(row_data.var_x1, row_data.var_x2) INTO helper; --Returns "1" if OK
INSERT INTO my_table_loop_result(var1,var2,var3,var4,var5,var6.var7)
SELECT
var1,var2,var3,var4,var5,var6,var7
FROM table_generated_by_my_other_function --OID ERROR!
WHERE var1 = row_data.var1;
END LOOP;
RETURN 1;
END;
$$ LANGUAGE plpgsql;
8.2已经过时了-在这个版本中,您不应该删除临时表
PlpgSQL使用准备好的语句,其中包含引用相关表的执行计划。删除表时,保存的计划无效-因为引用已断开。本例中的新版本发布计划-但在8.2中并非如此。所以-首先升级或检查您的表是否存在,如果存在,则将其截断,而不是删除。当表不存在时,创建它。其他解决方案-仅使用动态SQL
一些注释:创建表或删除表不需要动态SQL
我不太清楚你的建议是什么。但是,我只是试图完全从函数中删除删除并创建执行。也就是说,在函数运行之前,我创建并截断“表my\u table\u loop\u result”。我也有同样的错误。此外,它不是一个临时表,也不是“table_generated_by_my_other_function”表。我刚刚意识到,我在另一个函数中又执行了一次DROP-CREATE。将其替换为一个简单的截断,现在可以正常工作。