2014-09-26 30 views
0

我正在使用SQL * Loader加载数据,并且在制作控制文件时,我使用了表格定义,并且意外地将INTEGER数据类型留在了“版本”行上。为什么SQL * Loader在使用INTEGER数据类型时加载808594481?

并在“版本”字段(数据类型为整数),它插入808594481.

我有一个很难理解它是如何处理该值的价值 - 我假设它就把它作为文字...但是每个字母的ASCII表示的总和?

NOPE!

SELECT ASCII('I')+ascii('N')+ASCII('T')+ASCII('E')+ASCII('G')+ASCII('E')+ASCII('G')+ASCII('E')+ASCII('R') 
    FROM SYS.DUAL 

返回666(其中,btw很搞笑)。

concatenate ascii values?

SELECT ASCII('I')||ascii('N')||ASCII('T')||ASCII('E')||ASCII('G')||ASCII('E')||ASCII('G')||ASCII('E')||ASCII('R') 
    FROM SYS.DUAL 

回报737884697169716982

我希望有人在那里知道答案。

这是实际的控制文件:

OPTIONS (SKIP=1) 
LOAD DATA 
APPEND into table THETABLE 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
(id , 
parent_id , 
record_id , 
version INTEGER, 
created_at , 
updated_at , 
created_by , 
updated_by , 
species_and_cohort , 
species_and_cohort_count) 

表DDL:

create table THETABLE 
(
    id    VARCHAR2(36), 
    parent_id  VARCHAR2(36), 
    record_id  VARCHAR2(36), 
    version     INTEGER, 
    created_at    VARCHAR2(25), 
    updated_at    VARCHAR2(25), 
    created_by    VARCHAR2(50), 
    updated_by    VARCHAR2(50), 
    species_and_cohort  VARCHAR2(150), 
    species_and_cohort_other VARCHAR2(150), 
    species_and_cohort_count NUMBER 
) 

数据:

id,parent_id,record_id,version,created_at,updated_at,created_by,updated_by,species_and_cohort,species_and_cohort_other,species_and_cohort_count 
60D90F54-C5F2-47AF-951B-27A424EAE8E3,f9fe8a3b-3470-4caf-b0ba-3682a1c79731,f9fe8a3b-3470-4caf-b0ba-3682a1c79731,1,2014-09-23 21:02:54 UTC,2014-09-23 21:02:54 UTC,[email protected],[email protected],"PRCA Cherrylaurel,Sapling","",5 
FC6A2120-AA0B-4238-A2F6-A6AEDD9B8202,f9fe8a3b-3470-4caf-b0ba-3682a1c79731,f9fe8a3b-3470-4caf-b0ba-3682a1c79731,1,2014-09-23 21:03:02 UTC,2014-09-23 21:03:02 UTC,[email protected],[email protected],"JUVI Eastern Redcedar,Sapling","",45 
+0

你插入的数据是什么以及表的DDL是什么(所以我们可以试试)? – Ben 2014-09-26 15:50:06

+0

完成。感谢您的建议。 – 2014-09-26 18:13:44

回答

0

如果拆分808594481成字节,因为它会在被编码32位二进制补码编码,并将每个字节视为ASCII编码字符,则会得到“02,1”或“1,20”d依赖于字节顺序。您可能插入了一个以其中一个开头或结尾的字符串,并且您的代码和数据库之间的某个层将其默认转换为整数。

+0

.csv文件中的值为“1” – 2014-09-26 18:14:38

+0

我认为答案是INTEGER这个词以这种方式编码......远远超出正常工作日的范围,我不能接受。谢谢。 – 2014-09-26 18:56:57

+0

我看到序列“1,2014-09-23 21:02:54 UTC”在您的数据中。你确定逗号分割是按照你的意图工作吗? – recursive 2014-09-26 19:31:39

相关问题