Oracle中引用触发操作的语法错误

时间:2016-03-28 15:02:58

标签: sql oracle

我正在尝试使用"在删除"上创建一个新表和"更新"引用触发的操作,但它一直说有语法错误。当我尝试运行脚本时,错误消息是"缺少右括号"。我不明白为什么这不对。

CREATE TABLE PERSON
(SSN        VARCHAR(9)          NOT NULL,
 Name       VARCHAR(20)         NOT NULL,
 Phone      VARCHAR(10),
 Address    VARCHAR(40),
 Employer   VARCHAR(20),
 Insurer    VARCHAR(20),
 PCP        INT,
 CONSTRAINT PERPPK
  PRIMARY KEY(SSN),
 CONSTRAINT PEREMPFK
  FOREIGN KEY(Employer) REFERENCES EMPLOYER(Name)
              ON DELETE SET NULL      ON UPDATE CASCADE,
 CONSTRAINT PERINSFK
  FOREIGN KEY(Insurer) REFERENCES INSURER(Name)
              ON DELETE SET NULL      ON UPDATE CASCADE,
 CONSTRAINT PERPCP
  FOREIGN KEY(PCP) REFERENCES PHYSICIAN(PID)
              ON DELETE SET NULL      ON UPDATE CASCADE);

1 个答案:

答案 0 :(得分:0)

ON UPDATE CASCADE是无效的语法。没有直接的方法可以做到这一点并且有充分的理由。您不应该创建一个必须更新主键值的模型。只应创建和删除主键,从不更新。如果它正在更新,那么它可能不是主键。但这是您必须考虑的设计考虑因素。

如果要实现类似级联更新的功能,可以使用存储过程和可延迟约束来实现。在提交之前推迟约束并更新父键和外键。

Here就此问题进行了讨论。 Another.