Oracle:约束,取决于另一个表
问题描述:
对不起奇怪的标题,不知道如何更好地命名Q.所以:Oracle:约束,取决于另一个表
我有3个表格。 EntityA,EntityB,AB。经典的多对多实现。
是否有可能创建约束强制要求ALWAYS有A和B
之间的至少一个关系实施例的工作流程:
一个)插入A,插入B,插入关系,提交; SUCCESS
b)插入A,插入B,提交; FALSE
所以问题是:是否有任何on commit
触发?或者类似的东西。
答
没有这样的事情作为ON COMMIT触发器。但是,通常可以使用物化视图模拟ON COMMIT触发器的行为。在你的情况,你可以
- 创建三个表物化视图日志
- 创建快速刷新物化视图联接三个表
- 创建提出如果有异常的物化视图的约束有任何行验证失败
当您提交时,会发生物化视图刷新。如果物化视图上的约束失败,则提交失败。
答
您可以在AB上设置延迟约束条件,该条件将仅在相同的提交时检查值的有效性。 您可以在EntityA和EntityB表中设置AB表的PK以进行参考,反之亦然(取决于设置延迟约束)。 假设这个插入操作在同一个事务中,那么如果没有有效的条目进入AB表,那么你可能会推出这些更改。
+0
嗯,我已经在AB上创建了延迟约束。在`b)`情况下它不会触发。 – zerkms 2011-01-20 06:12:37
嗯,是的,它可以工作。感谢您的回答,但我刚刚创建了包含所有数据并验证它的程序包。 – zerkms 2011-01-20 06:20:29