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

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

问题描述

我在更新表上创建PostgreSQL(9.3)触发器时遇到问题. 我想在循环中将新值设置为

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 || ';';

其中fieldName是动态设置的.但是此字符串引发错误

where fieldName is set dynamically. But this string raise error

ERROR:  syntax error at or near "NEW"

我该如何实现?

推荐答案

我找到了一个可行的解决方案: 触发器应在插入/更新之后而不是之前执行.然后所需的行采用以下形式

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和fieldValue我以另一种方式获得:

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天全站免登陆