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 connexesORA-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