2

我正在尝试在 oracle 中执行以下语句:

alter table COMENTARIO
add constraint FK_COMENTARIO_DI foreign key (DI_ID)
  references DATO_DE_INTERES (DI_ID) ON UPDATE CASCADE ON DELETE SET NULL;

但是,我得到 ORA-00905 缺少关键字。

但是,当我删除 ON UPDATE 语句时,该命令可以正常工作。为什么是这样?如果我不能使用 ON UPDATE,有什么选择吗?预先感谢您!

4

3 回答 3

2

级联约束没有“ON UPDATE”子句。除了某种应用程序执行或触发器之外,我不知道有任何替代方案。

于 2010-12-29T21:54:50.760 回答
1

在 Oracle 中,约束定义中没有 ON UPDATE 子句。在绝大多数情况下,您不希望实现这种“以防万一”,因为主键应该是不可变的。如果您的主键不是不可变的,那通常表明应该解决而不是编码的数据模型问题。

也就是说,如果你真的想实现类似的东西,Tom Kyte 确实有一个更新级联包。但是你最好先设计系统来避免问题,而不是在这种复杂程度下进行设计。

于 2010-12-29T22:07:13.243 回答
1

Oracle 中没有 ON UPDATE CASCADE 这样的选项。也许不是寻找一种方法来实现这一点(我认为可以使用 ON UPDATE 触发器),您可以告诉您为什么需要它。我的意思是 - 为什么要更新 DATO_DE_INTERES 的主键?

于 2010-12-29T21:55:44.550 回答