Как вставить в таблицу в Oracle 10g из текстового файла с помощью программы PLSQL? - PullRequest
0 голосов
/ 28 марта 2012

Я пытаюсь эту программу PL / SQL в Oracle 10g.Чтение текстового файла (данных) из локуса 'C: \ Oracle' и загрузка его в таблицу Oracle с использованием сценария PLSQL.Но я получаю следующие ошибки:

ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 488
ORA-29283: invalid file operation

Вот мой сценарий:

Create or Replace PROCEDURE Rfile is
    line VARCHAR2(100);
    namesfile UTL_FILE.FILE_TYPE;
BEGIN
    --  Syntax : FOPEN ( directory alias, filename, open mode)

    namesfile  := UTL_FILE.FOPEN('FILESDIR1','NAMES2.TXT','R'); -- open in read mode 

    LOOP
      UTL_FILE.GET_LINE(namesfile,line,100);
      dbms_output.put_line(line);

      insert into names2 values(line);                  -- insert into NAMES table
    END LOOP;
EXCEPTION
    WHEN OTHERS THEN
    dbms_output.put_line('Others exceptions....');
END;

Ответы [ 3 ]

1 голос
/ 28 марта 2012

Вы можете попробовать другой подход:
Создайте внешнюю таблицу , которая является таблицей, сопоставленной с файлом, чтобы прочитать файл, а затем просто insert-select в вашу таблицу из внешней
(или, может быть, вам даже не нужно вставлять его в другой стол?)

0 голосов
/ 07 декабря 2016

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

Также вы должны проверить, чтокаталог (FILESDIR1) указывает на правильный каталог ОС, и вам предоставлен доступ к этому каталогу, а файл находится в этом каталоге ОС (не в вашей локальной файловой системе).

Кстати.в некоторых случаях вы могли бы лучше использовать SQL Loader для массовой загрузки данных в таблицу, особенноесли файл большой, потому что вы можете указать загрузчику SQL напрямую загружать данные в файлы данных, минуя слои SQL (генерируемые операторами INSERT) все вместе.

0 голосов
/ 28 марта 2012

Вам может понадобиться строчная буква 'r' в этой строке ...

namesfile  := UTL_FILE.FOPEN('FILESDIR1','NAMES2.TXT','r'); -- open in read mode 
                                                       ^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...