Ответ Джастина верен, но позвольте мне немного расширить.
Все, кто сказал, что таблицы не существует, не читали весь ваш пост. Так как вы можете:
Если я запускаю часть SP из редактора запросов, она работает нормально
Очевидно, что таблица там.
Очевидно, у вас есть доступ к нему. В противном случае это не сработает, когда оно явно работает.
но когда я выполняю весь SP, он выдает ошибку.
Это связано с тем, что Oracle различает разрешения, предоставленные напрямую, и разрешения, предоставляемые через роль.
Скажи, что я делаю это:
Create Table TABLE_A
Create Role READ_ONLY
Grant Select on TABLE_A to READ_ONLY
Grant READ_ONLY to VIJAY
В окне / приглашении SQL вы можете запросить эту таблицу без проблем. Так что теперь вам нужно создать представление
Create VIJAY.VIEW_A as SELECT * FROM TABLE_A
Вы получите ошибку, что TABLE_A существует. Поскольку представление компилируется, как процедура, она выполняется без каких-либо ролей. Поскольку он работает без роли READ_ONLY, он не учитывает тот факт, что TABLE_A существует. Теперь, что мне нужно сделать, это
Grant Select on TABLE_A to VIJAY.
Теперь, когда у вас есть прямое разрешение, вы можете скомпилировать представление или процедуру / пакет, которые используют эту таблицу.