Невозможно выбрать dba_tab_cols из хранимой процедуры (PL/SQL)

StackOverflow https://stackoverflow.com/questions/803618

Вопрос

Я пытаюсь ВЫБРАТЬ из представления dba_tab_cols изнутри хранимой процедуры.Это не работает, и я не знаю, почему.

Если я выполню следующий SQL как запрос:

SELECT t.data_type FROM dba_tab_cols t
WHERE 
    t.table_name = 'ACCOUNTTYPE' AND 
    t.column_name = 'ACCESSEDBY';

он работает нормально.Однако если я скопирую его в хранимую процедуру следующим образом:

SELECT t.data_type INTO dataType FROM dba_tab_cols t
WHERE
    t.table_name = 'ACCOUNTTYPE' AND 
    t.column_name = 'ACCESSEDBY';

Я получаю сообщение об ошибке «PL/SQL:ОРА-00942:таблица или представление не существует», и редактор выделяет dba_tab_cols при попытке компиляции.В обоих случаях используется один и тот же пользователь базы данных.

dataType объявляется как:Тип данных varchar2(128);

PL/SQL (Оракул 9)

Кто-нибудь знает проблему?

Это было полезно?

Решение

Скорее всего, это проблема с привилегиями.Разрешение на доступ dba_tab_columns через роль или это прямой выбор вашего пользователя?Привилегии, предоставленные с помощью ролей, недоступны в SPROCS.

Быстрый просмотр в Google предлагает использовать all_tab_cols вместо этого и посмотреть, есть ли в этой таблице необходимая информация, которая вам нужна.

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

Чтобы добавить к ответу Эоина:

Для большинства людей стало неожиданностью, что пользователь не может выбрать таблицу из процедуры, если ему не было предоставлено прямое право (в отличие от роли)

Если пользователь таблицы пытается составить эту процедуру, он получает ORA-00942, хотя эта таблица, безусловно, существует, и ему было предоставлено право выбирать эту таблицу.Проблема в том, что процедуры не уважают роли;Только непосредственно предоставленные права уважаются.Таким образом, это означает, что владелец таблицы должен получить право выбирать:

http://www.adp-gmbh.ch/ora/err/ora_00942.html

У меня не установлен Oracle, но, возможно, dataType — зарезервированное слово.Я бы попробовал что-нибудь еще.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top