你是要将所有数字型字段数据置为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来完成。

解决方案 »

  1.   


    --修改表 为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';
      

  2.   

    楼主意思应该是修改表定义吧,那应该是用alter而不是用update,参考楼上大神~
      

  3.   

    1楼和2楼结合,不管是要update还是alter都能解决了。