Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como resolver a expressão ausente ORA-00936

Descrição


ORA-00936:expressão ausente é um dos erros comuns que todos que trabalham no Oracle SQL devem ter enfrentado algum tempo. Isso geralmente acontece quando você omite algo importante na instrução Sql, ou seja, você deixou de fora uma parte importante do que estava tentando executar

Referência :Documentação da Oracle

Causa de ORA-00936:expressão ausente


Esse erro do Oracle está relacionado principalmente às instruções SQL SELECT. Um motivo óbvio é que a lista de colunas selecionadas está ausente ou as expressões nas colunas selecionadas estão incompletas.

Lista de verificação a ser executada para resolver o erro de expressão ausente ORA-00936


(1) Isso acontece quando você esquece de listar a coluna  na instrução select
Select from mrp_details;

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



A maneira correta seria listar a coluna que você deseja selecionar


Select col1,col2 from mrp_details; 

(2) Às vezes cometemos erros no uso da declaração Distinta. A instrução a seguir falhará com 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



Ter duas cláusulas distintas não faz sentido e dá erro
Outro exemplo

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 pode ser usado apenas no início
Então a afirmação correta seria

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

(3) Este erro é causado quando parte da expressão é omitida, alguns exemplos são
select 2**8 from dual; 
select 2**8 from dual;
ERROR at line 1: ORA-00936: missing expression



** operadores funcionam em PLSQL, mas não em SQL, precisamos usar a função Power para isso, então a maneira correta seria


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

(4) Outro exemplo
select dept_name||' '|| from dept;
select dept_name||' '|| from dept
ERROR at line 1: ORA-00936: missing expression



Aqui você esquece de mencionar o nome da coluna após o operador de concatenação, o SQL correto seria


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

(5) Quando você adiciona vírgulas extras na lista de colunas
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



Portanto, precisamos verificar novamente a instrução SQL quando encontrarmos esse erro e ter certeza de que estamos cometendo o erro comum
(6) Este erro também ocorrerá se você omitir o From na instrução 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



Aqui deixamos de mencionar que a instrução from cláusula.SELECT tem três partes:a saber:“SELECT->FROM->WHERE
Você pode omitir a cláusula where, mas selecionar e partir são necessários


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

(7) Também pode ocorrer na instrução insert como abaixo
insert into table1 (col1,col2) values as select col1,col2 from table2;
ERROR at line 1: ORA-00936: missing expression



Não precisamos de valores como nesta declaração


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

(8) Às vezes, podemos misturar funções definidas pelo usuário e funções do Oracle, e isso pode levar a uma sintaxe confusa que resultaria em uma mensagem de erro. Portanto, evite-as

(9) Existem alguns bugs do Oracle também
(a) Bug:4567818 base Bug#:4192148 – não publicado no 9207
(b) Bug:4212516 (não publicado) no oracle 10.1.0.4.0.
Com esses bugs, o erro ORA-00936 é lançado quando a visualização SELECT ON falha. Basicamente, ORA-00936 é lançado quando uma view SQL é criada a partir de “criar ou substituir view MY_VIEW as select t.*,other_tab_col from tab t, other_tab”. Isso cria uma definição de view incorreta no DBA_VIEWS, lançando assim ORA- 00936 e possíveis core dumps. Para corrigir os bugs e resolver o ORA-00936, a MetaLink oferece estas soluções para a versão apropriada:
Fix for 9.2.0.7 :Patch 4192148 está disponível para sistemas baseados em Solaris (64bit) e AIX5L (64 bits).Correção para 10.1.0.4:
Patch 4212516 está disponível para a maioria das plataformas.

Em poucas palavras, ORA-00936 expressão ausente pode ser resolvido verificando cuidadosamente sua instrução SQL.
Artigos relacionados
ORA-00911:caractere inválido
ORA-03113:fim de arquivo no canal de comunicação
ORA-00257
ORA-27154:criação de postagem/espera falhou durante a inicialização
/>ORA-29913 com tabelas externas
ora-20001 em Reunir estatísticas de esquema em 11g(FND_HISTOGRAM_COLS)
Gerenciador simultâneo:cleanup_node falhou devido a ORA-01427