2016-08-01 4 views
1

Я пытаюсь загрузить данные из внешней таблицы из файла csv. Ниже мой фрагмент:Невозможно загрузить данные с помощью внешней таблицы

create table emp_ext 
(
eid number,ename char(9) 
) 
organization external 
(
TYPE ORACLE_LOADER 
DEFAULT DIRECTORY test 
ACCESS PARAMETERS 
     (
     RECORDS DELIMITED BY NEWLINE 
     FIELDS TERMINATED BY ',' 
     (
     eid number, 
     ename char(9) 
     ) 

     ) 
     LOCATION('C:\Users\99002971\Desktop\empf.csv') 
) 

create directory test as 'C:\Users\99002971\Desktop' 
grant read on directory test to matuat35 // granted using another user 

Когда я делаю выберите * из emp_ext, я получаю следующие ошибки:

ORA-29913:Error in executing ODCIEXTTABLEOPEN callout 
ORA-29400:data cartridge error 
KUP-00554:error encountered while parsing access parameters 
KUP-01005:syntax error:found ""identifier:expecting one of :"binary_float,binary_double,comma,char,date,double" 
KUP-01008:the bad identifier was double 
KUP-01007:at line 4 column 12 

Пожалуйста, помогите

+0

Место должно быть просто имя файла внутри каталога, а не полный путь, поэтому просто '' empf.csv''. Означает ли это ту же ошибку, когда это исправлено? –

+0

я сделал это раньше, я получил ORA-29913: Ошибка при выполнении ODCIEXTTABLEOPEN выноски ORA-29400: Данные об ошибке картриджа КУП-00554: ошибка во время разбора параметров доступа КУП-01005: ошибка синтаксиса: найдено «ошибка»: ожидая одного из: «столбец, заключенный, (, ltrim, lrtrim, notrim, опционально, отбраковать» KUP-01007: в строке 3 столбец 10 KUP-0031: сообщение 31 не найдено; product = RDBMS; объект = KUP –

+0

i 'v сомнения, при создании объекта каталога oracle позволяет вам выбрать путь, где я выбрал «C: \ Users \ 99002971 \ Desktop», который находится на моем локальном компьютере. На самом деле он не создает там директорию. –

ответ

2

datatype_spec section of the external table documenation показывает, что number это не распознается загрузчик. В вашем коде, который рассматривается как идентификатор, а не тип данных, следовательно, ошибка.

Вы можете использовать oracle_number или unsigned integer, так как это, по-видимому, всегда будет положительным целым числом для идентификатора сотрудника; или оставить его нетипизированным и разрешить неявное преобразование в тип столбца таблицы.

Ваш location также должен указать только имя файла в каталоге, а не полный путь:

create table emp_ext 
(
eid number,ename varchar2(15) 
) 
organization external 
(
TYPE ORACLE_LOADER 
DEFAULT DIRECTORY test 
ACCESS PARAMETERS 
     (
     RECORDS DELIMITED BY NEWLINE 
     FIELDS TERMINATED BY ',' 
     (
     eid unsigned integer external(9), 
     ename char(15) 
     ) 

     ) 
     LOCATION('empf.csv') 
) 

Или более просто, но полагаться на неявное преобразование:

... 
ACCESS PARAMETERS 
     (
     RECORDS DELIMITED BY NEWLINE 
     FIELDS TERMINATED BY ',' 
     (
     eid, 
     ename char(15) rteim 
     ) 

     ) 
     LOCATION('empf.csv') 
) 
+0

пытался как для oracle_number - столбец типа не поддерживается на внешних организованной таблице для целого числа без знака, я использовал создать таблицу emp_ext ( Ид целое число без знака, ENAME VARCHAR2 (15) ) ошибок отсутствует правая скобка –

+0

Посмотрите на код, который я опубликовал; Я только изменил тип данных в разделе «поля» параметров доступа, * не * в списке столбцов таблицы. (Хотя изменение таблицы 'char' на' varchar2', вероятно, хорошая идея). –

+0

Я изменил код для организации внешних ( УМОЛЧАНИЮ тестов КАТАЛОГ доступ к параметрам ( ЗАПИСИ, разграниченных NEWLINE ПОЛЯ, заканчивающуюся '' ( Ид целое число без знака, ENAME символ (15) )) МЕСТОПОЛОЖЕНИЕ ('empf.csv') ) Теперь я получил: ORA-29913: ошибка при выполнении ODCIEXTTABLEOPEN выноска ORA-29400: данные об ошибке картриджа КУП-00554: ошибка во время разбора параметров доступа КУП-01005: синтаксическая ошибка: найден «минус»: ожидается один из «столбцов» KUP-01007 в строке 7, столбец 9 –

 Смежные вопросы

  • Нет связанных вопросов^_^