External tables

Валисий
Дата: 08.12.2012 01:23:25
Всем доброго времени суток
Пытаюсь сделать загрузку данных в таблицу из файла:

CREATE TABLE data_load
    (ID_DETECTOR      VARCHAR2(5),
     VR             NUMBER(6,3),
     DATA             NUMBER(6,3)
    )
  ORGANIZATION EXTERNAL
    (type oracle_loader
     DEFAULT DIRECTORY newDir
     ACCESS PARAMETERS
       (
        RECORDS DELIMITED BY NEWLINE
        FIELDS 
               (ID_DETECTOR      CHAR(5),
                VR             oracle_number(6,3),
                DATA             oracle_number(6,3)
               )
       )
     LOCATION ('data.txt')
    )


Таблица создается без проблем, а вот с загрузкой данных беда: выдается несколько ошибок:
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 "(": expecting one of: "comma, counted, defaultif, nullif, )"
KUP-01007: at line 4 column 45


Если кто с подобным сталкивался, посоветуйте пожалуйста что делать. Я так понял, нашлась лишняя открывающая скобка, но там вроде все скобки при деле, лишних нет.
suPPLer
Дата: 08.12.2012 02:56:15
Валисий,

RTFM datatype_spec Clause, да и вообще всю главу Oracle® Database Utilities: 14 The ORACLE_LOADER Access Driver.

Тип ORACLE_NUMBER записывается по-другому и обозначает 22-ухбайтовое число в формате Oracle. Мне кажется, Вы хотите совсем не этого. Подойдёт и просто:

         FIELDS 
               (ID_DETECTOR      CHAR(5),
                VR               CHAR(7),
                DATA             CHAR(7)
               )
Валисий
Дата: 08.12.2012 03:04:50
suPPLer,

Спасибо за ответ, читаю. Замена помогла, только теперь другая ошибка:
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-04040: file data.dat in NEWDIR not found


Я добавил привилегии на чтение, запись в директории NEWDIR, и все равно такое вот высвечивается.
Валисий
Дата: 08.12.2012 14:33:26
Поправка:
Скорее всего, что то не то с директорией творится. В общем, я создал директорию через SQL Commands командой:
create directory NEW_DIR as 'C:\oraclexe\app\oracle\product\11.2.0\server';
То есть прописал полный путь в файловой системе. Есди не ошибаюсь, Apex сам директорию в файловой системе не создаст, посему создал директорию NEW_DIR в файловой системе, путь к ней следующий: C:\oraclexe\app\oracle\product\11.2.0\server
Затем создал в этой директории (через файловую систему) текстовый файл с данными, которые хочу залить в таблицу. Теперь у меня ошибка, указанная в предыдущем посте, а в папке NEW_DIR после каждой попытки создать таблицу генерируется файл с описанием ошибки. В чем ошибка?
Валисий
Дата: 08.12.2012 18:48:33
Такую проблему решил весьма необычным способом (возможно, сродни удалению гланд через задний проход)...
В директории (newdir), где хранятся файлы .dat, создавал еще одну директорию, к примеру, load (командой create directory через sql commands, а потом в файловой системе как обычную папку), и при создании внешней таблицы в default directory указал созданную директорию load. И вроде бы заработало... теперь вот ужасно интересно, а почему так работает...

Модератор: Тема перенесена из форума "Oracle APEX".