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

ORA-00911:caractere inválido


Conforme OERR,ORA-00911 :caractere inválido

Causa :os identificadores não podem começar com nenhum caractere ASCII além de letras e números. $#_ também são permitidos após o primeiro caractere. Identificadores entre aspas duplas podem conter qualquer caractere diferente de aspas duplas. Aspas alternativas (q’#…#’) não podem usar espaços, tabulações ou retornos de carro como delimitadores. Para todos os outros contextos, consulte o SQL Language Reference Manual.
Ação :Nenhum

ORA-00911 exceção é muito comum e geralmente ocorre por erros comuns de sintaxe. Algumas das causas comuns e resolução são dadas abaixo

Lista de verificação a ser executada para erro ORA-00911


1 . Às vezes, quando você copia o sql de outro editor, pode ser adicionado um caractere não imprimível/especial (geralmente Agudo em vez de aspas)
SQL> select * from APPS.FND_PROFILE_OPTION_NAME where profile_name like   'USER%`;

select * from APPS.FND_PROFILE_OPTION_NAME where profile_name like  'USER%`;
*
ERROR at line 1:
ORA-00911: invalid character

A maneira correta é remover esses caracteres e tentar novamente
SQL> select * from APPS.FND_PROFILE_OPTION_NAME where profile_name like 'USER%';

2. Este erro ocorre quando um caractere especial é usado em uma cláusula SQL WHERE e o valor não está entre aspas simples.
SQL> select * from APPS.FND_PROFILE_OPTION_NAME where profile_name like USER%;

select * from APPS.FND_PROFILE_OPTION_NAME where profile_name like USER%;
*
ERROR at line 1:
ORA-00911: invalid character 

A consulta correta é
SQL> select * from APPS.FND_PROFILE_OPTION_NAME where profile_name like 'USER%';

3 . quando um ponto e vírgula extra (;) é adicionado para finalizar a consulta
SQL> select * from APPS.FND_PROFILE_OPTION_NAME where profile_name like 'USER%';;

select * from APPS.FND_PROFILE_OPTION_NAME where profile_name like 'USER%';
*
ERROR at line 1:
ORA-00911: invalid character 

Oracle melhorou este 11g e acima
select CHECKPOINT_CHANGE# from v$database;;

select CHECKPOINT_CHANGE# from v$database;
*
ERROR at line 1:
ORA-00933: SQL command not properly ended 

A maneira correta é usar ponto e vírgula simples
SQL> select * from APPS.FND_PROFILE_OPTION_NAME where profile_name like 'USER%';
SQL> select CHECKPOINT_CHANGE# from v$database;

4 . quando o ponto e vírgula (;) é adicionado para finalizar a consulta em execute imediato de pl/sql
SQL> begin
execute immediate 'select * from v$database;';
end;
/
begin
*
ERROR at line 1:
ORA-00911: invalid character
ORA-06512: at line 2 

Oracle melhorou este 11g e acima
begin
execute immediate 'select * from v$database;';
end;
/ 
begin
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
ORA-06512: at line 2 

A maneira correta é
begin
execute immediate 'select * from v$database';
end;
/

5. também ocorre quando você tenta usar um caractere especial em uma instrução SQL. Se um caractere especial diferente de $, _ e # for usado no nome de uma coluna ou tabela oracle, o nome deverá ser colocado entre aspas duplas.
create table example (j% number);  

create table example (j% number) 
*
ERROR at line 1: 
ORA-00911: invalid character 

Maneira correta

Devemos colocá-los entre aspas duplas “”
 SQL> create table example ("j%" number);  
Table created.  

6. quando o ponto e vírgula (;) é adicionado para encerrar a execução da consulta a partir de uma linguagem de programação como .net ou java

Espero que você goste deste conteúdo para resolver o ORA-00911:caractere inválido no banco de dados oracle. Por favor, forneça o feedback para melhorar e inclua mais coisas neste post

Artigos relacionados
ORA-00936 expressão ausente

ORA-01017:nome de usuário/senha inválidos

ora-29913:erro ao executar callout odciexttableopen

Restrição exclusiva ORA-00001 violada

ORA-00257:erro do arquivador. Conecte apenas interno, até que seja liberado.

ORA-03113:fim de arquivo no canal de comunicação

Documentação Oracle