0

我正在使用 SQL*Loader 加载数据,在制作控制文件时,我使用了表定义并且不小心将 INTEGER 数据类型留在了“版本”行上。

并在“版本”字段(数据类型整数)中插入值 808594481。

我很难理解它是如何处理这个值的——我假设它把它当作文字......但这是每个字母的 ASCII 表示的总和吗?

不!

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

返回 666(顺便说一句,这很有趣)。

连接ascii值?

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,x@gmail.com,x@gmail.com,"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,x7@gmail.com,x7@gmail.com,"JUVI Eastern Redcedar,Sapling","",45
4

1 回答 1

0

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

于 2014-09-26T15:58:07.467 回答