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