暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle SQLPlus复制命令正在将表字符转换为字节

ASKTOM 2019-07-29
310

问题描述

在表中,使用Oracle copy命令复制数据时,将1个字符转换为4个字节。
同时插入回1 Char列面临问题作为列值太长。



SQL> DESC DDD1;
名称为空?类型
-
ROW_ID不为空VARCHAR2(15个字符)
PRIV_FLG非空字符 (1个字符)

SQL> 复制到用户/通过 @ DB使用从DDD1中选择 * 创建DDD12;

数组获取/绑定大小为15。(排列大小为15)
完成后会提交。(复制为0)
最大长度为80。(长为80)
已创建表DDD12。

5036从默认主机连接中选择的行。
5036行插入ddd12。
在USER/PASS @ DB处提交到DDD12的5036行。

SQL> DESC DDD12;
名称为空?类型
-
ROW_ID不是空VARCHAR2(60)
PRIV_FLG非空字符 (4)


SQL> 使用从DDD12中选择 * 复制到用户/通过 @ db插入DDD1;

数组获取/绑定大小为15。(排列大小为15)
完成后会提交。(复制为0)
最大长度为80。(长为80)

错误:
ORA-12899: 对于列 “R4EIMUSER” 而言,值太大。“DDD1”。“PRIV_FLG” (实际: 4,
最大值: 1)




专家解答

从文档中:

"12.16 COPY
The COPY command is not being enhanced to handle datatypes or features introduced with, or after Oracle8i. The COPY command is likely to be deprecated in a future release."


所以它不会处理更新的语法等。解决方法,因为我相信你已经发现的是预重表。另一个选项是使用SQLCL:

SQL> COPY TO xxxxxx/xxxxxxx@db18_pdb1 CREATE t1 USING SELECT * FROM t;
Array fetch/bind size is 15 (less if there are longs or blobs). (arraysize is 15)
Will commit when done. (copycommit is 0)
Maximum long size is 80. (long is 80)
Table T1 created.
    1 rows selected from DEFAULT HOST connection.
    1 rows inserted into T1.
    1 rows committed into T1 at xxxxxx@db18_pdb1.
SQL> desc t1
Name Null? Type
---- ----- -----------------
X          VARCHAR2(15 CHAR)
复制


文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论