19 Gennaio 2022

Trova la risposta a qualsiasi domanda

Expand search form

Cos’è la gestione degli errori in SQL Server?

RiassuntoIn questo tutorial imparerete come usare il costrutto TRY CATCH di SQL Server per gestire le eccezioni nelle stored procedure.

Panoramica su TRY CATCH in SQL Server

Il costrutto TRY CATCH vi permette di gestire con grazia le eccezioni in SQL Server. Per usare il costrutto TRY CATCH, si mette prima un gruppo di istruzioni Transact-SQL che potrebbero causare un’eccezione in un blocco BEGIN TRY. END TRY come segue:

Poi si usa un blocco BEGIN CATCH. END CATCH immediatamente dopo il blocco TRY:

Il seguente illustra un costrutto TRY CATCH completo:

Se le istruzioni tra il blocco TRY si completano senza errori, le istruzioni tra il blocco CATCH non verranno eseguite. Tuttavia, se qualsiasi istruzione all’interno del blocco TRY causa un’eccezione, il controllo si trasferisce alle istruzioni nel blocco CATCH.

Le funzioni del blocco CATCH

All’interno del blocco CATCH, si possono usare le seguenti funzioni per ottenere informazioni dettagliate sull’errore che si è verificato:

  • ERROR_LINE() restituisce il numero di linea in cui si è verificata l’eccezione.
  • ERROR_MESSAGE() restituisce il testo completo del messaggio di errore generato.
  • ERROR_PROCEDURE() restituisce il nome della stored procedure o del trigger in cui si è verificato l’errore.
  • ERROR_NUMBER() restituisce il numero dell’errore che si è verificato.
  • ERROR_SEVERITY() restituisce il livello di gravità dell’errore che si è verificato.
  • ERROR_STATE() restituisce il numero di stato dell’errore che si è verificato.

Notate che usate queste funzioni solo nel blocco CATCH. Se le usate al di fuori del blocco CATCH, tutte queste funzioni restituiranno NULL.

Costrutti TRY CATCH annidati

Potete annidare il costrutto TRY CATCH dentro un altro costrutto TRY CATCH. Tuttavia, sia un blocco TRY che un blocco CATCH possono contenere un TRY CATCH annidato, per esempio:

Esempi di TRY CATCH di SQL Server

Per prima cosa, creiamo una stored procedure chiamata usp_divide che divide due numeri:

In questa stored procedure, abbiamo messo la formula dentro il blocco TRY e chiamato le funzioni del blocco CATCH ERROR_* dentro il blocco CATCH.

In secondo luogo, chiamiamo la stored procedure usp_divide per dividere 10 per 2:

Ecco l’output

Poiché non si è verificata alcuna eccezione nel blocco TRY, la stored procedure ha completato il blocco TRY.

In terzo luogo, tentate di dividere 20 per zero chiamando la procedura memorizzata usp_divide:

L’immagine seguente mostra l’output:

Esempio di TRY CATCH di SQL Server

A causa dell’errore di divisione per zero che è stato causato dalla formula, il controllo è stato passato all’istruzione all’interno del blocco CATCH che ha restituito le informazioni dettagliate dell’errore.

SQL Serer TRY CATCH con le transazioni

All’interno di un blocco CATCH, è possibile testare lo stato delle transazioni utilizzando la funzione XACT_STATE().

  • Se la funzione XACT_STATE() restituisce -1, significa che una transazione non commettibile è in attesa, si dovrebbe emettere una dichiarazione ROLLBACK TRANSACTION.
  • Se la funzione XACT_STATE() restituisce 1, significa che una transazione committabile è in attesa. In questo caso si può emettere un comando COMMIT TRANSACTION.
  • Se la funzione XACT_STATE() restituisce 0, significa che nessuna transazione è in sospeso, quindi non è necessario intraprendere alcuna azione.

È una buona pratica testare lo stato della transazione prima di emettere un’istruzione COMMIT TRANSACTION o ROLLBACK TRANSACTION in un blocco CATCH per assicurare la coerenza.

Utilizzo di TRY CATCH con l’esempio delle transazioni

Per prima cosa, impostate due nuove tabelle sales.persons e sales.deals per la dimostrazione:

Poi, create una nuova stored procedure chiamata usp_report_error che sarà usata in un blocco CATCH per riportare le informazioni dettagliate di un errore:

Poi, sviluppate una nuova stored procedure che cancelli una riga dalla tabella sales.persons:

In questa stored procedure, abbiamo usato la funzione XACT_STATE() per controllare lo stato della transazione prima di eseguire COMMIT TRANSACTION o ROLLBACK TRANSACTION nel blocco CATCH.

Dopo di che, chiamiamo la stored procedure usp_delete_person per eliminare l’id della persona 2:

Non si è verificata alcuna eccezione.

Infine, chiama la stored procedure usp_delete_person per eliminare la persona id 1:

Si è verificato il seguente errore:

Esempio di transazione TRY CATCH in SQL Server

In questo tutorial, avete imparato ad usare il costrutto TRY CATCH di SQL Server per gestire le eccezioni nelle stored procedure.

Potresti anche essere interessato agli argomenti

Come fa SQL Server a gestire l’errore nella transazione?

Una transazione aperta che non viene riportata indietro in caso di errore può causare grossi problemi se l’applicazione va avanti senza impegnarsi o tornare indietro. Per una buona gestione degli errori in SQL Server, sono necessari sia TRY-CATCH che SET XACT_ABORT ON. Di questi due, SET XACT_ABORT ON è il più importante.

Continua…

Cos’è la gestione degli errori di sistema?

La gestione degli errori si riferisce all’anticipazione, al rilevamento e alla risoluzione degli errori di programmazione, applicazione e comunicazione. … Un errore di run-time ha luogo durante l’esecuzione di un programma, e di solito accade a causa di parametri di sistema avversi o dati di input non validi.

Continua…

Perché usiamo la gestione degli errori?

La gestione degli errori è importante perché rende più facile per gli utenti finali del vostro codice usarlo correttamente. Un altro aspetto importante è che rende il vostro codice più facile da mantenere.

Continua…

Cos’è la gestione degli errori nei DBMS?

Un’eccezione è una condizione di errore durante l’esecuzione di un programma. PL/SQL supporta i programmatori per catturare tali condizioni usando il blocco EXCEPTION nel programma e un’azione appropriata viene presa contro la condizione di errore. Ci sono due tipi di eccezioni: le eccezioni definite dal sistema.

Continua…

Cos’è la gestione degli errori e i suoi tipi?

Quindi, ci sono molti tipi di errori e alcuni di questi sono: Tipi o fonti di errore – Ci sono tre tipi di errori: errori logici, di esecuzione e di compilazione: Gli errori logici si verificano quando i programmi funzionano in modo errato ma non terminano in modo anomalo (o crash).

Continua…

Cos’è l’errore nella gestione delle eccezioni?

Le eccezioni includono sia il tipo controllato che quello non controllato. Gli errori sono principalmente causati dall’ambiente in cui il programma è in esecuzione. Il programma stesso è responsabile di causare eccezioni. Gli errori possono verificarsi sia in fase di compilazione che di esecuzione. Tempo di compilazione: ad esempio errore di sintassi.

Continua…

Come si gestisce la gestione degli errori?

Sfrutta la semantica specifica del linguaggio e rappresenta quando è successo qualcosa di eccezionale. Le eccezioni sono lanciate e catturate in modo che il codice possa recuperare e gestire la situazione e non entrare in uno stato di errore. Le eccezioni possono essere lanciate e catturate in modo che l’applicazione possa recuperare o continuare con grazia.

Continua…

Cos’è la gestione degli errori in MySQL?

MySQL fornisce un modo semplice per definire gestori che gestiscono da condizioni generali come avvertimenti o eccezioni a condizioni specifiche, ad esempio, codici di errore specifici. …

Continua…

Quali sono i tipi di eccezioni in SQL?

Ci sono tre tipi di eccezioni: Le eccezioni predefinite sono condizioni di errore definite da PL/SQL. Le eccezioni non predefinite includono qualsiasi errore standard di TimesTen. Le eccezioni definite dall’utente sono eccezioni specifiche della vostra applicazione.

Continua…

Cos’è @@ in SQL Server?

In SQL Server, il simbolo @@ è il prefisso delle variabili globali. Il server mantiene tutte le variabili globali. … I nomi delle variabili globali iniziano con un prefisso @@. Non è necessario dichiararle, poiché il server le mantiene costantemente. Sono funzioni definite dal sistema e non potete dichiararle.

Continua…

Cos’è l’errore SQL?

Gli errori delle parole chiave SQL si verificano quando una delle parole che il linguaggio di interrogazione SQL riserva ai suoi comandi e clausole è scritta male. Per esempio, scrivere “UPDTE” invece di “UPDATE” produce questo tipo di errore.

Continua…

Possiamo gestire l’errore?

Sì, possiamo catturare un errore. La classe Throwable è la superclasse di tutti gli errori e le eccezioni nel linguaggio Java. Solo gli oggetti che sono istanze di questa classe (o una delle sue sottoclassi) sono lanciati dalla Java Virtual Machine o possono essere lanciati dall’istruzione throw.

Continua…

Cos’è la gestione degli errori e delle eccezioni?

Gli errori sono una forma di eccezione non controllata e sono irrecuperabili come un OutOfMemoryError , che un programmatore non dovrebbe cercare di gestire. La gestione delle eccezioni rende il vostro codice più robusto e aiuta a prevenire potenziali fallimenti che causerebbero l’arresto incontrollato del vostro programma.

Continua…

Che tipo di gestione degli errori esistono?

Ci sono tre tipi di errori nella programmazione: (a) Errori di sintassi, (b) Errori di runtime e (c) Errori logici.

Continua…

Cos’è l’Handler in SQL?

Se si verifica un errore durante l’esecuzione di una procedura SQL, la procedura termina a meno che non si includano istruzioni per dire alla procedura di eseguire qualche altra azione. Queste istruzioni si chiamano gestori.

Continua…

Articolo precedente

Cos’è la concessione della prima casa in Qld?

Articolo successivo

Come posso convertire il mio scaldabagno a gas RV in elettrico?

You might be interested in …

Chi è la voce di Gideon in Gravity Falls?

Gravity Falls ha una fanbase impegnata, ma quali sono le possibilità che Gravity Falls stagione 3 si verifichi? Gravity Falls è l’idea di Alex Hirschche aveva bisogno di fare un’animazione che fosse una miscela di […]