Как я могу получить "ORA-00904:: неверный идентификатор" из действительного пакета?
У меня есть процедура, которая является действительной и имеет в себе оператор вставки.. выбора. Теперь есть случай, когда выполнение этой процедуры выдает ошибку "ORA-00904:: неверный идентификатор" из этого оператора. Как это вообще теоретически возможно? Там нет триггеров или динамического SQL.
Кроме того, текст ORA-00904 в sqlerrm не содержит указателей на какой-либо конкретный идентификатор, который Oracle считает недействительным.
Oracle версия 9.2.0.8
edit2:
Оказалось, что была проблема с функцией, которая была вызвана из этого выбора (заменила его константами, и все работало). Вероятно, это было причиной того, что ORA-00904 не дал идентификатор. Тем не менее, остается вопрос - как это может быть, что предварительно скомпилированный код без динамического SQL дает эту ошибку?
2 ответа
Я думаю, что такого рода ошибки могут произойти, когда вы получаете доступ к пакету, где пакет действителен, но тело требует компиляции и выдает исключение.
Другой причиной может быть код с authid current_user, который запускается с привилегиями текущего пользователя (не так, как обычно с привилегиями пользователя-владельца). Такая процедура может завершиться с ошибкой при вызове с одним и успешно при выполнении с другим пользователем.
Поскольку вы уже нашли решение, это не ваша проблема. Но я хотел добавить примечание, что вы получите эту ошибку, если у функции пакета есть тело, но на листе спецификации нет сигнатуры функции.