sql >> Databasteknik >  >> RDS >> Oracle

Hur man löser det saknade uttrycket i ORA-00936

Beskrivning

ORA-00936 :uttryck som saknas är ett av de vanligaste felen som alla som arbetar i Oracle SQL måste ha råkat ut för en tid. Detta händer vanligtvis när du utelämnar viktiga saker i SQL-satsen, dvs. du utelämnade en viktig del av det du försökte köra

Referens :Oracle-dokumentation

Orsak till ORA-00936:uttryck saknas

Detta Oracle-fel är huvudsakligen relaterat till SQL SELECT-satserna. En uppenbar anledning är att den valda kolumnlistan saknas eller att uttrycken i de valda kolumnerna är ofullständiga.

Kontrolllista som ska köras för att lösa ORA-00936 missing expression-felet

(1) Det händer när du glömmer att lista kolumnen  i select-satsen

Select from mrp_details;

select from mrp_details;
ERROR at line 1:
ORA-00936: missing expression

Det korrekta sättet skulle vara att lista kolumnen du vill välja

Select col1,col2 from mrp_details; 

(2) Vi gör ibland misstag när vi använder Distinct statement. Följande uttalande kommer att misslyckas med 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

Att ha två distinkta klausuler är inte vettigt och ger fel

Ett annat exempel

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

distinkt kan endast användas i början

Så korrekt påstående skulle vara

select distinct a, b,c,d, e from tab_example
where b=’ABCD’ and c =1 and d= ‘JOHN’

(3) Detta fel orsakas när en del av uttrycket utelämnas, några exempel är

select 2**8 from dual; 
select 2**8 from dual;
ERROR at line 1: ORA-00936: missing expression

** Operatörer fungerar i PLSQL men inte i SQL, vi måste använda Power-funktionen för det, så korrekt sätt skulle vara

select power(2,3) from dual;
POWER(2,3)
--------
8

(4) Ett annat exempel

select dept_name||' '|| from dept;
select dept_name||' '|| from dept
ERROR at line 1: ORA-00936: missing expression

Här glömmer du att nämna kolumnnamnet efter sammanlänkningsoperatorn, korrekt SQL skulle vara

select dept_name||' '||dept_no from dept;

(5) När du lägger till extra kommatecken i kolumnlistan

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

Så vi måste dubbelkolla SQL-satsen när vi träffar det här felet och se till att vi gör det vanliga misstaget

(6) Detta fel kommer också att uppstå om du utelämnar From i SQL-satsen

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

Här missade vi att nämna from-satsen.SELECT-satsen har tre delar:till exempel:"SELECT->FROM->WHERE
Du kan utelämna var-satsen men välj och från är nödvändiga

select dept_no, dept_name, ,dept_location from dept_table where dept_name like ‘A%’;

(7) Det kan också förekomma i infoga uttalande som nedan

insert into table1 (col1,col2) values as select col1,col2 from table2;
ERROR at line 1: ORA-00936: missing expression

Vi behöver inte värden som i detta uttalande

insert into table1 (col1,col2) select col1,col2 from table2;

(8) Ibland kan vi blanda ihop användardefinierade funktioner och Oracle-funktioner, och att göra det kan leda till förvirrad syntax som skulle resultera i ett felmeddelande. Så undvik dem

(9) Det finns Oracle några buggar också
(a) Bug:4567818 base Bug#:4192148 – opublicerad på 9207
(b) Bug:4212516 (opublicerad) på oracle 10.1.0.4.0.
Med dessa buggar, orsakas ORA-00936-felet när vyn SELECT ON misslyckas. I grund och botten kastas ORA-00936 när en SQL-vy skapas från "skapa eller ersätt vy MY_VIEW som välj t.*,other_tab_col from tab t, other_tab". Detta skapar en vydefinition som är felaktig i DBA_VIEWS, vilket kastar ORA- 00936 och möjliga kärndumpar. För att fixa buggarna och lösa ORA-00936 erbjuder MetaLink dessa lösningar för lämplig version:
Fix för 9.2.0.7 :Patch 4192148 är tillgänglig för Solaris (64bit) och AIX5L-baserade system (64-bitars). Fix för 10.1.0.4 :
Patch 4212516 är tillgänglig för de flesta plattformarna.

I ett nötskal, ORA-00936 saknas uttryck kan lösas genom att noggrant kontrollera din SQL-sats.

Relaterade artiklar
ORA-00911:ogiltigt tecken
ORA-03113:slutet av filen på kommunikationskanalen
ORA-00257
ORA-27154:skapande av post/vänta misslyckades under uppstart
ORA-29913 med externa tabeller
ora-20001 i Samla schemastatistik på 11g(FND_HISTOGRAM_COLS)
Concurrent Manager:cleanup_node misslyckades på grund av ORA-01427

  1. Välj grupp med rader som matchar alla objekt i en lista

  2. Hur man subtraherar 30 dagar från ett datum i T-SQL

  3. SQL Server 2016:Säkerhetskopiera en databas

  4. Implementering av Optimistic Locking i Oracle