方法来自Piner的新书《构建Oracle高可用环境》
1.先增加一个字段
sql>Alter TABLE TABLE_NAME ADD field_name NUMBER;
2.把该字段修改为有默认值
sql>Alter TABLE TABLE_NAME MODIFY field_name DEFAULT 0;
该语句并不修改以前的记录,只是标记以后的记录将会有默认值0,所以,这个语句的执行很快,不会引发阻塞。
3.修改以前的记录,让其有默认值(每修改1000条记录 commit一次)
DECLARE
row_num NUMBER := 0;
BEGIN
FOR c_test IN (SELECT ROWID rid FROM table_name t WHERE field_name IS NULL) LOOP
UPDATE table_name t SET t.field_name = 0 WHERE ROWID = c_test.rid;
row_num := row_num + 1;
IF MOD(row_num,1000) =0 THEN
COMMIT;
END IF;
END LOOP;
COMMIT;
END;