Ho una procedura valida e contiene una dichiarazione insert..select. Ora c'è un caso in cui l'esecuzione di questa procedura produce l'errore "ORA-00904:: identificatore non valido" da questa dichiarazione. Come è anche teoricamente possibile? Non ci sono trigger o SQL dinamico.Come posso ottenere "ORA-00904:: identificatore non valido" da un pacchetto valido?
Inoltre, il testo ORA-00904 in sqlerrm è senza puntatore a qualsiasi identificatore specifico che Oracle considera non valido.
versione Oracle 9.2.0.8
EDIT2:
Abbiamo scoperto che c'era un problema con una funzione che è stato chiamato da dentro che select (sostituì con costanti e tutto ha funzionato). Probabilmente questa è stata la ragione per cui ORA-00904 non ha fornito un identificatore. Tuttavia, la domanda rimane: come può essere che il codice precompilato senza sql dinamico dia questo errore?
Puoi pubblicare alcuni esempi di codice per favore! – Tim
Ci sono delle viste? Da quello che hai detto, suppongo che tu abbia un gestore di eccezioni per tutti gli errori ('when others') che stampa' SQLERRM'; se non lo hai, l'eccezione verrà comunque sollevata e fornirai maggiori informazioni su da dove proviene. –
La funzione che hai identificato e qualsiasi altra cosa chiamata a sua volta, non ha nemmeno SQL dinamico? Qualcosa nella catena ha una clausola 'authid current_user', che potrebbe influenzare il comportamento tra compilazione e runtime (privilegi e risoluzione)? Stai facendo affidamento su privilegi concessi da un ruolo, che non si applicano ai pacchetti? –