как мне прочитать локальный файл в SQL Developer?

Я хочу прочитать файл на моем локальном компьютере, содержащий параметры запроса, когда я выполняю запрос в Oracle SQL Developer. Примеры, которые я нашел в сети, неадекватны. Я продолжаю получать ошибки «ORA-29283: недопустимая операция с файлом», когда выполняю приведенный ниже код:

CREATE DIRECTORY SAMPLEDATA2 AS 'C:';
GRANT READ, WRITE ON DIRECTORY SAMPLEDATA2 TO PUBLIC;


declare
f utl_file.file_type;
s varchar2(200);
c number := 0;

BEGIN

f := utl_file.fopen('SAMPLEDATA2','sample2.txt','R');
loop
    utl_file.get_line(f,s);
    dbms_output.put_line(s);
    c := c + 1;
end loop;

exception
    when NO_DATA_FOUND then
        utl_file.fclose(f);
        dbms_output.put_line('Number of lines: ' || c);
end;

person user786149    schedule 06.06.2011    source источник
comment
возможный дубликат процедуры UTL_FILE.FOPEN (), не принимающей путь для каталога ?   -  person APC    schedule 06.06.2011


Ответы (2)


UTL_FILE может читать данные только из файлов, которые хранятся на сервере базы данных. Поскольку это код PL / SQL, он работает на сервере базы данных и имеет доступ только к тем ресурсам, которые доступны процессу Oracle на сервере базы данных.

person Justin Cave    schedule 06.06.2011
comment
Хорошо, вот почему это не удается, спасибо. Есть ли альтернатива, которую я могу использовать для чтения локального файла и отправки его в базу данных? - person user786149; 06.06.2011
comment
@ user786149 - Не совсем. Вы можете сделать что-то вроде использования SQL Loader для записи файла в столбец CLOB в таблице в базе данных, а затем использовать пакет DBMS_LOB для чтения данных из CLOB. Но это была бы совсем другая семантика. Как правило, лучше скопировать файл на сервер базы данных и использовать UTL_FILE для чтения файла (при условии, конечно, что вам не будет лучше использовать загрузчик SQL, чтобы просто загрузить данные из файла в стол). - person Justin Cave; 06.06.2011

«Я хочу прочитать файл на моем локальном компьютере, содержащий параметры запроса, когда я выполняю запрос в Oracle SQL Developer».

Это кажется необычным - я хотел сказать «своеобразным» архитектурным решением. Откуда берутся эти ценности? Почему их нужно хранить в файле? Как часто они меняются?

Будет очень сложно предоставить содержимое локального файла ПК удаленному серверу базы данных (т.е. мы говорим об автоматизации с помощью ftp или ручного процесса, включающего что-то вроде WinSCP).

С другой стороны, применить к запросу некоторые параметры запроса может быть довольно просто; например, используя SYS_CONTEXT и пространства имен. Но мне нужно узнать больше подробностей, прежде чем я смогу предложить альтернативное решение.

person APC    schedule 06.06.2011
comment
Это однократная процедура миграции данных, которая включает в себя дюжину различных таблиц и около 1500 различных дат, которые не идут подряд. У меня есть вся информация в плоском файле, поэтому я подумал, что будет проще прочитать этот плоский файл в качестве входных данных для сценариев миграции. - person user786149; 06.06.2011
comment
Что ж, черт возьми, если это однократная загрузка, к черту элегантность и превратите свои данные в сценарий из кучи операторов вставки и бросьте все это во временную таблицу для дальнейшего анализа. (Я лично делаю это в Excel.) - person Mark Bowytz; 11.06.2011