Os especialistas em banco de dados reconhecerão o nome Oracle como uma potência no mundo do sistema de gerenciamento de banco de dados relacional (DBMS). A Oracle produz soluções de DBMS de alta potência há décadas e continua a ser líder no campo. Muitos usuários finais de produtos de banco de dados podem ficar confusos ou confusos quando estão usando uma solução predefinida e isso gera uma mensagem de erro. Uma mensagem de erro comum produzida pela Oracle é o erro ORA-06512.
Consulte também o nosso artigo Como corrigir o erro ora-00942
O Oracle é um sistema de gerenciamento de banco de dados que existe há quarenta anos de várias formas. Ele originalmente usava algo chamado esquema SCOTT, com o nome de um dos funcionários originais da Oracle. Você até fez login no Oracle pela primeira vez com o nome de usuário 'scott' e a senha 'tigre', que leva o nome do gato de Scott. Agora, existem vários esquemas usados, dependendo do uso do Oracle.
Se você deseja aprender mais sobre o Oracle desde o início, esta página é muito útil.
Corrigindo erros do ORA-06512
No Oracle, um erro ORA-06512 é um erro de exceção geral que informa onde algo está errado. É um dos erros menos específicos produzidos pela Oracle, pois informa apenas que há um problema, mas não o que está errado.
Por exemplo, uma mensagem de erro típica pode ser:
“ORA-01422: a busca exata retorna mais do que o número solicitado de linhas
ORA-06512: na "DATABASE_NAME", linha 66
ORA-06512: na linha 1 ″
A primeira linha informa a você que tipo de erro está acontecendo; nesse caso, a consulta está retornando mais dados do que o esperado, para que não saiba como lidar com isso. O código 'ORA-01422' é o código de erro real que você precisa observar. O ORA-06512 é apenas o código de erro geral.
A segunda linha informa onde o erro está ocorrendo. O DATABASE_NAME será o banco de dados em que você estiver trabalhando no momento. Linha 66 é a linha em que o erro está ocorrendo e é a linha que você precisa verificar para corrigir o erro.
A terceira linha na sintaxe do erro informa a origem da chamada. Marque a linha um e você verá uma chamada para o DATABASE_NAME.
Para corrigir esse erro específico, é necessário corrigir o problema causado pelo ORA-01422, que é 'busca exata retorna mais do que o número solicitado de linhas' ou você precisa adicionar um manipulador de exceções para solicitar ao Oracle que o ignore. Como sempre é preferível corrigir o problema principal, este é o caminho a percorrer.
Há duas coisas que você pode fazer. Se você espera que a consulta retorne mais de uma única linha, é possível modificá-la para que não seja surpreendida. Se você espera apenas que a consulta retorne uma única linha, também pode modificá-la.
Esperando mais de uma única linha:
para X in (selecione * de t onde…)
ciclo
- processe o registro X aqui
loop final;
Isso deve erradicar o erro nas consultas ao banco de dados em que mais de uma linha seria retornada.
Se você espera apenas que uma única linha seja retornada, tente:
início
selecione * em….
de t onde …
processo….
exceção
quando NO_DATA_FOUND então
código de tratamento de erros quando nenhum registro é encontrado
quando TOO_MANY_ROWS então
código de tratamento de erros quando muitos registros são encontrados
fim;
Esse segundo método deve entregar apenas a linha única sem exibir o erro 'ORA-01422: busca exata retorna mais do que o número solicitado de linhas' e, portanto, o erro original ORA-06512.
Você também pode ajustar a consulta para que ela retorne apenas a primeira linha de uma resposta de várias linhas. Isso pode funcionar se você não tiver controle completo sobre o banco de dados ou não quiser mexer muito com as coisas, mas ainda precisar de uma resposta.
declarar
cursor c1 para selecionar * de t onde…
início
c1 aberto;
buscar c1 em ..
se (c1% não encontrado) então
tratamento de erros para nenhum registro encontrado
fim se;
fechar c1;
fim;
(Se você conhece SQL, pode ficar um pouco confuso com essas linhas de comando … O Oracle não usa o Transact-SQL, mas sua própria extensão de linguagem procedural do SQL, PL / SQL. Embora semelhante ao Transact-SQL, o PL / SQL faz muitas coisas inteligentes e é uma ferramenta muito poderosa por si só. Você pode achar útil esta FAQ do PL / SQL ao tentar aprender sobre o Oracle.)
Portanto, a lição básica aqui é que um erro ORA-06512, por si só, não é algo que você pode corrigir diretamente. Em vez disso, você precisa descobrir qual é o erro real, o que os outros códigos de erro informarão e, em seguida, resolver esses erros um por um.
Você tem dicas ou truques sobre o Oracle para compartilhar? Deixe-nos saber sobre eles nos comentários!