如何在Oracle 11g中添加一个具有默认值的新列,但不立即将默认值应用于旧记录?

时间:2015-05-29 22:56:38

标签: oracle oracle11g

我有一张包含数百万条记录的现有表格。现在我想添加一个默认值的新列。但出于表演原因,我不想立即将新值应用于现有记录。有没有方便的方法呢?

到目前为止,我的想法是解决这个问题:

  • 添加新列,但不指定默认值(DDL)
  • 通过chunk将旧行更新为默认值(以避免锁定表)(DML)
  • COMMIT
  • 更改列以添加默认值(DDL)

1 个答案:

答案 0 :(得分:0)

另一种选择是

  • 添加没有任何默认值的新列但接受它 NULL
  • 插入新记录时,请为此列插入NULL
  • 创建AFTER INSERT触发器并使用它更新列 默认值。

这样的东西
CREATE TRIGGER trg_update
AFTER INSERT
   ON table_name
BEGIN
UPDATE table_name 
SET new_column = (default_value)
WHERE Id_Column = :new.Id_Column;
END;