Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment résoudre l'expression manquante ORA-00936

Description

ORA-00936 :expression manquante est l'une des erreurs courantes que tout le monde travaillant dans Oracle SQL a dû rencontrer un certain temps. Cela se produit généralement lorsque vous omettez une chose importante dans l'instruction Sql, c'est-à-dire que vous avez omis une partie importante de ce que vous essayiez d'exécuter

Référence :Documentation Oracle

Cause de ORA-00936 :expression manquante

Cette erreur Oracle est principalement liée aux instructions SQL SELECT. Une raison évidente est que la liste de colonnes sélectionnées est manquante ou que les expressions dans les colonnes sélectionnées sont incomplètes.

Liste de vérification à exécuter pour résoudre l'erreur d'expression manquante ORA-00936

(1) Cela se produit lorsque vous oubliez de répertorier la colonne dans l'instruction de sélection

Select from mrp_details;

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

La bonne façon serait de lister la colonne que vous souhaitez sélectionner

Select col1,col2 from mrp_details; 

(2) Nous nous trompons parfois dans l'utilisation de la déclaration Distinct. L'instruction suivante échouera avec 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

Avoir deux clauses distinctes n'a pas de sens et génère une erreur

Un autre exemple

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 ne peut être utilisé qu'au début

Donc, la déclaration correcte serait

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

(3) Cette erreur est causée lorsqu'une partie de l'expression est omise, certains exemples sont

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

** les opérateurs fonctionnent en PLSQL mais pas en SQL, nous devons utiliser la fonction Power pour cela, donc la bonne façon serait

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

(4) Autre exemple

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

Ici, vous oubliez de mentionner le nom de la colonne après l'opérateur de concaténation, le SQL correct serait

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

(5) Lorsque vous ajoutez des virgules supplémentaires dans la liste des colonnes

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

Nous devons donc revérifier l'instruction SQL lorsque nous rencontrons cette erreur et nous assurer que nous faisons l'erreur courante

(6) Cette erreur se produira également si vous omettez le From dans l'instruction 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

Ici, nous avons oublié de mentionner la clause from. L'instruction SELECT comporte trois parties :à savoir :"SELECT->FROM->WHERE
Vous pouvez omettre la clause where, mais select et from sont nécessaires

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

(7) Cela peut également se produire dans une instruction d'insertion comme ci-dessous

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

Nous n'avons pas besoin de valeurs comme dans cette déclaration

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

(8) Nous pouvons parfois confondre les fonctions définies par l'utilisateur et les fonctions Oracle, ce qui peut entraîner une syntaxe confuse qui entraînerait un message d'erreur. Évitez-les donc

(9) Il y a aussi quelques bugs Oracle
(a) Bug :4567818 base Bug# :4192148 – non publié sur 9207
(b) Bug :4212516 (non publié) sur oracle 10.1.0.4.0.
Avec ces bogues, l'erreur ORA-00936 est générée lorsque la vue SELECT ON échoue. Fondamentalement, ORA-00936 est lancé lorsqu'une vue SQL est créée à partir de "créer ou remplacer la vue MY_VIEW as select t.*,other_tab_col from tab t, other_tab". Cela crée une définition de vue incorrecte dans DBA_VIEWS, lançant ainsi ORA- 00936 et éventuels vidages de mémoire.Afin de corriger les bogues et de résoudre ORA-00936, MetaLink propose ces solutions pour la version appropriée :
Correction pour 9.2.0.7 : le correctif 4192148 est disponible pour les systèmes basés sur Solaris (64 bits) et AIX5L (64 bits).Correction pour 10.1.0.4 :
Le correctif 4212516 est disponible pour la plupart des plates-formes.

En bref, ORA-00936 expression manquante peut être résolu en vérifiant attentivement votre instruction SQL.

Articles connexes
ORA-00911 :caractère non valide
ORA-03113 :fin de fichier sur le canal de communication
ORA-00257
ORA-27154 :échec de la création post/attente au démarrage
/>ORA-29913 avec des tables externes
ora-20001 dans Gather schema stats on 11g(FND_HISTOGRAM_COLS)
Gestionnaire simultané :Échec du nettoyage du nœud en raison de ORA-01427