Anonim

Les bases de données reconnaîtront le nom Oracle en tant que moteur puissant dans le monde du système de gestion de base de données relationnelle (SGBD). Oracle produit des solutions de SGBD très puissantes depuis des décennies et reste un chef de file dans le domaine. De nombreux utilisateurs finaux de produits de base de données peuvent être déroutés ou déroutés lorsqu'ils utilisent une solution prédéfinie et que celle-ci génère un message d'erreur. L’erreur ORA-06512 est l’un des messages d’erreur courants produits par Oracle.

Consultez également notre article Comment corriger l'erreur ora-00942

Oracle est un système de gestion de base de données existant depuis quarante ans sous différentes formes. Il utilisait à l'origine quelque chose appelé le schéma SCOTT, nommé d'après l'un des employés d'origine d'Oracle. Vous vous êtes même connecté à Oracle pour la première fois avec le nom d'utilisateur 'scott' et le mot de passe 'tiger' qui doit son nom au chat de Scott. Maintenant, plusieurs schémas sont utilisés, en fonction de l'utilisation d'Oracle.

Si vous souhaitez en savoir plus sur Oracle, cette page est très utile.

Correction des erreurs ORA-06512

Dans Oracle, une erreur ORA-06512 est une erreur d’exception générale qui vous indique que quelque chose ne va pas. C'est l'une des erreurs les moins spécifiques produites par Oracle, car elle indique uniquement qu'il y a un problème, mais pas ce qui ne va pas.

Par exemple, un message d'erreur typique peut indiquer ceci:

“ORA-01422: l'extraction exacte renvoie plus que le nombre de lignes demandé

ORA-06512: à “DATABASE_NAME”, ligne 66

ORA-06512: à la ligne 1 "

La première ligne vous indique le type d'erreur en cours. Dans ce cas, la requête renvoie plus de données que prévu, de sorte qu'elle ne sait pas comment la gérer. Le code 'ORA-01422' est le code d'erreur que vous devez rechercher. L'ORA-06512 n'est que le code d'erreur général.

La deuxième ligne vous indique où l’erreur se produit. DATABASE_NAME sera la base de données sur laquelle vous travaillez à ce moment-là. La ligne 66 est la ligne où l'erreur se produit et est la ligne que vous devez vérifier pour corriger l'erreur.

La troisième ligne de la syntaxe d'erreur vous indique d'où provient l'appel. Vérifiez la première ligne et vous verrez un appel à DATABASE_NAME.

Pour corriger cette erreur particulière, vous devez résoudre le problème provoqué par ORA-01422, à savoir 'l'extraction exacte renvoie plus que le nombre de lignes demandé' ou vous devez ajouter un gestionnaire d'exceptions pour indiquer à Oracle de l'ignorer. Comme il est toujours préférable de régler le problème fondamental, c’est la voie à suivre.

Il y a deux choses que tu peux faire. Si vous vous attendez à ce que la requête renvoie plus d'une ligne, vous pouvez la modifier afin qu'elle ne soit pas surprise. Si vous vous attendez à ce que la requête ne retourne qu'une seule ligne, vous pouvez également la modifier pour cela.

S'attendant à plus d'une seule ligne:

pour X dans (sélectionnez * de t où…)

boucle

- Traitez le record X ici

boucle de fin;

Cela devrait éliminer l'erreur dans les requêtes de base de données où plusieurs lignes seraient renvoyées.

Si vous vous attendez à ce qu'une seule ligne soit renvoyée, vous pouvez essayer:

commencer

sélectionnez * dans….

de t où…

processus….

exception

quand NO_DATA_FOUND alors

code de traitement des erreurs lorsqu'aucun enregistrement n'est trouvé

quand TOO_MANY_ROWS alors

code de traitement des erreurs lorsque trop d'enregistrements sont trouvés

fin;

Cette deuxième méthode doit fournir uniquement la ligne unique sans générer l'erreur 'ORA-01422: l'extraction exacte renvoie plus que le nombre demandé de lignes' et par conséquent l'erreur ORA-06512 d'origine.

Vous pouvez également modifier la requête afin qu'elle ne retourne que la première ligne d'une réponse à plusieurs lignes. Cela peut fonctionner si vous n'avez pas le contrôle total de la base de données ou si vous ne voulez pas trop vous occuper de choses, mais que vous avez toujours besoin d'une réponse.

déclarer

curseur c1 pour select * from t where…

commencer

ouvrir c1;

aller chercher c1 dans ..

si (c1% non trouvé) alors

traitement des erreurs pour aucun enregistrement trouvé

fin si;

fermer c1;

fin;

(Si vous connaissez le langage SQL, ces lignes de commande vous laisseront peut-être un peu perplexe… Oracle n'utilise pas Transact-SQL, mais plutôt sa propre extension de langage procédural de SQL, PL / SQL. Bien que semblable à Transact-SQL, PL / SQL ne C’est un outil très puissant en soi. Vous trouverez peut-être que cette FAQ PL / SQL est utile lorsque vous essayez d’en savoir plus sur Oracle.)

Donc, la leçon de base est qu’une erreur ORA-06512, en soi, n’est pas quelque chose que vous pouvez réparer directement. Au lieu de cela, vous devez déterminer quelle est l'erreur réelle, quels autres codes d'erreur vous indiqueront, puis traiter ces erreurs un par un.

Avez-vous des conseils ou des astuces Oracle à partager? Faites-nous savoir dans les commentaires!

Comment corriger les erreurs ora-06512 dans oracle db