方法来自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一次)
1 2 3 4 5 6 7 8 9 10 11 12 | 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; |