SQLite 触发器中的继承条件

Condition in SQLite trigger for inheritance

我正在使用 SQLite,我正在使用 XOR 单 table 继承,我想创建一个触发器,使我能够:

  1. 插入前检查 InstructionRefs.id 是否已在 table RideHeightRefs
  2. 中创建
  3. 插入前检查 InstructionRefs.id 在其他继承的 table StrappingRefs 中不存在。 我拿了一些 oracle PL/SQL 代码并更改了它,我想我从 IF NOT EXISTS (SELECT id...) 开始写错了:

    如果不存在则创建触发器 insert_instructionRefs_trigger 在 InstructionRefs 上插入之前 <br> 开始<br> 如果不存在(SELECT id FROM RideHeightRefs AS RHR INNER JOIN InstructionRefs IR ON RHR.id = IR.id)<br> 开始<br> SELECT RAISE(FAIL, '"RideHeightRefs" 密钥未知。插入 "instructionRefs" 是不可能的。')<br> 结束'<br> 如果不存在(SELECT * FROM (SELECT RideHeightRefs 来自 StrappingRefs 联合所有 SELECT RideHeightRefs 来自 InstructionRefs) T WHERE RideHeightRefs IN (SELECT RideHeightRefs 从新)) 开始 SELECT RAISE(FAIL, '"RideHeightRefs" key is used in another table. Insertion in "StrappingRefs" is impossible.') 结尾 结束

如何修改代码以使其与 sqlite 语法兼容?

要检查基础 table 中的相应行是否存在,只需使用 foreign key constraint.

SQLite 没有 IF 语句。要检查某些内容,请将 WHERE 子句添加到 SELECT FAIL,或使用触发器的 WHEN 子句:

CREATE TRIGGER IF NOT EXISTS insert_instructionRefs_trigger
BEFORE INSERT ON InstructionRefs
WHEN EXISTS (SELECT *
             FROM StrappingRefs
             WHERE id = NEW.id)
BEGIN
  SELECT RAISE(FAIL, '"RideHeightRefs" key is used in another table. Insertion in "StrappingRefs" is impossible.');
END;