1.所有的表中字符的地方我都用的nvarchar2
2.我想替换成varchar2有没有一种方式能够一起把nvarchar2变为varchar2
我建立了50个表,如果要是一个个改太麻烦了.

解决方案 »

  1.   

    从表定义里查出所有的字段,批量执行ALTER
      

  2.   

    SELECT 'alter table ' || XX.TABLE_NAME || '  modify' || XX.COLUMN_NAME ||
           '  nvarchar2(10);'
      FROM DBA_TAB_COLUMNS XX
     WHERE OWNER = 'ZFTANG'
       AND DATA_TYPE = 'NVARCHAR2'
      

  3.   

    SELECT 'alter table ' || XX.TABLE_NAME || '  modify' || XX.COLUMN_NAME ||
           '  nvarchar2('||XX.DATA_LENGTH ||');'
      FROM DBA_TAB_COLUMNS XX
     WHERE OWNER = 'ZFTANG'
       AND DATA_TYPE = 'NVARCHAR2'
      

  4.   

    我在pl/sql中建立的所有表都用nvarchar2我想改为varchar2怎么改??
      

  5.   

    由于varchar2与nvarchar2并不兼容,所以如果要修改类型,该列不能存在数据。
    如果没有数据,可以查询字典表来生成修改脚本,如:
    SELECT 'alter table ' || table_name || ' modify (' || t.COLUMN_NAME ||
           ' varchar2(' || t.CHAR_LENGTH || '));'
      FROM user_tab_columns t
     WHERE t.DATA_TYPE = 'NVARCHAR2';
      

  6.   

    declare
    begin
        for c in (select *
                    from user_tab_columns t1
                   where t1.DATA_TYPE = 'NVARCHAR2'
                 ) loop
            execute immediate  'alter table ' || c.table_name || ' add g_w_' || c.column_name || ' varchar2(' || c.char_length || ')'; 
            execute immediate  'update ' || c.table_name || ' set g_w_' || c.column_name || ' = ' || c.column_name;
            execute immediate  'update ' || c.table_name || ' set ' || c.column_name || ' = null';
            execute immediate  'alter table ' || c.table_name || ' modify ' || c.column_name || ' varchar2(' || c.char_length || ')';
            execute immediate  'update ' || c.table_name || ' set ' || c.column_name || ' = g_w_' || c.column_name;
            execute immediate  'alter table ' || c.table_name || ' drop column g_w_' || c.column_name;
        end loop;
    end; 
      

  7.   

    如果你有建表脚本的话,可以把现有的表(drop)删除掉,用uedit32工具,将nvarchar2全部替换成varchar2类型的,在重新建表,就可以了。---此方法只限于少量表,个人觉得挺简单的。
    当然,我引用的方法更加合理些。