Descrizione
ORA-00936:espressione mancante è uno degli errori comuni che tutti coloro che lavorano in Oracle SQL devono aver dovuto affrontare un po' di tempo. Ciò accade generalmente quando ometti una cosa importante nell'istruzione Sql, ovvero hai omesso una parte importante di ciò che stavi cercando di eseguire
Riferimento :documentazione Oracle
Causa di ORA-00936:espressione mancante
Questo errore Oracle è principalmente correlato alle istruzioni SQL SELECT. Uno dei motivi ovvi è che l'elenco delle colonne selezionate è mancante o le espressioni nelle colonne selezionate sono incomplete.
Elenco di controllo da eseguire per risolvere l'errore di espressione mancante ORA-00936
(1) Succede quando dimentichi di elencare la colonna nell'istruzione select
Select from mrp_details; select from mrp_details; ERROR at line 1: ORA-00936: missing expression
Il modo corretto sarebbe elencare la colonna che desideri selezionare
Select col1,col2 from mrp_details;
(2) A volte commettiamo errori nell'uso dell'istruzione Distinct. La seguente dichiarazione avrà esito negativo con ORA-00936
select distinct a, b,c,d, distinct e from tab_example where b=’ABCD’ and c =1 and d= ‘JOHN’ ERROR at line 1: ORA-00936: missing expression
Avere due clausole distinte non ha senso e dà errore
Un altro esempio
select a, b,c,d, distinct e from tab_example where b=’ABCD’ and c =1 and d= ‘JOHN’ ERROR at line 1: ORA-00936: missing expression
distinto può essere utilizzato solo all'inizio
Quindi l'affermazione corretta sarebbe
select distinct a, b,c,d, e from tab_example where b=’ABCD’ and c =1 and d= ‘JOHN’
(3) Questo errore è causato quando una parte dell'espressione viene omessa , alcuni esempi sono
select 2**8 from dual; select 2**8 from dual; ERROR at line 1: ORA-00936: missing expression
** gli operatori funzionano in PLSQL ma non in SQL, dobbiamo usare la funzione Power per questo, quindi il modo corretto sarebbe
select power(2,3) from dual; POWER(2,3) -------- 8
(4) Un altro esempio
select dept_name||' '|| from dept; select dept_name||' '|| from dept ERROR at line 1: ORA-00936: missing expression
Qui dimentichi di menzionare il nome della colonna dopo l'operatore di concatenazione, l'SQL corretto sarebbe
select dept_name||' '||dept_no from dept;
(5) Quando aggiungi virgole extra nell'elenco della colonna
select dept_no, dept_name, ,dept_location from dept_table; select dept_no, dept_name, ,dept_location from dept_table; ERROR at line 1: ORA-00936: missing expression
Quindi dobbiamo ricontrollare l'istruzione SQL quando incontriamo questo errore e assicurarci di fare l'errore comune
(6) Questo errore si verificherà anche se si omette From nell'istruzione SQL
select dept_no, dept_name, ,dept_location where dept_name like ‘A%’; select dept_no, dept_name, ,dept_location where dept_name like ‘A%’; ERROR at line 1: ORA-00936: missing expression
Qui non abbiamo menzionato la clausola from. L'istruzione SELECT ha tre parti:vale a dire:"SELECT->FROM->WHERE
Puoi omettere dove la clausola ma selezionare e da sono necessari
select dept_no, dept_name, ,dept_location from dept_table where dept_name like ‘A%’;
(7) Può anche verificarsi nella dichiarazione di inserimento come di seguito
insert into table1 (col1,col2) values as select col1,col2 from table2; ERROR at line 1: ORA-00936: missing expression
Non abbiamo bisogno di valori come in questa affermazione
insert into table1 (col1,col2) select col1,col2 from table2;
(8) A volte possiamo confondere funzioni definite dall'utente e funzioni Oracle, e ciò può portare a una sintassi confusa che risulterebbe in un messaggio di errore. Quindi evitali
(9) Ci sono anche alcuni bug di Oracle
(a) Bug:4567818 base Bug#:4192148 – non pubblicato su 9207
(b) Bug:4212516 (non pubblicato) su Oracle 10.1.0.4.0.
Con questi bug, viene generato l'errore ORA-00936 quando la vista SELECT ON non riesce. Fondamentalmente, ORA-00936 viene generato quando viene creata una vista SQL da "crea o sostituisci vista MY_VIEW come seleziona t.*,other_tab_col dalla scheda t, other_tab". Questo crea una definizione della vista che non è corretta in DBA_VIEWS, generando così ORA- 00936 e possibili core dump. Per correggere i bug e risolvere ORA-00936, MetaLink offre queste soluzioni per la versione appropriata:
Correzione per 9.2.0.7 :La patch 4192148 è disponibile per i sistemi basati su Solaris (64bit) e AIX5L (64 bit). Correzione per 10.1.0.4 :
La patch 4212516 è disponibile per la maggior parte delle piattaforme.
In poche parole, ORA-00936 espressione mancante può essere risolto controllando attentamente la tua istruzione SQL.
Articoli correlatiORA-00911:carattere non valido
ORA-03113:fine file sul canale di comunicazione
ORA-00257
ORA-27154:creazione post/attesa non riuscita durante l'avvio
/>ORA-29913 con tabelle esterne
ora-20001 in Gather schema stats on 11g(FND_HISTOGRAM_COLS)
Gestione simultanea:cleanup_node non riuscito a causa di ORA-01427