问题事这样的,因为某个代码中包含字段,这个字段牵连到的表很多,如果再ORACLE中更改的话的确很慢会,而且会漏,所有想用这个语句彻底改变,
就是把所有表中Numbercode的值从原来的29改为现在的90,下面的事我自己写的,但是有问题,请高手不啬赐教.
declare
vsql varchar2(200);
cursor c1 is
update 'update table '||table_name||' cascade constraints' v_name
from all_tables where tablespace_name='numbercode';
BEGIN
for i in c1 loop
vsql:=i.v_name;
execute immediate vsql;
end loop;
end;
我怎么看不懂呢?
爱莫能助!
直接写语句,因为你几张表存在关联所以要注意删除的顺序
update t1 set Numbercode=90 where Numbercode=29;
update t2 set Numbercode=90 where Numbercode=29;
update t3 set Numbercode=90 where Numbercode=29;
update t4 set Numbercode=90 where Numbercode=29;
DECLARE v_tablename varchar2(50);
v_sql varchar2(4000);
begin
FOR v_tablename in ( select distinct table_name from user_tab_columns where COLUMN_NAME ='NUMBERCODE') LOOP
BEGIN
v_sql := ' UPDATE' || v_tablename || ' SET NUMBERCODE = 90 WHERE NUMBERCODE =23 ';
--DBMS_OUTput.put_line(v_sql);
execute immediate v_sql;
END;
END LOOP;
END;
我怎么看不懂呢?
爱莫能助!
sql>select 'update table ' || table_name || ' set Numbercode=90 where Numbercode=29;'
from user_tables;
sql>spool off;然后找到生成的脚本update.sql, 执行之。