Я бы посоветовал вам не делать этого таким образом.
Прежде всего, вы создаете эту процедуру в схеме SYS, что, вообще говоря, плохая идея. Оставьте SYS (и SYSTEM) в покое; создайте своего собственного пользователя, предоставьте ему необходимые привилегии (CREATE SESSION, CREATE PROCEDURE
и любые другие, которые вам могут потребоваться), подключитесь к нему и затем напишите нужный код.
Почему вы создаете каталоги динамически ? Это разовая работа, которую следует выполнить один раз, подключив ее как SYS. Хотя вы, возможно, и создали эти каталоги (неплохо было бы сначала выполнить команду DBMS_OUTPUT.PUT_LINE
, которую вы собираетесь выполнить, убедиться, что она правильно написана, а , а затем фактически запустить ее), вы не предоставили READ ни ЗАПИШИТЕ на них привилегии кому-либо, поэтому - никто не может их использовать, кроме SYS и - как я уже говорил выше - не используйте SYS для этого.
Обратите внимание, что я говорю не о привилегиях операционной системы , а о Oracle привилегиях, например
grant read, write on directory some_dir to scott;
Наконец, при создании каталога на компьютере, который является , а не сервером базы данных: вы должны использовать UNC (Universal Naming Convention) и создать каталог буквально как \\adel-pc\test
; он не будет работать, если вы сопоставите этот каталог на сервере и используете его букву диска .
Что касается самой ошибки, да ... вы опубликовали несколько сотен строк кода, отладку слишком много, просто глядя на нее, и мы пропускаем другие объекты, которые вы используете. Понятия не имею, извините.