Oracle PL/SQL Inserisci, aggiorna, elimina e seleziona in [Esempio]

⚡ Riepilogo intelligente

Istruzioni SQL all'interno Oracle PL/SQL gestisce ogni operazione di manipolazione dei dati, consentendo a un blocco di inserire, aggiornare, eliminare e selezionare direttamente le righe. I comandi INSERT, UPDATE, DELETE e SELECT INTO spostano e recuperano i dati all'interno del database.

  • ⚙️ Comandi DML: Le istruzioni INSERT, UPDATE, DELETE e SELECT INTO consentono di eseguire qualsiasi operazione di manipolazione dei dati all'interno di un blocco PL/SQL.
  • ➕ Inserimento dati: L'istruzione INSERT INTO aggiunge righe in base a VALORI espliciti o direttamente da un'altra tabella utilizzando un'istruzione SELECT.
  • 🔄 Aggiornamento dei dati: L'istruzione UPDATE con SET modifica i valori delle colonne, mentre una clausola WHERE opzionale limita le righe interessate.
  • 🗑️ Cancellazione dei dati: L'istruzione DELETE rimuove i record corrispondenti, mentre omettendo la clausola WHERE si svuota l'intera tabella.
  • 🎯 Seleziona in: SELECT INTO deve restituire esattamente una riga, oppure Oracle genera l'errore NODATA_FOUND o TOO_MANY_ROWS.
  • 🤖 Assistenza AI: Gli assistenti basati sull'intelligenza artificiale, come GitHub Copilot, redigono blocchi DML e segnalano la mancanza di una clausola WHERE o di un COMMIT.

Oracle PL/SQL Inserisci Aggiorna Elimina Seleziona In

Transazioni DML in PL/SQL

DML sta per Data Manipulation Language, il gruppo di SQL comandi che modificano i dati memorizzati in una tabella. All'interno di un Blocco PL/SQLQuesti comandi eseguono le operazioni di manipolazione, mentre PL/SQL fornisce la logica circostante. DML si occupa delle operazioni descritte di seguito.

  • Inserimento dati
  • Aggiornamento dei dati
  • Cancellazione dei dati
  • Selezione dei dati

In PL/SQL, la manipolazione dei dati viene eseguita esclusivamente tramite comandi SQL.

Inserimento dati

In PL/SQL, le righe vengono aggiunte a una tabella tramite il comando SQL INSERT INTO. Questo comando accetta come input il nome della tabella, le colonne di destinazione e i valori delle colonne, quindi inserisce i valori nella tabella di base.

Il comando INSERT può anche prelevare i valori direttamente da un'altra tabella utilizzando un'istruzione SELECT, anziché specificare i valori per ogni colonna. Tramite un'istruzione SELECT, è possibile inserire contemporaneamente un numero di righe pari al numero di righe presenti nella tabella di origine.

Sintassi:

BEGIN
INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>)
VALUES(<value1>,<value2>,...,<value_n>);
END;

La sintassi sopra riportata mostra il comando INSERT INTO. Il nome della tabella e i valori sono campi obbligatori, mentre i nomi delle colonne sono facoltativi quando l'istruzione INSERT fornisce valori per ogni colonna della tabella. La parola chiave VALUES è obbligatoria quando i valori vengono forniti separatamente, come mostrato sopra.

Sintassi:

BEGIN
INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>)
SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>;
END;

Questa seconda forma di INSERT INTO prende i valori direttamente da utilizzando il comando SELECT. La parola chiave VALUES non deve essere presente in questo caso perché i valori non vengono forniti separatamente.

Aggiornamento dei dati

L'aggiornamento dei dati consiste nel modificare il valore di una colonna in una riga esistente. Questo viene fatto con l'istruzione UPDATE, che accetta come input il nome della tabella, il nome della colonna e il nuovo valore, e aggiorna i dati.

Sintassi:

BEGIN
UPDATE <table_name>
SET <column1>=<value1>,<column2>=<value2>,<column_n>=<value_n>
WHERE <condition that uniquely identifies the record that needs to be updated>;
END;

La sintassi sopra riportata mostra l'istruzione UPDATE. La parola chiave SET indica al motore PL/SQL di aggiornare la colonna con il valore specificato. La clausola WHERE è facoltativa; se non viene specificata, il valore della colonna indicata viene aggiornato nell'intera tabella.

Cancellazione dei dati

L'eliminazione dei dati consiste nella rimozione di un intero record dalla tabella del database. A tale scopo si utilizza il comando DELETE.

Sintassi:

BEGIN
DELETE FROM <table_name>
WHERE <condition that uniquely identifies the record that needs to be deleted>;
END;

La sintassi sopra riportata mostra il comando DELETE. La parola chiave FROM è facoltativa e, con o senza la clausola FROM, il comando si comporta allo stesso modo. La clausola WHERE è facoltativa; se non viene specificata, l'intera tabella verrà svuotata.

Selezione dei dati

La proiezione dei dati, o recupero dati, consiste nell'estrarre i dati necessari dalla tabella del database. Questo viene realizzato tramite il comando SELECT insieme alla clausola INTO. Il comando SELECT recupera i valori dal database, mentre la clausola INTO assegna tali valori alle variabili locali del blocco PL/SQL.

Quando si utilizza un'istruzione SELECT con INTO, è necessario tenere in considerazione i seguenti punti:

  • Un'istruzione SELECT dovrebbe restituire un solo record quando si utilizza la clausola INTO, perché una variabile può contenere un solo valore. Se la SELECT restituisce più di una riga, Eccezione TOO_MANY_ROWS viene sollevato.
  • L'istruzione SELECT assegna il valore alla variabile nella clausola INTO, quindi necessita di almeno un record per popolare il valore. Se non trova alcun record, viene generata l'eccezione NO_DATA_FOUND.
  • Il numero di colonne e i relativi tipi di dati nella clausola SELECT devono corrispondere al numero di variabili e ai relativi tipi di dati nella clausola INTO.
  • I valori vengono recuperati e popolati nello stesso ordine indicato nell'istruzione.
  • La clausola WHERE è facoltativa e consente di imporre ulteriori restrizioni sui record recuperati.
  • Un'istruzione SELECT può essere utilizzata nella clausola WHERE di altre istruzioni DML per definire i valori delle condizioni.
  • Un'istruzione SELECT utilizzata all'interno di istruzioni INSERT, UPDATE o DELETE non dovrebbe avere una clausola INTO, poiché in questi casi non popola alcuna variabile.

Sintassi:

BEGIN
SELECT <column1>,...,<column_n> INTO <variable1>,...,<variable_n>
FROM <table_name>
WHERE <condition to fetch the required records>;
END;

La sintassi sopra riportata mostra il comando SELECT-INTO. La parola chiave FROM è obbligatoria e identifica la tabella da cui devono essere recuperati i dati. La clausola WHERE è facoltativa; se non viene specificata, verranno recuperati i dati dall'intera tabella.

Esempio 1: In questo esempio, vedremo come eseguire operazioni DML in PL/SQL. Inseriremo i quattro record seguenti nella tabella emp.

EMP_NAME EMP_NO STIPENDIO MANAGER
BBB 1000 25000 AAA
XXX 1001 10000 BBB
AAAA 1002 10000 BBB
ZZZ 1003 7500 BBB

Successivamente aggiorneremo lo stipendio di 'XXX' a 15000, elimineremo il record del dipendente 'ZZZ' e infine visualizzeremo i dettagli del dipendente 'XXX'.

Lo screenshot qui sotto mostra il blocco PL/SQL completo utilizzato per questo esempio.

Oracle Blocco PL/SQL che esegue inserimento, aggiornamento, eliminazione e selezione nella tabella emp.

DECLARE
l_emp_name VARCHAR2(250);
l_emp_no NUMBER;
l_salary NUMBER;
l_manager VARCHAR2(250);
BEGIN
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('BBB',1000,25000,'AAA');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('XXX',1001,10000,'BBB');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('YYY',1002,10000,'BBB');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('ZZZ',1003,7500,'BBB');
COMMIT;
Dbms_output.put_line('Values Inserted');
UPDATE EMP
SET salary=15000
WHERE emp_name='XXX';
COMMIT;
Dbms_output.put_line('Values Updated');
DELETE emp WHERE emp_name='ZZZ';
COMMIT;
Dbms_output.put_line('Values Deleted');
SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX';
Dbms_output.put_line('Employee Detail');
Dbms_output.put_line('Employee Name:'||l_emp_name);
Dbms_output.put_line('Employee Number:'||l_emp_no);
Dbms_output.put_line('Employee Salary:'||l_salary);
Dbms_output.put_line('Employee Manager Name:'||l_manager);
END;
/

Produzione:

Values Inserted
Values Updated
Values Deleted
Employee Detail
Employee Name:XXX
Employee Number:1001
Employee Salary:15000
Employee Manager Name:BBB

Code Spiegazione:

  • Code righe 2-5: Dichiarazione delle variabili.
  • Code righe 7-14: Inserimento dei record nella tabella emp.
  • Code riga 15: Conferma delle transazioni di inserimento.
  • Code righe 17-19: Aggiornamento dello stipendio del dipendente 'XXX' a 15000.
  • Code riga 20: Conferma della transazione di aggiornamento.
  • Code riga 22: Eliminazione del record di 'ZZZ'.
  • Code riga 23: Conferma della transazione di eliminazione.
  • Code riga 25: Selezionando il record di 'XXX' e popolando le variabili l_emp_name, l_emp_no, l_salary e l_manager.
  • Code righe 26-30: Visualizzazione dei valori dei record recuperati.

DOMANDE FREQUENTI

No. Il PL/SQL statico non può eseguire DDL direttamente. Costruisci l'istruzione come stringa ed eseguila con ESEGUIRE IMMEDIATOche gestisce le operazioni CREATE, ALTER e DROP in fase di esecuzione.

Una SELECT INTO deve restituire esattamente una riga. Per leggere più righe, utilizzare un'istruzione esplicita cursore con un ciclo FETCH o BULK COLLECT INTO in una raccolta.

DELETE è un'operazione DML: rimuove le righe selezionate con una clausola WHERE e può essere annullata. TRUNCATE è un'operazione DDL: cancella tutte le righe istantaneamente, esegue il commit automatico e non può essere annullata.

Sì. Le modifiche INSERT, UPDATE e DELETE rimangono nella sessione finché non COMMETTERE; PL/SQL non esegue il commit automatico. Utilizzare COMMIT per salvare o ROLLBACK per annullare.

L'operazione MERGE esegue un'operazione di upsert, ovvero aggiorna le righe che soddisfano una condizione di join e inserisce quelle che non la soddisfano, in un'unica istruzione anziché in passaggi separati di UPDATE e INSERT.

RETURNING INTO acquisisce i valori delle colonne dalle righe appena interessate da un'operazione INSERT, UPDATE o DELETE e li memorizza in variabili, evitando un'ulteriore istruzione SELECT per leggere i dati modificati.

Sì. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. Copilota GitHub Il programma genera bozze di blocchi INSERT, UPDATE, DELETE e SELECT INTO a partire da un breve commento, suggerisce variabili di bind e completa gli elenchi di colonne, anche se è consigliabile rivedere prima la logica.

Gli assistenti basati sull'intelligenza artificiale analizzano il DML alla ricerca di clausole WHERE mancanti, COMMIT assenti e concatenazioni non sicure, quindi suggeriscono correzioni e spiegano gli errori. Questa revisione tramite apprendimento automatico individua le modifiche rischiose prima che raggiungano l'ambiente di produzione.

Riassumi questo post con: