Beschrijving
ORA-00936 :ontbrekende uitdrukking is een van de veelvoorkomende fouten die iedereen die in Oracle SQL werkt, enige tijd moet hebben meegemaakt. Dit gebeurt meestal wanneer u belangrijke dingen in de SQL-instructie weglaat, d.w.z. u heeft een belangrijk deel weggelaten van wat u probeerde uit te voeren
Referentie :Oracle-documentatie
Oorzaak van ORA-00936:ontbrekende uitdrukking
Deze Oracle-fout heeft voornamelijk te maken met de SQL SELECT-instructies. Een voor de hand liggende reden is dat de lijst met geselecteerde kolommen ontbreekt of dat expressies in de geselecteerde kolommen onvolledig zijn.
Controlelijst die moet worden uitgevoerd om de ORA-00936 ontbrekende expressiefout op te lossen
(1) Dit gebeurt wanneer u vergeet de kolom in de select-instructie
. op te sommenSelect from mrp_details; select from mrp_details; ERROR at line 1: ORA-00936: missing expression
De juiste manier is om de kolom op te sommen die u wilt selecteren
Select col1,col2 from mrp_details;
(2) We maken soms een fout bij het gebruik van de Distinct-verklaring. De volgende instructie zal mislukken met 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
Het hebben van twee verschillende clausules heeft geen zin en geeft een fout
Een ander voorbeeld
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
distinct kan alleen in het begin worden gebruikt
Dus de juiste verklaring zou zijn:
select distinct a, b,c,d, e from tab_example where b=’ABCD’ and c =1 and d= ‘JOHN’
(3) Deze fout wordt veroorzaakt wanneer een deel van de uitdrukking wordt weggelaten , enkele voorbeelden zijn
select 2**8 from dual; select 2**8 from dual; ERROR at line 1: ORA-00936: missing expression
** operators werken in PLSQL maar niet in SQL, we moeten de Power-functie ervoor gebruiken, dus de juiste manier zou zijn
select power(2,3) from dual; POWER(2,3) -------- 8
(4) Nog een voorbeeld
select dept_name||' '|| from dept; select dept_name||' '|| from dept ERROR at line 1: ORA-00936: missing expression
Hier vergeet u de kolomnaam te vermelden na de concatenatie-operator, de juiste SQL zou zijn
select dept_name||' '||dept_no from dept;
(5) Wanneer u extra komma's toevoegt aan de lijst met kolommen
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
Dus we moeten de SQL-instructie dubbel controleren wanneer we deze fout tegenkomen en ervoor zorgen dat we de veelgemaakte fout maken
(6) Deze fout treedt ook op als u de Van weglaat in de SQL-instructie
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
Hier misten we het vermelden van de from-clausule.SELECT-instructie bestaat uit drie delen:te weten:“SELECT->FROM->WHERE
You can weglaten where-clausule maar select en from zijn noodzakelijk
select dept_no, dept_name, ,dept_location from dept_table where dept_name like ‘A%’;
(7) Het kan ook voorkomen in een insert-statement zoals hieronder
insert into table1 (col1,col2) values as select col1,col2 from table2; ERROR at line 1: ORA-00936: missing expression
We hebben geen waarden nodig zoals in deze verklaring
insert into table1 (col1,col2) select col1,col2 from table2;
(8) We kunnen soms door de gebruiker gedefinieerde functies en Oracle-functies door elkaar halen, en dit kan leiden tot een verwarde syntaxis die zou resulteren in een foutmelding. Vermijd ze dus
(9) Er zijn ook enkele bugs in Oracle
(a) Bug:4567818 basis Bug#:4192148 – niet gepubliceerd op 9207
(b) Bug:4212516 (niet gepubliceerd) op oracle 10.1.0.4.0.
Met deze bugs wordt de ORA-00936-fout gegenereerd wanneer de SELECT ON-weergave mislukt. Kortom, ORA-00936 wordt gegenereerd wanneer een SQL-view wordt gemaakt vanuit "create or replace view MY_VIEW as select t.*,other_tab_col from tab t, other_tab". Dit creëert een weergavedefinitie die onjuist is in de DBA_VIEWS, waardoor ORA- 00936 en mogelijke core-dumps. Om de bugs op te lossen en ORA-00936 op te lossen, biedt MetaLink deze oplossingen voor de juiste versie:
Fix for 9.2.0.7:Patch 4192148 is beschikbaar voor Solaris (64-bits) en AIX5L-gebaseerde systemen (64-bit). Fix voor 10.1.0.4:
Patch 4212516 is beschikbaar voor de meeste platforms.
In een notendop, ORA-00936 ontbrekende uitdrukking kan worden opgelost door uw SQL-statement zorgvuldig te controleren.
Gerelateerde artikelenORA-00911:ongeldig teken
ORA-03113:einde van bestand op communicatiekanaal
ORA-00257
ORA-27154:aanmaken van post/wait mislukt tijdens opstarten
ORA-29913 met externe tabellen
ora-20001 in Verzamel schemastatistieken op 11g(FND_HISTOGRAM_COLS)
Concurrent Manager:cleanup_node is mislukt vanwege ORA-01427