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.

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.
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.

