在使用SQL Loader加载小型表时,我遇到以下问题,我的过程填充了一个字段,该字段可以填充正数或负十进制数,问题是当数为正数时,该过程以2个位置取整,但如果为负数,则仅使用1个位置。我需要2个位置,这是简单的代码:
UNRECOVERABLE LOAD DATA
TRUNCATE
INTO TABLE [SCHEMA].TABLE1
FIELDS TERMINATED BY '|'
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
FIELD1 "trim(:FIELD1 )"
)
示例:
Source: 12345,78 Target: 1234,78
Source: -12345,78 Target: -1234,8
Edit1:它只是发生在具有7个或更多整数长度(X <-1000000)的数字上,但是我可以使用常规插入而不是SQLLoader插入这个数字。
Edit2:我注意到sql * loader没问题,因为.ctl已经错误。此文件是使用具有以下属性的python和SQL生成的:
set colsep |
set headsep off
set pagesize 0
set trimspool on
set linesize 10000
set termout off
set feedback off
set arraysize 250
但是我不知道在哪里定义每个字段的长度,这看起来是错误的。
答案 0 :(得分:0)
我要说你看起来不正确。数据可能存储正确,但是您看不到它。这是一个示例:
SQL> create table test (field1 number);
Table created.
SQL>
控制文件:
load data
infile *
replace into table test
fields terminated by '|' trailing nullcols
(
field1
)
begindata
12345,78
-12345,78
987654321
-987654321
987654321,01234
-987654321,01234
111333444,887766
-112333444,887766
加载会话和结果:
SQL> $sqlldr scott/tiger@orcl control=test26.ctl log=test26.log
SQL*Loader: Release 11.2.0.2.0 - Production on Uto Kol 21 08:52:10 2018
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 7
Commit point reached - logical record count 8
SQL> select * from test;
FIELD1
----------
12345,78
-12345,78
987654321
-987654321
987654321
-987654321
111333445
-112333445
8 rows selected.
SQL>
糟糕!似乎是错误的,是吗?但是,如果您修复列格式...
SQL> col field1 format 999g999g999g990d000000
SQL> select * from test;
FIELD1
-----------------------
12.345,780000
-12.345,780000
987.654.321,000000
-987.654.321,000000
987.654.321,012340
-987.654.321,012340
111.333.444,887766
-112.333.444,887766
8 rows selected.
SQL>
看到了吗?一切都在这里。
我猜想,如果您使用GUI,就不会有这样的问题。相反,前一句话并不意味着您不应该使用SQL * Plus。只是...学习如何正确使用它:)
[阅读评论后,编辑]
您可能正在寻找SET NUMFORMAT
:
SQL> select -12334.789123 from dual;
-12334.789123
-------------
-12334,789
SQL> set numformat 999g999g990d000000
SQL> select -12334.789123 from dual;
-12334.789123
-------------------
-12.334,789123
SQL>