使用动态字段名称触发 [英] Trigger with dynamic field name

查看:47
本文介绍了使用动态字段名称触发的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在更新表上创建 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆