Oracle SQL sqlldr неправильно импортирует - PullRequest
0 голосов
/ 25 марта 2012
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)

файл данных:

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

и контрольный файл sqlldr:

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

Выдержка из журнала ошибок:

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

Я не уверен, что не так с моим SQL, но я предполагаю, что это из-за записи FROM?

1 Ответ

2 голосов
/ 25 марта 2012

Во-первых, вызывать столбцы from и to - это плохая идея, это ключевые слова.Что-то вроде origin и destination может быть лучше ...

Во-вторых, float, это действительно не нужно.Вероятность того, что вам понадобится цена до 63 знаков после запятой, невелика.Что-то вроде number(18,2) должно быть более чем достаточно (на самом деле смешно), но если вы хотите абсолютное максимальное использование number(38,2).

Моим последним пунктом предварительного ответа является ваш файл данных.Если это вообще возможно, попросите вашего поставщика изменить это.Файл с разделителями-запятыми просто напрашивается на неприятности ... слишком много способов, чтобы запятая была в данных.Если вы можете использовать его с разделителями | или ¬, лучше, поскольку они вряд ли когда-либо используются в тексте.

В зависимости от вашего NLS_PARAMETERS, нет никакой гарантии, что дата в файле будет измененав дату, которая вам нужна в вашей таблице.Лучше явно указать это при входе в базу данных следующим образом:

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
    )

Обратите внимание, что я также изменил PRICE на десятичную дробь, если вы посмотрите на свой файл журнала, все предположительно является символом, что означает, что вы делаете неявное преобразование, которое не может быть гарантировано.

Почему вы получили конкретное сообщение об ошибке?Я на самом деле не знаю.Я также подозреваю, что это потому что у вас есть столбец с именем FROM.Согласно документации для управляющего файла нет ключевого слова SQL * Loader from, поэтому я могу только утверждать, что это какая-то проблема с взаимодействием SQL * Loader с Oracle.

Вот еще другоехороший ресурс по синтаксису .

...