ошибка при попытке создать внешнюю таблицу

Я немного новичок в SQL и пытаюсь создать внешнюю таблицу. Вот SQL, который у меня есть для этого:

CREATE TABLE BACKEND.EXT_DATA_LOAD
(
  CUST_SESSIONID            VARCHAR2(255 BYTE),
  CUST_SESSION_DATE         DATE,
  CUST_ID                   VARCHAR2(10 BYTE),
  CUST_FAV_NUMBER           NUMBER
)
ORGANIZATION EXTERNAL
  (  TYPE ORACLE_LOADER
     DEFAULT DIRECTORY INCOMING_DIR
     ACCESS PARAMETERS 
       (        RECORDS DELIMITED BY NEWLINE
       BADFILE 'custData.bad'
       NODISCARDFILE
       LOGFILE 'custData.log'
       FIELDS TERMINATED BY ','
       OPTIONALLY ENCLOSED BY '"' AND '"'
       MISSING FIELD VALUES ARE NULL
       REJECT ROWS WITH ALL NULL FIELDS
       (
         CUST_SESSIONID             char,
         CUST_SESSION_DATE          char date_format DATE MASK 'dd/mm/yyyy',
         CUST_ID                    char,
         CUST_FAV_NUMBER            char
       ) )
     LOCATION (INCOMING_DIR:'custData.csv')
  )
REJECT LIMIT Unlimited
NOPARALLEL
MONITORING;

ALTER TABLE BACKEND.EXT_DATA_LOAD
 ADD PRIMARY KEY
  (CUST_SESSIONID)
ENABLE VALIDATE;

Я подумал, что, возможно, возникла проблема с наличием CUST_FAV_NUMBER в качестве NUMBER в верхней части, но char в параметрах доступа, но в каждом найденном мной примере он настроен одинаково. Когда я пытаюсь запустить это, он говорит, что не работает в строке 3 с ошибкой

ORA-30657: Операция не поддерживается для внешней организованной таблицы.

Я не вижу ничего плохого в том, что у меня есть, чего мне не хватает?


person Tyler Davidson    schedule 26.06.2017    source источник


Ответы (1)


Я думаю, что первоначальная проблема monitoring: есть приемы для настройки статистики для внешних таблиц, но я не думаю, что поведение мониторинга по умолчанию работает.

"Я не понимаю, почему, хотя"

Мониторинг — это фоновый процесс, который Oracle запускает для отслеживания изменений в таблице — вставок, обновлений, удалений, — чтобы оценить, насколько устарели собранные статистические данные. Когда будет достаточно изменений, мы сможем обновить статистику. Oracle не может выполнять такое отслеживание для внешних таблиц, поскольку данные находятся в файле ОС. Он может сказать, что изменился весь файл, но это все.


Как только вы удалите предложение monitoring, вы обнаружите, что мы не можем наложить ограничение первичного ключа на внешнюю таблицу, потому что первичные ключи требуют ограничения проверки not null. Очевидно, что база данных не может применить такое ограничение проверки, потому что данные находятся в файле в ОС, а не в фактической базе данных. Данные во внешнем файле можно заменить в любое время, перезаписав файл ОС.

По той же самой причине невозможно построить индекс для внешних таблиц (это еще одна причина, по которой добавление первичного ключа не удастся).

person APC    schedule 26.06.2017
comment
Я понимаю, что вы говорите, и это имеет смысл, но когда я пытаюсь запустить только часть создания (за исключением инструкции ALTER), она все равно не запускается и выдает ту же ошибку, что и раньше. Должна быть другая проблема. - person Tyler Davidson; 26.06.2017
comment
Попробуйте без предложения monitoring - person APC; 26.06.2017
comment
Это сделало это. Хотя я не понимаю, почему? - person Tyler Davidson; 26.06.2017