Anonim

I gestori di database riconosceranno il nome Oracle come una potenza nel mondo del sistema di gestione di database relazionali (DBMS). Oracle ha prodotto soluzioni DBMS ad altissima potenza per decenni e rimane leader nel settore. Molti utenti finali dei prodotti di database possono essere confusi o sconcertati quando utilizzano una soluzione prestabilita e genera un messaggio di errore. Un messaggio di errore comune prodotto da Oracle è l'errore ORA-06512.

Vedi anche il nostro articolo Come correggere l'errore ora-00942

Oracle è un sistema di gestione di database che esiste da quarant'anni in varie forme. Inizialmente utilizzava qualcosa chiamato schema SCOTT, dal nome di uno dei dipendenti originali di Oracle. Hai anche effettuato l'accesso a Oracle per la prima volta con il nome utente 'scott' e la password 'tiger' che prende il nome dal gatto di Scott. Ora ci sono diversi schemi usati a seconda di cosa usi Oracle.

Se desideri saperne di più su Oracle da zero, questa pagina è molto utile.

Correzione degli errori ORA-06512

In Oracle, un errore ORA-06512 è un errore di eccezione generale che ti dice dove qualcosa non va. È uno degli errori meno specifici prodotti da Oracle, poiché ti dice solo che c'è un problema, ma non ciò che non va.

Ad esempio, un tipico messaggio di errore potrebbe contenere:

“ORA-01422: il recupero esatto restituisce più del numero richiesto di righe

ORA-06512: a "DATABASE_NAME", linea 66

ORA-06512: alla riga 1 ″

La prima riga indica quale tipo di errore si sta verificando, in questo caso la query restituisce più dati di quelli previsti dalla query, quindi non sa come gestirli. Il codice 'ORA-01422' è l'effettivo codice di errore che devi esaminare. ORA-06512 è solo il codice di errore generale.

La seconda riga indica dove si sta verificando l'errore. DATABASE_NAME sarà qualsiasi database in cui stai lavorando in quel momento. La riga 66 è la riga in cui si verifica l'errore ed è la riga che è necessario controllare per correggere l'errore.

La terza riga nella sintassi dell'errore indica da dove proviene la chiamata. Controlla la prima riga e vedrai una chiamata a DATABASE_NAME.

Per correggere questo particolare errore, è necessario risolvere il problema causato da ORA-01422, che è "recupero esatto restituisce più del numero di righe richiesto" oppure è necessario aggiungere un gestore di eccezioni per dire a Oracle di ignorarlo. Poiché è sempre preferibile risolvere il problema principale, questa è la strada da percorrere.

Ci sono due cose che puoi fare. Se si prevede che la query restituisca più di una riga, è possibile modificarla in modo da non stupirsi. Se ti aspetti che la query restituisca una sola riga, puoi modificarla anche per quello.

Aspettando più di una singola riga:

per X in (selezionare * da t dove …)

ciclo continuo

- elabora il record X qui

end loop;

Ciò dovrebbe eliminare l'errore nelle query del database in cui verrebbe restituita più di una riga.

Se si prevede di restituire una sola riga, è possibile provare:

inizio

seleziona * in ….

da t dove ….

processi….

eccezione

quando NO_DATA_FOUND quindi

errore nella gestione del codice quando non viene trovato alcun record

quando TOO_MANY_ROWS quindi

errore nella gestione del codice quando vengono rilevati troppi record

fine;

Questo secondo metodo dovrebbe fornire solo la riga singola senza generare l'errore "ORA-01422: il recupero esatto restituisce più del numero di righe richiesto" e quindi l'errore originale ORA-06512.

Puoi anche modificare la query in modo che restituisca solo la prima riga di una risposta a più righe. Questo potrebbe funzionare se non hai il controllo completo sul database o se non vuoi fare troppe cose ma hai ancora bisogno di una risposta.

dichiarare

cursore c1 per selezionare * da t dove …

inizio

apri c1;

recupera c1 in ..

if (c1% notfound) then

gestione degli errori per nessun record trovato

finisci se;

chiudi c1;

fine;

(Se conosci SQL, potresti essere un po 'confuso da queste righe di comando … Oracle non utilizza Transact-SQL ma piuttosto l'estensione del linguaggio procedurale di SQL, PL / SQL. Sebbene simile a Transact-SQL, PL / SQL non molte cose intelligenti ed è uno strumento molto potente a sé stante. Potresti trovare utili queste FAQ PL / SQL quando provi a conoscere Oracle.)

Quindi la lezione di base qui è che un errore ORA-06512, di per sé, non è qualcosa che puoi correggere direttamente. Invece devi capire qual è l'errore reale, che ti diranno gli altri codici di errore, e quindi affrontare questi errori uno per uno.

Hai suggerimenti o trucchi per Oracle da condividere? Facci sapere nei loro commenti!

Come correggere gli errori ora-06512 nell'oracolo db