Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 尝试添加外键时获取ORA-00905错误_Sql_Database_Oracle_Ora 00905 - Fatal编程技术网

Sql 尝试添加外键时获取ORA-00905错误

Sql 尝试添加外键时获取ORA-00905错误,sql,database,oracle,ora-00905,Sql,Database,Oracle,Ora 00905,我试图在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语句时,该命令可以正常工作。为什么会这样?如果我无法在更新时使用,是否有任何选项?

我试图在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语句时,该命令可以正常工作。为什么会这样?如果我无法在更新时使用,是否有任何选项?事先谢谢你

级联约束没有“更新时”子句。除了某种应用程序强制或触发器之外,我不知道还有什么其他选择。

Oracle中没有更新级联这样的选项。也许你可以告诉我为什么需要这个,而不是寻找一种实现这个的方法(我认为这在更新触发器上是可能的)。
我的意思是-为什么要更新DATO_DE_Interest的主键?

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


也就是说,如果你真的想实现这样的东西,Tom Kyte确实有一个。但是您最好首先设计系统以避免问题,而不是在这种复杂程度下进行设计。

这意味着没有更新级联,对吗?我有什么选择?为什么我的一个同学也在与oracle合作,并且在使用这句话时没有问题?你的同学肯定没有准确地使用过这句话。没有ON UPDATE子句,所以ON UPDATE CASCADE的语法无效。所以,oracle中没有ON UPDATE子句?这将解释为什么我不能使用它,无论我使用什么选项。。。对吧?对。Oracle中没有ON UPDATE子句。外键约束无法自动处理父表主键的更新。噢,谢谢。然后,我将删除ON UPDATE子句,一切都应该正常。出于好奇,DB引擎支持什么?这是一个好问题。我主要是“以防万一”,而不是真的因为某个原因而这么做!但是,因为这更像是DDL,我必须向我的老师解释为什么我不能(也不应该)在更新中使用…是的,我也读过。我想知道我是否可以用它来解释我的老师。。。