【发布时间】:2021-01-04 23:11:11
【问题描述】:
我有一张表,需要在插入其中一张表时触发。我已经编写了 2 个触发器,但所需表中的值没有按预期更新。相反,在两列中输入的是相同的值。
const val NEW_TRANSACTION_TRIGGER_NAME = "transaction_insert_trigger"
const val NEW_TRANSACTION_TRIGGER = "create trigger $NEW_TRANSACTION_TRIGGER_NAME " +
"after insert on transactions " +
"begin " +
"update transactions " +
"set firm_id = (select firm_id from parties where id = new.party_id) " +
"where id = new.id ; " +
"end"
const val NEW_TRANSACTION_PARTY_TRIGGER_NAME = "transaction_insert_party_trigger"
const val NEW_TRANSACTION_PARTY_TRIGGER = "create trigger $NEW_TRANSACTION_PARTY_TRIGGER_NAME " +
"after insert on transactions " +
"begin " +
"update transactions " +
"set party_name = (select party.name from parties party where party.id = new.party_id) " +
"where id = new.id ; " +
"end"
从上面的 sn-p 可以看出,我观察到的表名为transactions。在此表中插入任何内容后,我必须从parties 表中查询数据以更新此表本身中的firm_id 和party_name,即transactions 表。除了,令我惊讶的是,我看到的只是firm_id 和party_name 这两个条目最终具有与firm_id 相同的值。我在 android 上使用 sqlite,因此我不能使用 update-from 子句。我也试过单trigger,但也没有用。期待快速帮助,因为我的释放被搁置。非常感谢您的帮助。
【问题讨论】:
-
我之前用过的单触发器:
create trigger if not exists $NEW_TRANSACTION_TRIGGER_NAME after insert on transactions begin update transactions set firm_id = (select firm_id from parties where id = new.party_id), party_name = (select name from parties where id = new.party_id) where id = new.id ; end -
您的第一个触发器更新的是公司 ID 而不是公司名称,单个触发器也是如此。你还有其他的触发器吗?发布一些示例数据,以便我们重现您的问题。
-
我的错,我要更新的是
firm_id。我将用正确的文字更新问题。谢谢! -
你能创建一个小提琴:dbfiddle.uk/?rdbms=sqlite_3.27 来重现你的问题吗?
-
我没试过。你到底需要我在这里做什么?我可以在一点帮助下做到这一点。
标签: android database sqlite triggers