我必须制作一个具有多种条件的更新功能
BEGIN
OPEN cur3 FOR execute('select id_organigramme from ( select distinct id_personne,id_organigramme,idfax from requpdate where
id_personne= ' || VariableIDpersonne || ' and idfax is null) a where
a.id_organigramme not in (select distinct id_organigramme from
requpdate where id_personne= ' ||VariableIDpersonne || ' and idfax is
not null and a.id_personne=requpdate.id_personne ) ');
LOOP
FETCH cur3 INTO VariableIDorganigrammeFax;
if not found then
--Message here !!!
--Raise notice 'hello word!'
exit;
end if;
如果存在任何条件,我必须显示消息我发现我可以使用Raise Notice / info ...语句执行此操作,但是当函数完成时我必须将这些消息自动导出到文本文件中。 这可能吗?否则我可以用它做什么。
我使用PGAdminIII作为客户。
答案 0 :(得分:1)
您的日志记录选项完全取决于您的客户端配置。但是,我建议您使用NOTIFY
\ LISTEN
框架,而不是使用RAISE NOTICE
。基本上,在您的功能中,您可以向您选择的频道发出通知(可以是任何字符串),并在您的客户端中收听相同的频道,将消息记录为他们进来了。听力和测井的确切程度取决于你的客户。
您展示的代码也可以使用一些改进。
首先,您的查询是一个令人难以置信的复杂版本:
SELECT DISTINCT id_organigramme
FROM requpdate
WHERE id_personne = VariableIDpersonne
AND idfax IS NULL;
其次,您不需要动态查询,可以使用变量替换。假设id_personne
不是字符串,它就像上面说的一样简单,否则使用quote_literal(VariableIDpersonne)
。
最后,除非您的部分功能未显示需要cursor
,否则您只需执行以下操作:
FOR VariableIDorganigrammeFax IN [query above]
LOOP
... -- do your processing here
END LOOP;
IF NOT FOUND THEN -- the loop above did not iterate because no records were returned
SELECT pg_notify('logMyFunction', format('%s: No records found', VariableIDpersonne));
END IF;
pg_notify()
函数是NOTIFY
命令的包装器,可以传递变量字符串。
在调用该函数之前,您应该发出命令LISTEN logMyFunction
,以便您的会话将从频道收到通知。