Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL sqlldr未正确导入_Sql_Oracle_Sql Loader - Fatal编程技术网

Oracle SQL sqlldr未正确导入

Oracle SQL sqlldr未正确导入,sql,oracle,sql-loader,Sql,Oracle,Sql Loader,数据文件: SQL> desc FLIGHTS; Name Null? Type ----------------------------------------- -------- ---------------------------- FLNO NUMBER(38) FROM

数据文件:

SQL> desc FLIGHTS;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 FLNO                                               NUMBER(38)
 FROM                                               VARCHAR2(64)
 TO                                                 VARCHAR2(64)
 DISTANCE                                           NUMBER(38)
 DEPARTS                                            DATE
 ARRIVES                                            DATE
 PRICE                                              FLOAT(63)
和sqlldr控制文件:

99,Los Angeles,Washington D.C.,2308,2005/04/12 09:30,2005/04/12 21:40,235.98
13,Los Angeles,Chicago,1749,2005/04/12 08:45,2005/04/12 20:45,220.98
346,Los Angeles,Dallas,1251,2005/04/12 11:50,2005/04/12 19:05,225.43
387,Los Angeles,Boston,2606,2005/04/12 07:03,2005/04/12 17:03,261.56
错误日志中的exerpt:

LOAD DATA INFILE 'flights.txt' 
 INTO TABLE Flights 
  FIELDS TERMINATED BY "," 
  ( FLNO
  , FROM
  , TO
  , DISTANCE
  , DEPARTS
  , ARRIVES
  , PRICE)

我不确定我的SQL有什么问题,但我假设这是因为
FROM
条目?

首先,将
FROM
列调用
是个坏主意,它们是关键字。像
origin
destination
这样的东西可能更好

其次,
float
,这真的不需要。你需要一个精确到小数点后63位的价格的可能性很小。像
number(18,2)
这样的东西应该足够了(事实上很荒谬),但是如果你想绝对最大限度地使用
number(38,2)

我最后一个预先回答的问题是你的数据文件。如果可能的话,让您的供应商改变这一点。逗号分隔的文件只是自找麻烦。。。在数据中使用逗号的方式太多了。如果你能用
|
分隔,那就更好了,因为它们很少在文本中使用

根据您的
NLS_参数
,无法保证文件中的日期会更改为表中所需的日期。最好在进入数据库时明确指定如下内容:

Table FLIGHTS, loaded from every logical record.
Insert option in effect for this table: INSERT

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
FLNO                                FIRST     *   ,       CHARACTER            
FROM                                 NEXT     *   ,       CHARACTER            
TO                                   NEXT     *   ,       CHARACTER            
DISTANCE                             NEXT     *   ,       CHARACTER            
DEPARTS                              NEXT     *   ,       CHARACTER            
ARRIVES                              NEXT     *   ,       CHARACTER            
PRICE                                NEXT     *   ,       CHARACTER            

Record 1: Rejected - Error on table FLIGHTS, column FROM.
ORA-01747: invalid user.table.column, table.column, or column specification
请注意,我还将
PRICE
更改为十进制,如果您查看日志文件,所有内容都应该是字符,这意味着您正在进行隐式转换,这可能无法保证

为什么会收到特定的错误消息?我真的不知道。我还怀疑这是因为你在中有一个名为
的专栏。根据
中没有SQL*加载器关键字
,因此我只能推测这是SQL*加载器与Oracle的通信有问题

给你

LOAD DATA 
 INFILE 'flights.txt' 
 INTO TABLE Flights 
  FIELDS TERMINATED BY "," 
  ( FLNO
  , FROM
  , TO
  , DISTANCE
  , DEPARTS "to_date(:departs,'yyyy/mm/dd hh24:mi')"
  , ARRIVES "to_date(:arrives,'yyyy/mm/dd hh24:mi')"
  , PRICE DECIMAL EXTERNAL
    )