使用动态字段名称触发 [英] Trigger with dynamic field name
本文介绍了使用动态字段名称触发的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在更新表上创建 PostgreSQL (9.3) 触发器时遇到问题.我想在循环中设置新值
EXECUTE 'NEW.'||字段名 ||':=''一些前置数据'' ||新的.'||字段名 ||';';
其中 fieldName 是动态设置的.但是这个字符串引发错误
<块引用>错误:NEW"处或附近的语法错误
我该如何实现这一目标?
解决方案
我找到了一个可行的解决方案:触发器应该在插入/更新之后执行,而不是之前.然后所需的行采用形式
EXECUTE 'UPDATE' ||TG_TABLE_SCHEMA ||'.'||TG_TABLE_NAME ||'设置' ||字段名 ||'= ''前缀:'' ||''' ||字段值 ||''' WHERE id = ' ||新编号;
fieldName 和 fieldValue 我在下一个方式得到:
FOR fieldName,fieldValue IN select key,value from each(hstore(NEW)) LOOP如果……那么结束循环:
I have a problem on creating PostgreSQL (9.3) trigger on update table. I want set new values in the loop as
EXECUTE 'NEW.'|| fieldName || ':=''some prepend data'' || NEW.' || fieldName || ';';
where fieldName is set dynamically. But this string raise error
ERROR: syntax error at or near "NEW"
How do I go about achieving that?
解决方案
I found a working solution: trigger should execute after insert/update, not before. Then desired row takes the form
EXECUTE 'UPDATE ' || TG_TABLE_SCHEMA || '.' || TG_TABLE_NAME ||
' SET ' || fieldName || '= ''prefix:'' ||''' || fieldValue || ''' WHERE id = ' || NEW.id;
fieldName and fieldValue I get in the next way:
FOR fieldName,fieldValue IN select key,value from each(hstore(NEW)) LOOP
IF .... THEN
END LOOP:
这篇关于使用动态字段名称触发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文