问题事这样的,因为某个代码中包含字段,这个字段牵连到的表很多,如果再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;

解决方案 »

  1.   

    游标可以用update 语句?
    我怎么看不懂呢?
    爱莫能助!
      

  2.   

    你那根本就不对:
    直接写语句,因为你几张表存在关联所以要注意删除的顺序
    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;
      

  3.   


    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;
      

  4.   

    游标可以用update 语句?
    我怎么看不懂呢?
    爱莫能助! 
      

  5.   

    sql>spool update.sql
    sql>select 'update table ' || table_name || ' set Numbercode=90 where  Numbercode=29;'
          from user_tables;
    sql>spool off;然后找到生成的脚本update.sql, 执行之。