監査トリガーで使用するために、次のテーブルを宣言しました。
CREATE TABLE audit_transaction_ids (id IDENTITY PRIMARY KEY, uuid VARCHAR UNIQUE NOT NULL, `time` TIMESTAMP NOT NULL);
トリガーは、同じトランザクションで複数回呼び出されます。
トリガーが初めて呼び出されたときに、現在の TRANSACTION_ID() と時刻を含む新しい行を挿入したいと考えています。
その後、トリガーが呼び出されたときに、「uuid」または「time」を変更せずに、既存の「id」を返すようにします (最後に Statement.getGeneratedKeys() を呼び出します)。
現在のスキーマには 2 つの問題があるようです。
呼び出すと、次の
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 を呼び出すと、「時間」が変更されると思われます。
これらの両方の問題を解決するにはどうすればよいですか?