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