pl sql transactions commit
Informazioni sulle transazioni PL SQL con esempi di istruzioni COMMIT, ROLLBACK e SAVEPOINTS:
In questo articolo, continueremo con Serie PL / SQL . Nel Pacchetto PL SQL tutorial, abbiamo imparato a conoscere il pacchetto, i suoi vantaggi, le specifiche e la struttura.
Qui esploreremo le transazioni PL SQL e le loro caratteristiche. Discuteremo alcune istruzioni PL / SQL come COMMIT, ROLLBACK, SAVEPOINTS e così via che sono correlate alle transazioni PL SQL.
Impareremo anche le istruzioni LOCK TABLe e AUTOCOMMIT in PL SQL.
Cominciamo con la discussione !!
Cosa imparerai:
Transazioni PL SQL
Un componente atomico del lavoro in un database che dispone di più istruzioni SQL è chiamato transazione. Viene indicato come atomico perché una volta che sono presenti modifiche interessate dalle istruzioni SQL, è possibile eseguire il commit (aggiornamenti indefiniti al database) o il rollback (annullare gli aggiornamenti al database).
È necessario eseguire il commit di un'istruzione SQL altrimenti può essere annullata e tutte le modifiche che l'istruzione SQL avrebbe dovuto apportare rimangono annullate. Se il programma PL / SQL viene interrotto durante la transazione, non vi è alcun impatto sul database e viene ripristinato allo stato originale.
COMMIT e ROLLBACK si prendono cura del fatto che le modifiche al database sono eterne o annullate. L'istruzione SAVEPOINT punta alla posizione attuale nell'elaborazione della transazione.
Inizia l'elaborazione della transazione
Ogni transazione ha un inizio e una conclusione.
I seguenti incidenti segnano l'inizio di una transazione:
- Dopo la connessione al database, viene eseguita la prima istruzione SQL.
- Una nuova istruzione SQL viene eseguita dopo il completamento dell'istruzione SQL precedente.
Fine elaborazione transazione
Ogni programma PL / SQL dovrebbe avere un'istruzione COMMIT o ROLLBACK. Dipende esclusivamente dalla logica di programmazione se dobbiamo utilizzare un COMMIT o un ROLLBACK dopo la transazione.
Se le istruzioni COMMIT o ROLLBACK non vengono utilizzate, dipende dall'ambiente host come dovrebbe essere lo stato finale del database. Per esempio, in un ambiente SQL * PLUS, se un blocco di codice PL / SQL è senza un'istruzione COMMIT o ROLLBACK, lo stato del database dipenderà dal blocco di codice eseguito subito dopo.
In un ambiente Oracle, se includiamo un'istruzione COMMIT o eseguiamo il comando DISCONNECT, EXIT o QUIT dopo aver eseguito una definizione dei dati o una query di controllo dei dati, viene eseguito il commit della transazione. Inoltre, se includiamo un'istruzione ROLLBACK, la transazione viene annullata.
Pertanto una transazione può essere terminata a causa di uno degli scenari seguenti:
- Viene eseguita un'istruzione ROLLBACK o COMMIT.
- Una query DDL ( per esempio, viene eseguita un'istruzione di creazione della tabella), dopodiché viene eseguito COMMIT per impostazione predefinita.
- Una query DCL ( per esempio, viene eseguita un'istruzione GRANT), dopodiché viene eseguito COMMIT per impostazione predefinita.
- L'utente termina la connessione al database.
- L'utente esegue l'istruzione EXIT per uscire da SQL * PLUS, dopodiché COMMIT viene eseguito per impostazione predefinita.
- SQL * PLUS rileva una chiusura insolita, a seguito della quale ROLLBACK viene eseguito per impostazione predefinita.
- Una query DML non viene eseguita correttamente, dopodiché viene eseguito ROLLBACK per impostazione predefinita per riportare il database allo stato originale.
IMPEGNO per modifiche permanenti
L'istruzione COMMIT è in grado di terminare la presente transazione e apportare una modifica permanente come eseguita dalla transazione. Una volta eseguito COMMIT, possiamo ottenere i dati modificati.
Quando viene eseguita l'istruzione COMMIT, tutte le righe della tabella interessate vengono rilasciate dai blocchi. Ci aiuta anche a sbarazzarci di SAVEPOINT. Un'istruzione COMMIT può essere facoltativamente accompagnata dall'istruzione WORK (COMMIT WORK) che viene aggiunta solo per migliorare la leggibilità del codice.
Nel caso in cui una transazione fallisca al momento di COMMIT e lo stato della transazione non è noto, in quel momento il testo COMMENT nel codice PL / SQL viene memorizzato in un dizionario dati insieme all'id della transazione.
Sintassi per la transazione COMMIT:
COMMIT;
Consideriamo una tabella denominata INSEGNANTI.
Abbiamo creato la tabella INSEGNANTI con l'aiuto dell'istruzione SQL fornita di seguito:
CREATE TABLE TEACHERS ( CODE INT NOT NULL, SUBJECT VARCHAR (15) NOT NULL, NAME VARCHAR (15) NOT NULL, PRIMARY KEY (CODE) );
Inserire i valori in questa tabella e quindi eseguire il commit della transazione nel modo seguente:
INSERT INTO TEACHERS VALUES (1, 'SELENIUM', 'TOM'); INSERT INTO TEACHERS VALUES (2, 'UFT', 'SAM'); INSERT INTO TEACHERS VALUES (3, 'JMETERE', 'TONK'); COMMIT;
Successivamente, viene eseguita la query seguente:
SELECT * FROM TEACHERS;
Produzione:
ROLLBACK Per annullare le modifiche
Se una transazione attuale viene terminata con un'istruzione ROLLBACK, annullerà tutte le modifiche che dovrebbero aver luogo nella transazione.
Un'istruzione ROLLBACK ha le seguenti caratteristiche elencate di seguito:
- Il database viene ripristinato con il suo stato originale con un'istruzione ROLLBACK nel caso in cui abbiamo cancellato per errore una riga importante dalla tabella.
- In caso di un'eccezione che ha portato al fallimento dell'esecuzione di un'istruzione SQL, un'istruzione ROLLBACK ci consente di saltare al punto di partenza del programma da cui è possibile adottare misure correttive.
- Gli aggiornamenti effettuati al database senza un'istruzione COMMIT possono essere revocati con un'istruzione ROLLBACK.
Sintassi per la transazione ROLLBACK:
ROLLBACK;
Sintassi per la transazione ROLLBACK con SAVEPOINT:
ROLLBACK (TO SAVEPOINT );
Qui, il save_n è il nome del SAVEPOINT.
Consideriamo la tabella INSEGNANTI che abbiamo creato in precedenza.
Implementazione del codice con ROLLBACK:
DELETE FROM TEACHERS WHERE CODE= 3; ROLLBACK;
Successivamente, viene eseguita la query seguente:
SELECT * FROM TEACHERS;
L'output del codice precedente dovrebbe essere:
Nel codice precedente, abbiamo eseguito un'istruzione DELETE che dovrebbe eliminare il record dell'insegnante con CODE uguale a 3. Tuttavia, a causa dell'istruzione ROLLBACK, non c'è alcun impatto sul database e l'eliminazione non viene eseguita.
SAVEPOINT per annullare le modifiche parziali
SAVEPOINT fornisce nome e identificazione all'attuale punto di elaborazione della transazione. In genere è associato a un'istruzione ROLLBACK. Ci consente di ripristinare alcune sezioni di una transazione non toccando l'intera transazione.
VPN gratis netflix
Quando applichiamo ROLLBACK a un SAVEPOINT, tutti i SAVEPOINT inclusi in seguito a quel particolare SAVEPOINT vengono rimossi (cioè se abbiamo contrassegnato tre SAVEPOINT e applicato un ROLLBACK sul secondo SAVEPOINT, automaticamente il terzo SAVEPOINT verrà eliminato.)
Un'istruzione COMMIT o ROLLBACK elimina tutti i SAVEPOINTS. I nomi dati a SAVEPOINT sono identificatori non dichiarati e possono essere riapplicati più volte all'interno di una transazione. C'è un movimento di SAVEPOINT dalla vecchia alla presente posizione all'interno della transazione.
Un ROLLBACK applicato a un SAVEPOINT influisce solo sulla parte in corso della transazione. Quindi un SAVEPOINT aiuta a dividere una lunga transazione in piccole sezioni posizionando punti di convalida.
Sintassi per la transazione SAVEPOINT:
SAVEPOINT ;
Qui, save_n è il nome del SAVEPOINT.
Consideriamo nuovamente la tabella INSEGNANTI che abbiamo creato in precedenza.
Implementazione del codice di ROLLBACK WITH SAVEPOINT:
INSERT INTO TEACHERS VALUES (4, 'CYPRESS', 'MICHEAL'); SAVEPOINT s; INSERT INTO TEACHERS VALUES (5, 'PYTHON', 'STEVE'); INSERT INTO TEACHERS VALUES (6, 'PYTEST', 'ARNOLD'); ROLLBACK TO s; INSERT INTO TEACHERS VALUES (7, 'PROTRACTOR', 'FANNY'); COMMIT;
Successivamente, viene eseguita la query seguente:
SELECT * FROM TEACHERS;
L'output del codice precedente dovrebbe essere:
Nel codice sopra, dopo ROLLBACK con SAVEPOINT S viene applicato, sono state inserite solo altre due righe, ovvero insegnanti con CODICE 4 e 7, rispettivamente. Tieni presente che durante la creazione della tabella sono stati aggiunti insegnanti con codice 1, 2 e 3.
Tabella LOCK in PL / SQL
L'istruzione LOCK in PL / SQL abilita il blocco dell'intero database in modalità di blocco. Questo determina se vogliamo condividere o non consentire l'accesso alla tabella.
Facciamo un esempio di una tabella di blocco:
LOCK TABLE teachers IN ROW SHARE MODE NOWAIT;
La query precedente blocca la tabella TEACHERS in modalità di condivisione riga. Una modalità di condivisione delle righe fornisce l'autorizzazione per un utilizzo simultaneo a una tabella. Non consente agli utenti di bloccare l'intera tabella per uso individuale. Dopo l'esecuzione di un COMMIT o ROLLBACK, i blocchi della tabella vengono rilasciati. La parola chiave NOWAIT viene utilizzata per indicare che al database non è consentito attendere il rilascio di un blocco.
La modalità di blocco è importante per concludere quali altri blocchi possono essere applicati a una tabella.
Parliamo di alcune modalità LOCK disponibili in PL / SQL:
Sl. No | MODALITÀ DI BLOCCO | SCOPO |
---|---|---|
1 | ROW SHARE | Consente a più utenti di utilizzare la tabella contemporaneamente. Tuttavia, agli utenti non è consentito bloccare l'intera tabella per uso esclusivo. |
Due | RIGA ESCLUSIVA | Consente a più utenti di utilizzare la tabella contemporaneamente. Tuttavia, agli utenti non è consentito bloccare l'intera tabella per l'utilizzo esclusivo in modalità di condivisione. |
3 | CONDIVIDI AGGIORNAMENTO | Consente a più utenti di utilizzare la tabella contemporaneamente. Tuttavia, agli utenti non è consentito bloccare l'intera tabella per uso esclusivo. |
4 | CONDIVIDERE | Ci consente di eseguire più query sul tavolo contemporaneamente. Tuttavia, agli utenti non è consentito modificare la tabella bloccata. |
5 | SHARE ROW ESCLUSIVO | Consente agli utenti con accesso in sola lettura alla tabella. Non sono autorizzati a modificare la tabella o bloccare la tabella in modalità di condivisione. |
6 | ESCLUSIVO | Consente solo di eseguire query sulla tabella bloccata. |
Controllo automatico delle transazioni in PL / SQL
Possiamo eseguire la configurazione in modo tale che un'istruzione COMMIT venga eseguita per impostazione predefinita ogni volta che viene eseguita un'istruzione INSERT o DELETE. Questo viene fatto impostando la variabile d'ambiente AUTOCOMMIT su ON.
Sintassi:
SET AUTOCOMMIT ON;
Anche in questo caso, questo può essere disattivato impostando la variabile di ambiente AUTOCOMMIT su OFF.
Sintassi:
SET AUTOCOMMIT OFF;
Domande e risposte frequenti
D # 1) Qual è la transazione in PL SQL?
Risposta: Una transazione è un gruppo di istruzioni di calcolo dei dati SQL che funzionano come un'unità atomica. Tutte le transazioni sono di natura atomica, che vengono sottoposte a commit o rollback.
D # 2) Cos'è COMMIT in PL SQL?
Risposta: Un'istruzione COMMIT viene utilizzata per apportare una modifica permanente al database mediante la transazione attuale. Rende la modifica al database visibile agli utenti.
Q # 3) Come si conclude una transazione?
Risposta: Una transazione termina con un'istruzione COMMIT o ROLLBACK esplicitamente. Può anche essere terminato incondizionatamente dopo l'esecuzione di un'istruzione DML.
D # 4) Possiamo impegnarci in un trigger?
Risposta: Sì, possiamo eseguire il commit in trigger solo se tale transazione trigger è autonoma dalla transazione padre.
Q # 5) SELEZIONA una transazione?
Risposta: Sì, SELECT è una transazione che ha tutte le caratteristiche di una transazione.
D # 6) Come si ripristina una transazione in Oracle?
Risposta: È necessario eseguire un'istruzione ROLLBACK per eseguire il rollback di una transazione in Oracle. Annullerà tutte le modifiche apportate dalla transazione al database e sarà ripristinato al suo stato originale.
Conclusione
In questo tutorial, abbiamo discusso in dettaglio alcuni concetti di base delle transazioni PL SQL che sono essenziali per la gestione delle transazioni PL SQL. Abbiamo trattato i seguenti argomenti elencati di seguito:
- Transazione.
- Utilizzo di COMMIT in una transazione.
- Cos'è un ROLLBACK in una transazione?
- Utilizzo di ROLLBACK con SAVEPOINT in una transazione.
- Tavolo LOCK.
Lettura consigliata
- Tutorial PL SQL per principianti con esempi | Cos'è PL / SQL
- Sviluppo di applicazioni per database Oracle: Oracle SQL e PL / SQL
- Pacchetto PL SQL: Tutorial pacchetto Oracle PL / SQL con esempi
- Differenza tra SQL Vs MySQL Vs SQL Server (con esempi)
- Formato PL SQL Datetime: funzioni di data e ora in PL / SQL
- Guida completa alla gestione delle eccezioni PL SQL con esempi
- Differenze esatte tra SQL e NoSQL e sapere quando utilizzare NoSQL e SQL
- Tutorial sul database Oracle - Che cos'è il database Oracle?