你是要将所有数字型字段数据置为0
CREATE OR REPLACE PROCEDURE batchupdate IS
BEGIN
FOR c IN (SELECT t.TABLE_NAME, t.COLUMN_NAME
FROM user_tab_columns t
WHERE t.DATA_TYPE = 'NUMBER' AND
t.TABLE_NAME NOT LIKE 'BIN$%') LOOP
EXECUTE IMMEDIATE 'update ' || c.table_name || ' set ' || c.column_name || '=0';
COMMIT;
END LOOP;
END;
还是要修改表定义 增加 default 0?
与上面类似,通过字字典表user_tab_columns来得到所有的数字列,然后循环使用动态SQL来完成。
CREATE OR REPLACE PROCEDURE batchupdate IS
BEGIN
FOR c IN (SELECT t.TABLE_NAME, t.COLUMN_NAME
FROM user_tab_columns t
WHERE t.DATA_TYPE = 'NUMBER' AND
t.TABLE_NAME NOT LIKE 'BIN$%') LOOP
EXECUTE IMMEDIATE 'update ' || c.table_name || ' set ' || c.column_name || '=0';
COMMIT;
END LOOP;
END;
还是要修改表定义 增加 default 0?
与上面类似,通过字字典表user_tab_columns来得到所有的数字列,然后循环使用动态SQL来完成。
--修改表 为number字段增加默认值
alter table dept modify deptno number(2) default 0;--如果要修改所有数字字段那就要用到1楼的过程了
EXECUTE IMMEDIATE 'update ' || c.table_name || ' set ' || c.column_name || '=0';
--改为
EXECUTE IMMEDIATE 'alter table ' || c.table_name || ' modify ' ||
c.column_name || ' number '||' default 0';