我已经声明了下表供审计触发器使用:
CREATE TABLE audit_transaction_ids (id IDENTITY PRIMARY KEY, uuid VARCHAR UNIQUE NOT NULL, `time` TIMESTAMP NOT NULL);
触发器将在同一个事务中被多次调用。
第一次调用触发器时,我希望它插入一个具有当前 TRANSACTION_ID() 和时间的新行。
随后调用触发器时,我希望它返回现有的“id”(我为此调用 Statement.getGeneratedKeys())而不更改“uuid”或“时间”。
当前的模式似乎有两个问题。
当我调用时,
MERGE INTO audit_transaction_ids (uuid, time) KEY(id) VALUES(TRANSACTION_ID(), NOW())
我得到:org.h2.jdbc.JdbcSQLException: Column "ID" contains null values; SQL statement: MERGE INTO audit_transaction_ids (uuid, time) KEY(id) VALUES (TRANSACTION_ID(), NOW()) [90081-155]
我怀疑在现有行上调用 MERGE 会改变“时间”。
我该如何解决这两个问题?