您的位置:首页 > 数据库 > Oracle

ORA-29275:部分多字节字符

2015-09-29 16:20 716 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle