Oracle - создать текстовый файл с использованием хранимой процедуры

Нужна помощь в создании текстового файла с использованием хранимой процедуры в Oracle 10. Я очень новичок в этом, поэтому, пожалуйста, помогите мне с самого начала.

Я нашел код и создал его как хранимую процедуру. Я запускаю его, и это ДЕЙСТВИТЕЛЬНО. Но я выполнил это, я получил ошибку "INVALID FILE NAME... AT SYS.UTL_FILE..."

Сначала я создал каталог, который разрешает чтение и запись в каталоге.

CREATE OR REPLACE PROCEDURE refcursorkim IS
   l_file      utl_file.file_type;
   l_file_name VARCHAR2(60);
BEGIN
l_file := utl_file.fopen('UTL_DIR', l_file_name, 'w');          
   SELECT 'KY' || TO_CHAR(SYSDATE, 'yyyymmdd') || '1.txt' INTO l_file_name  FROM dual;
   utl_file.putf(l_file,l_file_name);
   utl_file.fclose(l_file);
END refcursorkim;

Я не знаю, чего мне не хватает, так как я вообще не знаком с этим. Другое дело, файл автоматически создается в указанном каталоге?

Надеюсь, вы могли бы мне помочь. Спасибо и дай бог здоровья!


person user1249603    schedule 05.03.2012    source источник


Ответы (2)


Вы должны открыть файл с правильным именем файла.

Ваш код (будет ошибка):

CREATE OR REPLACE PROCEDURE refcursorkim
IS
   l_file        UTL_FILE.file_type;
   l_file_name   VARCHAR2 (60);
BEGIN
   l_file := UTL_FILE.fopen ('UTL_DIR', l_file_name, 'w');

   SELECT 'KY' || TO_CHAR (SYSDATE, 'yyyymmdd') || '1.txt'
     INTO l_file_name
     FROM DUAL;

   UTL_FILE.putf (l_file, l_file_name);
   UTL_FILE.fclose (l_file);
END refcursorkim;

Должно быть (исправлено):

CREATE OR REPLACE PROCEDURE refcursorkim
IS
   l_file        UTL_FILE.file_type;
   l_file_name   VARCHAR2 (60);
BEGIN

   SELECT 'KY' || TO_CHAR (SYSDATE, 'yyyymmdd') || '1.txt'
     INTO l_file_name
     FROM DUAL;

   l_file := UTL_FILE.fopen ('UTL_DIR', l_file_name, 'w');

   UTL_FILE.putf (l_file, l_file_name);
   UTL_FILE.fclose (l_file);
END refcursorkim;

Подробнее здесь: http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_file.htm#i1004619

Редактировать 1:

  1. Новый файл будет создан, если файл не существует. Если он существует, он будет заменен новым файлом. Если вам нужно сохранить файл, откройте его в режиме добавления 'A'.
  2. В UTL_FILE нет возможности просматривать содержимое каталога. Однако в Oracle 11g есть и другие варианты. Какая у вас версия Oracle? (Я также дам вам внутренний секрет, который поможет вам быстро изучить функции стандартной библиотеки Oracle. Откройте спецификацию пакета UTL_FILE. Они предоставляют хорошую документацию с достаточным количеством комментариев о том, что делается в вызове процедуры)

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

person Guru    schedule 05.03.2012
comment
означает ли этот код, что если файл не существует, он будет автоматически создан? и как получить доступ к списку файлов на сервере оракула? Я знаю только SELECT * FROM ALL_DIRECTORIES. Это извлекает только список каталогов, я также хочу знать файлы в каждом каталоге (хотя я должен был спросить об этом в другом потоке...) Я просто хочу убедиться, что файл создан. хотя у меня все еще та же ошибка.. неверная операция с файлом... sys.utl_file... большое спасибо! - person user1249603; 06.03.2012
comment
используя oracle 10g. Вот мой код: CREATE OR REPLACE PROCEDURE refcursorkim IS l_file utl_file.file_type; l_file_name VARCHAR2(60); BEGIN SELECT 'KY' || TO_CHAR(SYSDATE, 'yyyymmdd') || '1.txt' INTO l_file_name FROM dual; l_file := utl_file.fopen('UTL_DIR', l_file_name, 'w'); utl_file.putf(l_file,l_file_name); utl_file.fclose(l_file); END refcursorkim; / ошибка ORA-29283: недопустимая операция с файлом | ORA-06512: в SYS.UTL_FILE, строка 475 | ORA-29283: неверная операция с файлом | ORA-06512 в SCHEMA_NAME.REFCURSORKIM, строка 9 | OR-06512: в строке 2 - person user1249603; 06.03.2012
comment
У вас есть доступ к 'UTL_DIR'? Можешь попробовать записать в '/tmp'? - person Guru; 06.03.2012
comment
Я пытался писать, но все равно получаю ту же ошибку... Ну, я думаю, мне просто нужно использовать другой метод, отличный от UTL_FILE. Спасибо вам большое за ваше время. если у меня будет больше времени, я буду больше изучать UTL_FILE. :) Бог благословил! - person user1249603; 06.03.2012

«UTL_DIR» необходимо создать в каталоге.

Следовательно, также требуются необходимые разрешения для создания выходного файла в нужном месте.

person Hema    schedule 04.12.2020