sql >> Database >  >> RDS >> Oracle

Hoe de ORA-00936 ontbrekende uitdrukking op te lossen?

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 sommen
Select 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 artikelen
ORA-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

  1. EF4 - De geselecteerde opgeslagen procedure retourneert geen kolommen

  2. java.lang.ClassNotFoundException:org.postgresql.Driver

  3. SQLite selecteert rijen als tijdstempel overeenkomt met de datum van vandaag

  4. Hoe de standaard nls_date_format voor de Oracle jdbc-client te wijzigen