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

Нужна помощь в создании текстового файла с использованием хранимой процедуры в 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;

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

Надеюсь, ты сможешь мне помочь. Спасибо и благослови вас Бог!

1 Ответ

3 голосов
/ 05 марта 2012

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

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

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. Они предоставляют хорошую документацию с достаточным количеством комментариев о том, что делается в вызове процедуры)

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

...