пытаюсь выполнить эту процедуру
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';
Также я предоставил все привилегии программисту.
Я попытался выполнить процедуру, но все равно получаю ошибку. Я предоставил все привилегии программисту.

Вы создали свой каталог как:
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.
Но существует ли «C:/app/oradata/ORCL/AUTO/SER» в файловой системе и у правильного владельца?