做应用时遇到过这么个问题,数据库录入了一些基础数据,有时候可能会把数据库中所有包含“联通”的字符都替换为“电信”,类似这么个功能吧,写了个简单的替换程序,当然如果你不想替换某些表就修改一个替换规则 如果数据比较重要,调用之前最好备份下数据,替
做应用时遇到过这么个问题,数据库录入了一些基础数据,有时候可能会把数据库中所有包含“联通”的字符都替换为“电信”,类似这么个功能吧,写了个简单的替换程序,当然如果你不想替换某些表就修改一个替换规则
如果数据比较重要,调用之前最好备份下数据,替换之后不可逆哦 oracle create or replace procedure str_replace_all(oldstr in varchar2,newstr in varchar2) istable_name varchar2(45);--表名column_name varchar2(100);--字段名sql_str varchar2(200);--动态执行的sqltype cur_type is ref cursor;--定义游标类型cursor_columns cur_type;--查询字段游标cursor cursor_tables is--查询表游标 select table_name from user_tables;begin open cursor_tables; loop --遍历所有的数据库表 fetch cursor_tables into table_name; exit when cursor_tables%notfound; dbms_output.put_line(table_name); --遍历当前表所有字符型字段 sql_str := 'select column_name from user_tab_columns where table_name='''||table_name||''' and data_type in (''char'',''varchar2'')'; open cursor_columns for sql_str; loop fetch cursor_columns into column_name; exit when cursor_columns%notfound; --dbms_output.put_line('---'||column_name); --替换更新当前字段 sql_str := 'update '||table_name||' set '||column_name||' =replace('||column_name||','''||oldstr||''','''||newstr||''')'; --dbms_output.put_line(sql_str); execute immediate sql_str; commit; end loop; end loop;end str_replace_all;