Postgresql 函数未在游标中重新运行查询

Postgresql 函数未在游标中重新运行查询,postgresql,database-cursor,Postgresql,Database Cursor,我有一个光标,它可以穿过许多记录。对于返回中的每一行,我需要检查它是否存在于另一个函数的返回中。我的问题是,即使将函数设置为VOLATILE,该函数似乎也不会针对游标中的每一行重新运行 如何让函数重新运行以获取更新的信息 -游标声明 -返回在临时表中重复的用户列表。 -_光标用于从重复的_记录中选择*$1; -光标循环 对于光标中的_记录 环 如果存在,请从非匹配的行$1中选择id,其中id=\u record.id,然后 具有 INSU用户作为 在schema1.1中插入用户标题、名字、姓氏

我有一个光标,它可以穿过许多记录。对于返回中的每一行,我需要检查它是否存在于另一个函数的返回中。我的问题是,即使将函数设置为VOLATILE,该函数似乎也不会针对游标中的每一行重新运行

如何让函数重新运行以获取更新的信息

-游标声明 -返回在临时表中重复的用户列表。 -_光标用于从重复的_记录中选择*$1; -光标循环 对于光标中的_记录 环 如果存在,请从非匹配的行$1中选择id,其中id=\u record.id,然后 具有 INSU用户作为 在schema1.1中插入用户标题、名字、姓氏 值\u record.title、\u record.first\u name、\u record.last\u name 正在返回用户id 更新schema2.c 设置用户\u id=i.user\u id 来自ins_用户i 其中c.id=_record.id; 如果结束; 端环;
我已经尝试了上面的方法和IF_record.id INSELECT id from non_matching_rows$1,两种方法都给出了相同的结果。它似乎只运行一次不匹配的行。这似乎是因为不匹配的行循环遍历不匹配的记录,并根据预定义的规则插入。有一个“一网打尽”的条件,即只要名字或姓氏匹配,就插入记录。通过该插入,它们将匹配未来的任何记录而不会被插入,因此我需要为游标中的每一行再次运行它。非匹配行返回schema1中不符合预设匹配规则的记录列表。如果光标中的记录不匹配,则将其插入数据库中。如果下一条记录匹配,则它不应出现在函数return中。但是由于非匹配的记录只是第一次运行,匹配的行返回为不匹配

请包括样本数据和预期结果-作为文本,没有图像。还包括至少_游标和函数结果的非匹配行。我不确定EXIT语句在游标for循环中做了什么,但应该被删除,这是由for…循环构造自动处理的。您的论点,但由于非匹配记录只是第一次运行,似乎是一个没有支持证据的结论。@Belayer,我已经更新了问题,希望能够解决您的意见。样本数据和预期结果将是一个不匹配用户的简单列表。