级联更新Oracle

时间:2014-08-01 04:41:14

标签: sql oracle plsql

我有以下表格:

CREATE TABLE supplier
( supplier_id numeric(10) not null,
supplier_name varchar2(50),
contact_name varchar2(50),
CONSTRAINT supplier_pk PRIMARY KEY (supplier_id)
);

CREATE TABLE products
( product_id numeric(10) not null,
supplier_id numeric(10),
CONSTRAINT fk_supplier
FOREIGN KEY (supplier_id)
REFERENCES supplier(supplier_id)
ON DELETE SET NULL
);

我需要级联更新供应商'中的主键。因而产品中的外键#39;我正在考虑一个带有触发器的游标来更新子表,但是无法弄清楚它是怎么回事

1 个答案:

答案 0 :(得分:2)

通常情况下,您需要构建数据模型,以便主键是不可变的,以便首先避免问题。

如果您绝对需要允许级联更新,则可能需要使用Tom Kyte的cascading update script。对于每个表,这将动态生成一个包和三个触发器(在语句之前,在行之前和之后的语句之前),它们将实现级联更新所需的所有逻辑。这可能比单个开发人员拼凑的任何东西都高效(并且更准确)。但是,仅仅因为需要创建相当多的对象,维护它的开销非常大。