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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐