ORA-29275:部分多字节字符

Platform:
OS:Windows Server 2012 R2 64bit
Oracle:11.2 64bit

引子:
在对医院的审计中,对表inpadm.pats_in_hospital。遇到了这个问题,经查找资料发现这是由于在导入数据时,本机字符集与数据来源机的字符集不相同造成的,在现在知识下没有变换字符的达到解决问题的方法-_-!因些只能采用变通的方法来解决。解决的思路是先查看表内容,观察是哪一个字段出现问题,然后再对该字段进行TO_NCHAR(或者TO_SINGLE_BYTE)操作,由于该表的字段较多(27个),因些还要用到EXCEL进行辅助操作。

步骤:
1、查看本机字符集,发现本机字符集与数据源机字符不同

SELECT  * FROM  nls_database_parameters ;

2、使用网上的办法修改本机字符依然出现ORA-29275错误,无解……(不知道是不是因为中文标点符号的问题,因为使用TO_SINGLE_BYTE也可以解决这个问题)

3、改变思路,先查看一下是哪个字段有问题,发现字段DIAGNOSIS是VARCHAR类型,且汉字字符串较长,可能是这个字段出现了问题

SELECT * 
  FROM inpadm.pats_in_hospital
 WHERE rownum < 2 ;

4、使用数据字段,选出该表的字段名。

SELECT column_name
  FROM all_tab_columns 
 WHERE table_name = 'pats_in_hospital' ;

5、将以上所有字段名粘贴到EXCEL中,找到DIAGNOSIS改为TO_NACHAR(DIAGNOSIS),再将查询语句Copy回到toad中执行。就显示出了该表的全部内容。

SELECT  patient_id,
        visit_id,
        ward_code,
        dept_code,
        bed_no,
        admission_date_time,
        adm_ward_date_time,
        TO_SINGLE_BYTE (diagnosis),
        patient_condition,
        nursing_class,
        doctor_in_charge,
        operating_date,
        billing_date_time,
        prepayments,
        total_costs,
        total_charges,
        guarantor,
        guarantor_org,
        guarantor_phone_num,
        bill_checked_date_time,
        settled_indicator,
        lend_bed_no,
        bed_dept_code,
        bed_ward_code,
        dept_code_lend,
        lend_indicator,
        is_newborn
  FROM  inpadm.pats_in_hospital
 WHERE  EXTRACT (YEAR FROM admission_date_time) = 2014;

END

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值