create or replace procedure update_userid
as
v_sql varchar2(8000);
v_table varchar2(100);
v_count number(6);
cursor c_table is
select distinct table_name from user_tables a
where column_name='USERID';
begin
dbms_output.enable(1000000);
v_count:=0;
open c_table;
loop
fetch c_table into v_table;
exit when c_table%NOTFOUND;
v_sql := 'update '||v_table||' set userid=dddd||substr(userid,5)';
begin
execute immediate v_sql;
commit;
exception
when others then
begin
v_count:=v_count+1;
dbms_output.put_line ('error:'||v_sql);
end;
end;
end loop;
close c_table;
dbms_output.put_line ('error count:'||v_count);
end update_userid;
as
v_sql varchar2(8000);
v_table varchar2(100);
v_count number(6);
cursor c_table is
select distinct table_name from user_tables a
where column_name='USERID';
begin
dbms_output.enable(1000000);
v_count:=0;
open c_table;
loop
fetch c_table into v_table;
exit when c_table%NOTFOUND;
v_sql := 'update '||v_table||' set userid=dddd||substr(userid,5)';
begin
execute immediate v_sql;
commit;
exception
when others then
begin
v_count:=v_count+1;
dbms_output.put_line ('error:'||v_sql);
end;
end;
end loop;
close c_table;
dbms_output.put_line ('error count:'||v_count);
end update_userid;
create or replace procedure update_userid
as
v_sql varchar2(8000);
v_table varchar2(100);
v_count number(6);
cursor c_table is
select distinct table_name from user_tables a
where column_name='USERID';
begin
dbms_output.enable(1000000);
v_count:=0;
open c_table;
loop
fetch c_table into v_table;
exit when c_table%NOTFOUND;
v_sql := 'update '||v_table||' set userid=''dddd''||substr(userid,5)';
begin
execute immediate v_sql;
commit;
exception
when others then
begin
v_count:=v_count+1;
dbms_output.put_line ('error:'||v_sql);
end;
end;
end loop;
close c_table;
dbms_output.put_line ('error count:'||v_count);
end update_userid;
/
user_tables 这个表不对吧,应该是all_tab_columns还有能否解释一下这句
v_sql := 'update '||v_table||' set userid=''dddd''||substr(userid,5)';
里面的||是什么意思,我一下子找不到书去查,谢谢了。
'substr('||COLUMN_NAME||',5)'||';'
FROM ALL_TAB_COLUMNS WHERE OWNER='xxx' AND COLUMN_NAME='xxx'生成一个脚本后,放到sql文件里面执行,记得commit;
xxx是你要代替的值
user_:是本用户的’||‘是字符串连接符
如:
select '123'||'abcd' from dual;--则得到123abcd
v_sql := 'update '||v_table||' set userid=''dddd''||substr(userid,5) where substr(userid,1,4)=''1234'' ';
select * from aaa;
spool off
create or replace procedure update_userid
as
v_sql varchar2(8000);
v_table varchar2(100);
v_count number(6);
cursor c_table is
select distinct table_name from user_tables a
where column_name='USERID';
……………………
spool c:\aaa.txt;
…………………………………………
spool off;
end update_userid;
然后在SQL窗口先set serveroutput on
再exec procname;