Mam procedurę, która jest poprawna i ma w nim instrukcja insert..select. Teraz jest przypadek, w którym wykonanie tej procedury powoduje błąd "ORA-00904:: invalid identyfikator" z tego oświadczenia. Jak to jest teoretycznie możliwe? Nie ma wyzwalaczy ani dynamicznego SQL.Jak mogę uzyskać "ORA-00904:: invalid identyfikator" z ważnej paczki?
również tekst w sqlerrm ORA-00904 jest bez wskaźnika do konkretnego identyfikatora że Oracle uzna nieprawidłowy.
wersja Oracle 9.2.0.8
Edit2:
Okazuje się, że był problem z funkcji, która została wywołana z wewnątrz, że select (zastąpił go stałych i wszystko działało). Prawdopodobnie był to powód, dla którego ORA-00904 nie podał identyfikatora. Nadal pozostaje pytanie - jak to możliwe, że prekompilowany kod bez dynamicznego sql daje ten błąd?
Czy możesz podać przykładowy kod, proszę! – Tim
Czy są jakieś widoki? Z tego, co powiedziałeś, domyślam się, że masz obsługę wyjątków dla wszystkich błędów ('gdy inni'), które wypisują' SQLERRM'; jeśli tego nie zrobisz, wyjątek zostanie podniesiony i da więcej informacji o tym, skąd pochodzi. –
Zidentyfikowana funkcja i wszystko, co wywołało, nie ma również dynamicznego SQL? Czy cokolwiek w łańcuchu ma klauzulę 'authid current_user', która może wpływać na zachowanie pomiędzy czasem kompilacji a czasem wykonywania (uprawnienia i rozdzielczość)? Czy polegasz na prywatyzowanych pakietach, które nie mają zastosowania w pakietach? –