【问题标题】:SQL, On delete cascade and on update cascadeSQL,删除级联和更新级联
【发布时间】:2014-04-06 00:59:35
【问题描述】:

我是 SQL 新手,遇到了一个奇怪的问题。所以我有两张桌子OFFERS和 供应商。这是供应商表。

CREATE TABLE  "SUPPLIER" 
   (    "S#" NUMBER, 
    "NAME" VARCHAR2(50),  
    "CITY" VARCHAR2(50), 
     PRIMARY KEY ("S#") ENABLE
   )

这里是 OFFERS 表。

CREATE TABLE  "OFFERS" 
   (    "P#" NUMBER, 
    "S#" NUMBER, 
    "V#" NUMBER, 
    "PR#" NUMBER, 
      CONSTRAINT "PK_OFFERS" PRIMARY KEY ("P#") ENABLE
   )

所以现在,当我尝试像这样向优惠表添加外键约束时

ALTER TABLE OFFERS
ADD CONSTRAINT FK_SUPPLIERS FOREIGN KEY(S#)
 REFERENCES SUPPLIER (S#) 
ON DELETE CASCADE
ON UPDATE CASCADE

我收到一条错误消息:“ORA-01735:ALTER TABLE 选项无效”。如果我删除最后一行,即“ON UPDATE CASCADE”,则效果很好。那么,我做错了什么?我在互联网上看到了很多这样的例子,它们应该可以工作,所以我有点困惑。如果这有什么不同的话,我正在研究 apex.oracle.com。

【问题讨论】:

标签: sql oracle cascade


【解决方案1】:

据我所知(即使在当前版本中),Oracle 中没有“更新级联”:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:5773459616034

【讨论】:

  • 除了明显的“放弃约束,修复值并放回约束”之外,是否有等效的功能/解决方法?
  • 你不需要删除它,你可以禁用它并打开它。最好的解决方案是使用延迟约束,在这种情况下会发生什么 - 执行事务时您不会收到错误 - 所有延迟约束检查都将在提交时发生 - 如果您做了所有必需的更改,它将表现您期望的方式。
  • 查看此链接 - 可能会有所帮助 java2s.com/Tutorial/Oracle/0120__Table/DeferredConstraints.htm
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多