ON DELETE SET DEFAULT - 未实现的功能

时间:2014-06-08 04:21:35

标签: sql oracle

创建表格时。

错误消息显示SQL Error: ORA-03001: unimplemented feature

CREATE TABLE OrgChart
  (
    job_title VARCHAR(30) NOT NULL PRIMARY KEY,
    emp_nbr   INTEGER DEFAULT 0 NOT NULL REFERENCES Personnel(emp_nbr) ON
  DELETE SET DEFAULT ON
  UPDATE CASCADE,
    boss_emp_nbr INTEGER REFERENCES Personnel(emp_nbr),
    UNIQUE (emp_nbr, boss_emp_nbr),
    salary DECIMAL (12,4) NOT NULL CHECK (salary >= 0.00)
  );

如何声明允许从父表级联更新的外键,并在删除父行时将值设置为默认值(本例中为0)?

1 个答案:

答案 0 :(得分:4)

Oracle不支持级联更新。删除父行时,它也不允许您将值设置为默认值。 on delete行为的两个选项是cascadeset null。显然,如果您希望将列声明为set null,则定义not null行为是没有意义的。

通常,主键应该是不可变的。如果您打算允许更新列,则通常不应将列声明为主键。如果emp_nbr需要更改(这似乎很奇怪),您可能需要一个不同的主键。如果员工被移除,您还希望员工留在OrgChart表中,这也让我感到奇怪。如果您想允许组织结构图有一个没有员工的位置,您可能希望允许emp_nbr中的OrgChart可以为空,并声明外键为{{1} }。