例如,有两个具有以下结构的表:
CREATE TABLE A (
ID number PRIMARY KEY,
TEXT varchar2(4000)
);
CREATE TABLE B (
ID number PRIMARY KEY REFERENCES A,
KEY varchar2(256)
);
在表 A 上创建了两个触发器(它们在这个问题中给出)。
第一个触发器Id为两个 PK 生成。在第二个触发器中,文本被加密,加密应该替换 A 中插入的文本,并且使用加密密钥,它应该在表 B 中插入一条新记录。
但是由于表 B 上的外键,我无法在其中插入一条Id不在表 A 中的记录。
问题是,如何实施?
如果 triggers 不能省略,例如,因为 insert with已经
INSERT实现,那么这是一个带有复合触发器的快速解决方案:拒绝触发器会更正确,因为它们通常根本没有必要。
然后可以像这样实现问题中的插入逻辑:
插入几条新记录并确保结果符合预期:
如果您不能没有触发器,那么在oracle中可以指定延迟到外键事务结束的完整性检查(关键字DEFERRABLE)。
示例文章。