PL / SQL TEXT_IO пакет - PullRequest
       11

PL / SQL TEXT_IO пакет

2 голосов
/ 19 апреля 2011

Я пытаюсь записать в локальный файл из сценария PL / SQL. Для этого я пытаюсь использовать пакет TEXT_IO в PL / SQL.

DECLARE
file_out text_io.file_type;
len number;
blob_file blob;
my_var RAW(50);
bstart NUMBER := 1;
bytelen NUMBER := 50;

BEGIN

SELECT xxx
INTO blob_file
FROM yyy
WHERE zzz

dbms_lob.read(blob_file, bytelen, bstart, my_var);    
file_out := text_io.fopen('local_file_path', 'w');
text_io.put_raw(file_out, my_var);
text_io.fflush(file_out);
text_io.fclose(file_out);

END;
/

quit

Однако, когда я запускаю этот скрипт, я получаю сообщение об ошибке,

PLS-00201: identifier 'TEXT_IO.FILE_TYPE' must be declared

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

Спасибо
КТМ

Ответы [ 3 ]

6 голосов
/ 19 апреля 2011

TEXT_IO существует только в Oracle Forms, которые имели (в старые времена клиент / сервер) интерпретатор PL / SQL на стороне клиента. Если вы используете SQL * Plus для выполнения PL / SQL, как вы, похоже, делаете здесь, пакет TEXT_IO будет недоступен, и вы не сможете записывать в файл на клиентском компьютере (за исключением нечетной настройки где сервер монтирует диск, который выставляет ваш клиент, и затем продолжает запись в это монтирование).

Теперь вы обычно можете использовать SQL * Plus для прямой записи в локальный файл с помощью команды SPOOL. К сожалению, вряд ли вы могли бы сделать это для BLOB в общем случае.

1 голос
/ 19 апреля 2011

Если вы хотите создать файл на сервере, UTL_FILE - хороший выбор. Этот пакет может записывать файлы в любой каталог, указанный в базе данных. DIRECTORY создается в Oracle с использованием CREATE DIRECTORY и может быть связан с любым записываемым каталогом, доступным для СУБД (на стороне сервера).

1 голос
/ 19 апреля 2011

Общий подход таков: записать файл на сервер и загрузить его.Или лучше, не записывайте, просто транслируйте.Довольно сложно, да.

...