|
Программирование >> Oracle
1752 Приложение А Для решения этой проблемы необходимо использовать пакет UTL FILE так, как это делалось в представленной выше процедуре DUMP PAGE. Четвертый параметр вызова функции UTL FILE.FOPEN задает максимальную длину строки текста, которую предполагается использовать. Я допускал использование строк длиной до 32000 байт. Чтение содержимого каталога Этой возможности в пакете UTL FILE не хватает. Часто необходимо создать периодически выполняющееся задание для просмотра каталога в поисках новых файлов и обработки этих файлов, например загрузки их содержимого в базу данных. К сожалению, стандартного способа прочитать список файлов в каталоге в языке PL/SQL нет. Можно, однако, реализовать эту возможность с помощью небольшого фрагмента кода на языке Java. Следующий пример демонстрирует, как это сделать. Сначала я создам пользователя с минимальным набором привилегий, необходимых для выполнения действий по загрузке данных и получения списка файлов в каталоге /tmp. Если необходимо читать содержимое других каталогов, придется добавить соответствующие вызовы dbmsJava.grant permission (подробнее о них см. в главе 19) или заменить /tmp на *, что позволит получить список файлов любого каталога. SQL> connect system/manager system@DEV816> drop user dirlist cascade; User dropped. system@DEV816> grant create session, create table, create procedure 2 to dirlist identified by dirlist; Grant succeeded. system@DEV816> begin 2 dbms java.grant permission 3 (DIRLIST, 4 java.io.FilePermission, 5 /tmp, 6 read); 7 end; PL/SQL procedure successfully completed. Затем, подключившись от имени пользователя DirList, мы создаем глобальную временную таблицу в его схеме (для хранения списка файлов каталога). Так, через временную таблицу, мы сможем получить результаты выполнения хранимой процедуры на языке Java в вызывающей среде. Можно использовать для этого и другие способы (строки, массивы и т.п.). SQL> connect dirlist/dirlist Connected. dirlist@DEV816> create global temporary table DIR LIST 2 (filename varchar2(255)) 3 on commit delete rows 4 / Table created. Пакет UTL FILE 1753 Теперь создадим хранимую процедуру на языке Java получения списка файлов в указанном каталоге. Чтобы упростить программирование, я использую средства препроцессора SQLJ - это позволяет избежать написания большого количества вызовов JDBC: dirlist@DEV816> create or 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 replace source named DirList and compile java as import java.io.*; import java.sql.*; public class DirList { public static void getList(String directory) throws SQLException File path = new File(directory); String[] list = path.list(); String element; for { (int i = 0; i < list.length; element = list[i]; #sql { INSERT INTO DIR LIST (FILENAME) VALUES (:element) } ; Java created. Затем необходимо создать процедуру сопоставления, связывающую языки PL/SQL и Java. Она достаточно проста: in varchar2) dirlisteDEV816> create or replace 2 procedure get dir list(p directory 3 as language java 4 name DirList.getList(java.lang.String); Procedure created. Теперь можно использовать процедуру get dir list: dirlist@DEV816> exec get dir list(\tmp); PL/SQL procedure successfully completed. dirlist@DEV816> select * from dir list where rownum FILENAME < 5; lost+found .rpc door ps data .pcmcia 1754 Приложение Вот и все. В соответствующей временной таблице теперь можно получить список файлов каталога. К данным таблицы можно применять фильтры, например LIKE, или сортировать результаты. Резюме Пакет UTL FILE - замечательная утилита, которая пригодится во многих приложениях. В этом разделе мы рассмотрели как настроить сервер для использования средств пакета UTL FILE, и описали особенности его работы. Мы рассмотрели наиболее часто возникающие проблемы при использовании пакета UTL FILE, в частности обращение к сетевым дискам в среде Windows, ограничение длины строки 1023 байтами, и обработку исключительных ситуаций. Для каждой из этих проблем были представлены решения. Мы также изучили ряд утилит, которые можно создать с помощью пакета UTL FILE, в частности процедуру UNLOADER, описанную в главе 9, средства чтения списка файлов каталога и сброса Web-страницы на диск.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |