Во-первых, вы никогда не должны устанавливать собственный код в схему Oracle по умолчанию, такую как SYSTEM. Поместите свой код в специальную схему приложения. Поскольку он содержит динамические c SQL (немедленное выполнение), вы можете подумать о том, чтобы сделать его процедурой с «правами вызывающего», а затем предоставить права на выполнение для пользователя, который будет его выполнять.
При этом , в Oracle 11g тот, кто использует привилегии для запуска блока PL / SQL, должен иметь прямые разрешения для базовой таблицы, а не унаследованные разрешения через роль, подобную DBA. Если у процедуры есть «права определения», то схема, которой принадлежит процедура, должна иметь прямые привилегии для таблицы. Если "права инициатора", то пользователь, выполняющий процедуру, должен иметь права.
Дополнительные сведения см. По этой ссылке: Выполнить немедленно в пределах Oracle Процедура