【问题标题】:Cascade Update Oracle级联更新 Oracle
【发布时间】:2014-08-01 15:16:57
【问题描述】:

我有以下表格:

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
);

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

【问题讨论】:

  • 抱歉,我不确定我是否理解您要执行的操作。你会级联什么update?您是说您希望能够更新supplier 中的supplier_id 并将该更新级联到products 表吗?这是可能的,但相当复杂。通常,您希望主键是不可变的,以避免发生这种情况。
  • @JustinCave 是的,但是碰巧我需要更新主键“supplier_id”并将更新级联到所有子表(级联)。

标签: sql oracle plsql


【解决方案1】:

通常,您会构建数据模型,使主键不可变,以避免出现问题。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多