В хранимой процедуре определения прав, такой как та, которую вы создаете, при разрешении имен объектов учитываются только те привилегии, которые предоставляются непосредственно владельцу процедуры.Привилегии, предоставляемые через роли, не учитываются.Держу пари, что владельцу вашей процедуры был предоставлен доступ к представлению DBA_TAB_COLUMNS
через роль, а не через прямое предоставление.Вам нужно будет попросить администратора базы данных предоставить доступ к DBA_TAB_COLUMNS
непосредственно пользователю, которому принадлежит ваша процедура.
Вы можете быстро проверить, действительно ли это ваша проблема.В SQL * Plus введите команду
SQL> set role none;
и затем запустите оператор SELECT.Если вы получаете ту же ошибку прав доступа, то проблема в том, что у вас есть грант через роль.Отключение ролей означает, что ваш интерактивный сеанс работает с теми же привилегиями, что и хранимая процедура.