首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ORA-12899:值太大,不能导出/导入列,这两种字节语义,而不是CHAR。

ORA-12899:值太大,不能导出/导入列,这两种字节语义,而不是CHAR。
EN

Stack Overflow用户
提问于 2018-02-14 12:30:55
回答 1查看 2.2K关注 0票数 0

我在一台Windows机器上有一个Oracle DB,并使用4.0.2.15执行所有表+内容的导出。文件格式为纯文本SQL,ANSI ISO-8859-1.行尾以UNIX样式(1字节)完成。表/列定义如下:

代码语言:javascript
运行
复制
"PRODUCTNAME" VARCHAR2(120 BYTE),

当我在目标Windows机器上执行此.sql文件时,将创建表并完成插入。但是,一些在PRODUCTNAME中有确切120个字节的项(包括1行提要字符)无法在目标机器上插入。我得到:

ORA-12899:值太大,不适合列"DBNAME"."TABLENAME"."PRODUCTNAME“(实际值: 121,最大值: 120)

我不明白为什么。我在这个字符串中没有2字节字符,导出肯定是使用0x0A作为换行字符(通过Notepad++状态行及其HexView插件进行检查)。我使用拖放打开目标机器的(相同版本)中的.sql文件。当我通过剪贴板将产品名及其行中断复制到Notepad++时,它会计算120个字节的长度。

我不明白,为什么在Oracle开发人员中脚本计算了这一个额外的字符。

我在google上搜索过这个,并在上面找到了一些主题,但是它们对我没有帮助,或者我不完全理解它们。

我错过了什么?请帮帮我!

EN

回答 1

Stack Overflow用户

发布于 2018-02-14 12:52:51

创建一个具有PRODUCTNAME VARCHAR2(200)的临时表(例如,测试)。将数据导入其中。检查超过120个字符的行。

您可能需要使用DUMP函数,如

代码语言:javascript
运行
复制
select dump(productname) from test

它将显示存储在该列中的数据的实际长度。例如:

代码语言:javascript
运行
复制
SQL> select ename, dump(ename) dump_e from emp where rownum = 1;

ENAME      DUMP_E
---------- ----------------------------------------
KING       Typ=1 Len=4: 75,73,78,71
                 -----
                 this!

SQL>

编辑: TRIM示例

代码语言:javascript
运行
复制
SQL> with test (id, col) as
  2    (select 1, 'abc'    from dual union
  3     select 2, 'def '   from dual union
  4     select 3, ' ghi  ' from dual
  5    )
  6  select '#' || col       || '#' col,
  7         '#' || trim(col) || '#' new_col
  8  from test
  9  order by id;

COL      NEW_COL
-------- --------
#abc#    #abc#
#def #   #def#
# ghi  # #ghi#

SQL>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48787297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档