• Oracle批量更改所有表的字段取值_类型_原字段名


    CREATE PROCEDURE 存储过程名称
    is
    cursor c_tab is select * from user_tab_columns t 
      r_tab user_tab_columns%rowtype;
      v_cell varchar2(100);
      sql_str varchar2(1000);
      data_length number;
    begin
      open c_tab;
      loop
        fetch c_tab into r_tab;
        exit when c_tab%notfound;
        v_cell:='';
        data_length:=trunc(r_tab.data_length/2,0);
        sql_str:='select max('||r_tab.column_name||') from '||r_tab.table_name;
        dbms_output.put_line('sql_str: '||sql_str);
        execute immediate sql_str into v_cell;
        commit;
        dbms_output.put_line('value: '||v_cell);
        dbms_output.put_line('table name: '||r_tab.table_name||' column name: '||r_tab.column_name||' length: '||r_tab.data_length);
        --1. 修改原字段名  
        sql_str:='alter table '||r_tab.table_name||' rename column '||r_tab.column_name||' to temp_column';
        dbms_output.put_line('sql_str: '||sql_str);
        execute immediate sql_str;
        commit;
        --2. 添加一个和原字段同名的字段
        sql_str:='ALTER TABLE '||r_tab.table_name||' ADD '||r_tab.column_name||' VARCHAR2('||data_length||')';
        dbms_output.put_line('sql_str: '||sql_str);
        execute immediate sql_str;
        commit;
        --3. 将原来的数据更新到新字段中,这是要注意,一定要显示进行数据类型转换
        sql_str:='UPDATE '||r_tab.table_name||' SET '||r_tab.column_name||' = CAST(temp_column AS VARCHAR2('||data_length||'))';
        dbms_output.put_line('sql_str: '||sql_str);
        execute immediate sql_str;
        commit;
        --4. 删除原来的备份字段
        sql_str:='ALTER TABLE '||r_tab.table_name||' DROP COLUMN temp_column';
        dbms_output.put_line('sql_str: '||sql_str);
        execute immediate sql_str;
        commit;
      end loop;
      close c_tab;
    end;

    注:根据自己需求适当调整即可。

  • 相关阅读:
    HandlerThread
    handler原理
    死锁简析
    Android序列化
    AsyncTask原理
    【java线程池】
    java创建线程的三种方式
    service相关
    【hashMap】详谈
    【activity任务栈】浅析
  • 原文地址:https://www.cnblogs.com/xsdty/p/10825571.html
Copyright © 2020-2023  润新知