数据库中所有 narchar2字段怎样都改byte 为char

解决方案 »

  1.   

    写存储过程:
    --1: 用下面语句找到所有的VARCHAR2字段并用一个CURSOR储存:
    SELECT OWNER, TABLE_NAME, COLUMN_NAME, DATA_LENGTH
      FROM ALL_TAB_COLUMNS
     WHERE DATA_TYPE = UPPER('VARCHAR2');--2: 遍历CURSOR循环动态执行ALTER COLUMN类型语句:
    EXECUTE IMMEDIATE 'ALTER TABLE '||CURSOR.OWNER||'.'||CURSOR.TABLE_NAME||' MODIFY ('||CURSOR.COLUMN_NAME||' CHAR('||CURSOR.DATA_LENGTH||'))';
      

  2.   

    按用户修改数据类型,如修改SCOTT用户的SELECT 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' MODIFY ('||COLUMN_NAME||' CHAR('||
    DATA_LENGTH||'));' col
    FROM all_tab_columns
    WHERE owner='SCOTT' AND data_type=upper('VARCHAR2');
    查询后:
    ----------------------------------------------------
    ALTER TABLE SCOTT.BONUS MODIFY (ENAME CHAR(10));
    ALTER TABLE SCOTT.BONUS MODIFY (JOB CHAR(9));
    ALTER TABLE SCOTT.DEPT MODIFY (DNAME CHAR(14));
    ALTER TABLE SCOTT.DEPT MODIFY (LOC CHAR(13));
    ALTER TABLE SCOTT.EMP MODIFY (ENAME CHAR(10));
    ALTER TABLE SCOTT.EMP MODIFY (JOB CHAR(9));再把上面的脚本运行一下就可以了
      

  3.   


    我理解,楼主是想要这样的sql:
    alter table scott.bonus modify(ename varchar2(10 char)); 
    而oracle默认是:
    varchar2(10 byte);
      

  4.   

    大家都顶你
    那给分了昨天已经搞定 笨办法
    把建表脚本给改了哈然后先drop掉了表再重新建立了哈