我以feed的形式从erp系统获取数据,特别是feed中的一列长度仅为15.
在目标表中也对应列也是长度varchar2(15)
但是当我尝试将其加载到db时它显示错误如:
ORA-12899:列emp_name的值太大(实际:16,最大值:15)
我不能增加列长度,因为它是生产中的基表.
像这样的问题的通常原因是非ASCII字符,可以在原始数据库中用一个字节表示,但在目标数据库中需要两个(或更多)字节(由于不同的NLS设置).
要确保目标列足够大,可以容纳15个字符,可以对其进行修改:
ALTER TABLE table_name MODIFY column_name VARCHAR2(15 CHAR)
Run Code Online (Sandbox Code Playgroud)
(注意15 CHAR
- 您也可以使用BYTE
;如果两者都不存在,则数据库使用NLS_LENGTH_SEMANTICS设置作为默认值).
要检查哪些值大于15个字节,您可以
15 CHAR
找到有问题的行
SELECT*FROM staging WHERE lengthb(mycol)> 15
(注意使用LENGTHB
as附加LENGTH
- 前者以字节为单位返回长度,而后者以字符为单位返回长度)
小智 6
看看这个博客,通过将列数据类型从varchar(100)更改为varchar(100 char)为我解决了这个问题。在我的情况下,数据包含一些变音符号。
http://gerardnico.com/wiki/database/oracle/byte_or_character
归档时间: |
|
查看次数: |
69057 次 |
最近记录: |