Я пытаюсь загрузить данные в мою таблицу оракула с помощью загрузчика SQL - PullRequest
0 голосов
/ 23 мая 2018

Это моя таблица ... она имеет Number в качестве имени столбца

CREATE TABLE pwc_it_service (
  "SEQ"                  NUMBER,
  "NUMBER"               VARCHAR2(10),
  "CI_NAME"              VARCHAR2(200),
  "CI_CLASS"             VARCHAR2(200),
  "OWNED_BY_PRIMARY"     VARCHAR2(200),
  "OWNED_BY_SECONDARY"   VARCHAR2(200),
  "MANAGING_TERRITORY"   VARCHAR2(200),
  "LOS"                  VARCHAR2(100),
  "BUSINESS_UNIT"        VARCHAR2(100),
  "IMPORTED"             DATE,
  "LAST_UPDATED"         DATE
)

Когда я запускаю мой файл CTL, я получаю следующую ошибку:

Record 1: Rejected - Error on table PWC_IT_SERVICE, column NUMBER.
ORA-01747: invalid user.table.column, table.column, or column specification

как я могу вставить значения без изменения имени столбца

1 Ответ

0 голосов
/ 23 мая 2018

Было действительно плохой идеей назвать столбец "NUMBER" (да, в двойных кавычках и в верхнем регистре).Тот факт, что вы можете это сделать, не означает, что вы должны это делать.Теперь вам нужно разобраться с этим и все время использовать один и тот же синтаксис - двойные кавычки и прописные буквы.Посмотрите:

SQL> create table test ("NUMBER" varchar2(10));

Table created.

SQL> insert into test (number) values ('A');
insert into test (number) values ('A')
                  *
ERROR at line 1:
ORA-00928: missing SELECT keyword


SQL> insert into test ("number") values ('A');
insert into test ("number") values ('A')
                  *
ERROR at line 1:
ORA-00904: "number": invalid identifier


SQL> insert into test ("NUMBER") values ('A');

1 row created.

SQL>

Сделайте то же самое в контрольном файле.

load data 
infile *
replace
into table test
( 
"NUMBER" terminated by whitespace
)

begindata
Little
Foot

Как это работает?

SQL> desc test
 Name                          Null?    Type
 ----------------------------- -------- --------------------
 NUMBER                                 VARCHAR2(10)

SQL> $sqlldr scott/tiger@xe control=test02.ctl log=test02.log

SQL*Loader: Release 11.2.0.2.0 - Production on Sri Svi 23 22:23:07 2018

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 1
Commit point reached - logical record count 2

SQL> select * From test;

NUMBER
----------
Little
Foot

SQL>

Работает нормально.

Однако я бы посоветовал вам переименовать этот несчастный столбец.Избавьтесь от двойных кавычек, теперь и навсегда.

...