Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So beheben Sie den fehlenden Ausdruck ORA-00936

Beschreibung

ORA-00936 :fehlender Ausdruck ist einer der häufigsten Fehler, denen jeder, der mit Oracle SQL arbeitet, schon einmal begegnet sein muss. Dies passiert im Allgemeinen, wenn Sie wichtige Dinge in der SQL-Anweisung weglassen, d. h. Sie haben einen wichtigen Teil dessen, was Sie ausführen wollten, ausgelassen.

Referenz :Oracle-Dokumentation

Ursache für ORA-00936:fehlender Ausdruck

Dieser Oracle-Fehler hängt hauptsächlich mit den SQL SELECT-Anweisungen zusammen. Ein offensichtlicher Grund ist, dass die Liste der ausgewählten Spalten fehlt oder die Ausdrücke in den ausgewählten Spalten unvollständig sind.

Prüfen Sie die auszuführende Liste, um den Fehler ORA-00936 wegen fehlendem Ausdruck zu beheben

(1) Dies passiert, wenn Sie vergessen, die Spalte  in der Select-Anweisung

aufzulisten
Select from mrp_details;

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

Der richtige Weg wäre, die Spalte aufzulisten, die Sie auswählen möchten

Select col1,col2 from mrp_details; 

(2) Wir machen manchmal Fehler bei der Verwendung von Distinct Statement. Die folgende Anweisung schlägt mit ORA-00936

fehl
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

Zwei unterschiedliche Klauseln zu haben, ist nicht sinnvoll und gibt einen Fehler

Ein anderes Beispiel

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

unique kann nur am Anfang verwendet werden

Richtige Aussage wäre also

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

(3) Dieser Fehler wird verursacht, wenn ein Teil des Ausdrucks weggelassen wird, einige Beispiele sind

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

** Operatoren funktionieren in PLSQL, aber nicht in SQL. Wir müssen die Power-Funktion dafür verwenden. Der richtige Weg wäre also

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

(4) Ein weiteres Beispiel

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

Hier vergessen Sie, den Spaltennamen nach dem Verkettungsoperator anzugeben, die korrekte SQL wäre

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

(5) Wenn Sie zusätzliche Kommas in der Liste der Spalte

hinzufügen
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

Daher müssen wir die SQL-Anweisung überprüfen, wenn wir auf diesen Fehler stoßen, und sicherstellen, dass wir den üblichen Fehler machen

(6) Dieser Fehler tritt auch auf, wenn Sie das From in der SQL-Anweisung weglassen

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 haben wir vergessen, die from-Klausel zu erwähnen. Die SELECT-Anweisung besteht aus drei Teilen:nämlich:„SELECT->FROM->WHERE
Sie können die where-Klausel weglassen, aber select und from sind notwendig

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

(7) Es kann auch in einer Insert-Anweisung wie unten

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

Wir brauchen keine Werte wie in dieser Anweisung

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

(8) Wir können manchmal benutzerdefinierte Funktionen und Oracle-Funktionen verwechseln, was zu einer verwechselten Syntax führen kann, die zu einer Fehlermeldung führen würde. Vermeiden Sie sie also

(9) Oracle hat auch einige Bugs
(a) Bug:4567818 base Bug#:4192148 – unveröffentlicht auf 9207
(b) Bug:4212516 (unveröffentlicht) auf Oracle 10.1.0.4.0.
Bei diesen Fehlern wird der Fehler ORA-00936 ausgegeben, wenn die Ansicht SELECT ON fehlschlägt. Grundsätzlich wird ORA-00936 ausgelöst, wenn eine SQL-Ansicht erstellt wird aus „Erstellen oder Ersetzen der Ansicht MY_VIEW as select t.*,other_tab_col from tab t, other_tab“. Dadurch wird eine Ansichtsdefinition erstellt, die in DBA_VIEWS falsch ist, wodurch ORA- 00936 und mögliche Core-Dumps.Um die Fehler zu beheben und ORA-00936 zu beheben, bietet MetaLink diese Lösungen für die entsprechende Version an:
Fix für 9.2.0.7 :Patch 4192148 ist für Solaris (64bit) und AIX5L-basierte Systeme verfügbar (64-Bit).Fix für 10.1.0.4:
Patch 4212516 ist für die meisten Plattformen verfügbar.

Kurz gesagt, ORA-00936 fehlender Ausdruck kann durch sorgfältige Überprüfung Ihrer SQL-Anweisung behoben werden.

Verwandte Artikel
ORA-00911:Ungültiges Zeichen
ORA-03113:Dateiende auf Kommunikationskanal
ORA-00257
ORA-27154:Post/Wait-Erstellung beim Start fehlgeschlagen
ORA-29913 mit externen Tabellen
ora-20001 in Sammelschemastatistiken auf 11g(FND_HISTOGRAM_COLS)
Concurrent Manager:cleanup_node fehlgeschlagen aufgrund von ORA-01427