Как я могу получить «ORA-00904: неверный идентификатор» из действительного пакета? - PullRequest
5 голосов
/ 18 января 2011

У меня есть процедура, которая является допустимой, и в ней есть оператор insert..select. Теперь есть случай, когда выполнение этой процедуры выдает ошибку «ORA-00904:: неверный идентификатор» из этого оператора. Как это вообще теоретически возможно? Там нет триггеров или динамического SQL.

Кроме того, текст ORA-00904 в sqlerrm не содержит указателей на какой-либо конкретный идентификатор, который Oracle считает недействительным.

Oracle версия 9.2.0.8

edit2:

Оказалось, что была проблема с функцией, которая была вызвана из этого выбора (заменила ее константами, и все работало). Вероятно, это было причиной того, что ORA-00904 не дал идентификатор. Тем не менее, остается вопрос - как это может быть, что предварительно скомпилированный код без динамического sql дает эту ошибку?

Ответы [ 2 ]

2 голосов
/ 18 мая 2012

Я думаю, что такого рода ошибки могут возникать при доступе к пакету, в котором пакет действителен, но тело требует компиляции и выдает исключение.

Другой причиной может быть код с authid current_user, который запускается с привилегиямитекущего пользователя (не так, как обычно, с привилегиями пользователя-владельца).Такая процедура может завершиться с ошибкой при вызове с одним и успешно при выполнении с другим пользователем.

0 голосов
/ 16 марта 2015

Поскольку вы уже нашли решение, это была не ваша проблема. Но я хотел добавить примечание, что вы получите эту ошибку, если у функции пакета есть тело, но в спецификации нет сигнатуры функции.

...