zoukankan      html  css  js  c++  java
  • 【转】 oracle不同字符集导入导出(GBK导入UTF8)

    oracle不同字符集导入导出(GBK导入UTF8)

    转自: https://www.cnblogs.com/huangen88/p/4664759.html

    因数据库迁移,需要将原oracle备份文件导入新的oracle数据库中,EXP导出后,IMP报错,发现字符串长度太长报错。查找后发现,原数据库为GBK字符集(oracle在varchar2类型中一个汉字占用两位),新数据库为UTF8字符集(一个汉子占用三位)。

    解决方法如下,将原数据库所有含varchar2的字段的长度批量修改。

    修改分为两步,varchar2最长支持4000的长度,若carchar2长度存在超过2667(4000*2/3)的,可修改为CLOB类型,或者验证字段中最长的使用长度,若低于2667,调整为4000即可。

    批量修改方法如下:

    create or replace procedure p_test as

    CURSOR TEMP IS
    SELECT TABLE_NAME, COLUMN_NAME, ceil(DATA_LENGTH*3/2) DATA_LENGTH
    FROM USER_TAB_COLUMNS
    WHERE DATA_TYPE = 'VARCHAR2'
    and DATA_LENGTH < 2000;
    STR VARCHAR2(100) := '';
    BEGIN
    FOR S IN TEMP LOOP
    STR := 'ALTER TABLE ' || S.TABLE_NAME || ' MODIFY(' || S.COLUMN_NAME ||
    ' VARCHAR2(' || DATA_LENGTH || '))';
    DBMS_OUTPUT.PUT_LINE(STR);
    EXECUTE IMMEDIATE STR;

    END LOOP;
    END;

    注意:若存在字段的函数索引,批量修改会报错需将函数索引删除,才可执行。

    最后,导出dmp,然后IMP导入即可。

  • 相关阅读:
    OpenCV--图像特征(harris角点检测)
    pycharm处理命令行参数
    OpenCV--文档扫描OCR识别
    OpenCV--信用卡数字识别
    OpenCV--傅里叶变换
    OpenCV--直方图
    OpenCV--模板匹配
    OpenCV--图像轮廓
    OpenCV--图像金字塔
    51Nod-1288 汽油补给 ST表 贪心 模拟
  • 原文地址:https://www.cnblogs.com/fengaix6/p/8562840.html
Copyright © 2011-2022 走看看