我有一个触发功能对于具有下面的代码片段表测试环路 -PostgreSQL的:是否可以动态地通过一个表的列
IF TG_OP='UPDATE' THEN
IF OLD.locked > 0 AND
( OLD.org_id <> NEW.org_id OR
OLD.document_code <> NEW.document_code OR
-- Other columns
..........................
)
THEN
RAISE EXCEPTION 'Message';
/* Rest of the codes */
.................................
所以我静态检查与所有列的新值的以前的价值来确保完整性。现在,每当我的业务逻辑发生变化,我必须在该表中添加新列时,每次都必须修改此触发器。我认为这会更好,如果我能动态地检查该表的所有列,而不显式键入他们的名字。
怎么办?
是的。如果您所做的只是测试任何列值是否发生了变化,并且您不需要知道已更改的特定列,那么Stephen的第二个片段绝对是您的选择。简洁,从不需要维护! – 2010-06-21 15:28:39
Archangel可能会发现将该测试与“锁定> 0”以及“锁定”是否已更改相结合的知识很有用。另外'IS DISTINCT FROM'处理空值的方式并不像'<>'那么令人惊讶 – 2010-06-21 20:54:18