Здравствуйте! У меня возникла ошибка с получением привилегий из схемы Oracle. Ошибка несёт неясный характер для меня, так как в точности идентичный запрос в одном проекте ошибку даёт, а в другом - нет.
Первый проект написан чисто на Perl без применения каких-либо фреймворков, второй - находится на том же сервере, но написан с применением Mojolicious::Lite. Для подключения к базе данных использую DBI.
Вот, собственно, и сам запрос:
SELECT privilege FROM user_tab_privs WHERE owner = $schema AND grantee = $username AND table_name = $table
Ошибку выдаёт следующую:
DBD::Oracle::db prepare failed: ORA-00904: "CITY_V": invalid identifier (DBD ERROR: error possibly near <*> indicator at char 170 in.
Передаваыме значения 100% верные. В схеме имеется view под названием CITY_V. Привилегии тоже прописаны верно. Это легко заметить, если оставить запрос в таком виде:
SELECT privilege FROM user_tab_privs
ORA-00904 часто отражает отсутствие доступа к объекту.
Возможно, объекта нет вообще.
1. Проверить наличие объекта.
2. Проверить, что обращаемся к нужному объекту правильно (имя схемы и имя объекта корректны и полны)
3. Проверить наличие прав доступа на выбор для этого объекта и пользователя, выполняющего запрос.
4. Для представления: пользователю-владельцу представления должны быть выданы права на доступ к таблицам из представления с опцией WITH GRANT OPTION.
Такое решение не даёт результата, к сожалению. В этом случае сервер просто не возвращает ничего. Без кавычек же, возвращается ошибка. Хотя на этом же сервере в другом проекте этот же запрос работает.
Евгений: Я разобрался. В данном случае пришлось как вы сказали вокруг параметров добавить одинарные кавычки и перевести все аргументы в верхний регистр. Это решило проблему, но ситуация опять же осталось не ясной - почему в другом проекте всё работает...