Неверный каталог Oracle UTL_FILE

пытаюсь выполнить эту процедуру

CREATE OR REPLACE PROCEDURE save_customers_to_json(
  p_file_name in varchar2,
  p_dir_name in varchar2
) AS
    l_file UTL_FILE.file_type;
    l_json CLOB;
BEGIN
    SELECT JSON_ARRAYAGG(
             JSON_OBJECT(
                 'id' VALUE id,
                 'name' VALUE name,
                 'login' VALUE login,
                 'password' VALUE password,
                 'phone_number' VALUE phone_number
             ) RETURNING CLOB
           ) INTO l_json
    FROM customers;

    l_file := UTL_FILE.fopen(p_dir_name, p_file_name, 'w');

    UTL_FILE.put_line(l_file, l_json);

    UTL_FILE.fclose(l_file);

    DBMS_OUTPUT.put_line('JSON file has been created successfully.');
END save_customers_to_json;


begin save_customers_to_json('ser.json', 'serialization'); end;

вывод следующий

Error starting at line : 2 in command -

begin save_customers_to_json('ser.json', 'serialization'); end;

Error report -

ORA-29280: invalid directory object

ORA-06512: at "SYS.UTL_FILE", line 41

ORA-06512: at "SYS.UTL_FILE", line 478

ORA-06512: at "PROGRAMMER.SAVE_CUSTOMERS_TO_JSON", line 19

ORA-06512: at line 1

29280. 00000 -  "invalid directory object"

*Cause:    A corresponding directory object does not exist.

*Action:   Correct the directory object parameter, or create a corresponding

           directory object with the CREATE DIRECTORY command.

Ранее я создал сериализацию каталога следующим образом:

create or replace directory serialization as 'C:/app/oradata/ORCL/AUTO/SER';

Также я предоставил все привилегии программисту.

Я попытался выполнить процедуру, но все равно получаю ошибку. Я предоставил все привилегии программисту.

Но существует ли «C:/app/oradata/ORCL/AUTO/SER» в файловой системе и у правильного владельца?

p3consulting 19.05.2024 16:10
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы создали свой каталог как:

create or replace directory serialization

что означает, что это идентификатор без кавычек. В документации для f_open указано, что первый аргумент location:

Расположение файла в каталоге. Эта строка представляет собой имя объекта каталога и должна быть указана в верхнем регистре.

Я не думаю, что это совсем правильно, но оно должно соответствовать имени в том виде, в котором оно указано в словаре, то есть в all_directories, и поскольку это идентификатор без кавычек, это означает, что здесь его нужно указывать в верхнем регистре. Так что измени

begin save_customers_to_json('ser.json', 'serialization'); end;

к

begin save_customers_to_json('ser.json', 'SERIALIZATION'); end;

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

Другие вопросы по теме