Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita...

23
Gestione dati DML Statement

Transcript of Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita...

Page 1: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

Gestione datiDML Statement

Page 2: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

DML – Data Manipultion Language

Un’operazione DML viene eseguita quando:

• aggiungendo nuove righe ad una tabella

• modificando le righe esistenti di una tabella

• cancellando righe da una tabella

Una transazione consiste in un insieme di

statement DML che formano un’unità logica di

lavoro.

Page 3: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

INSERT

Sintassi per inserire righe in una tabella

INSERT INTO tabella [(colonna,

[,colonna…])]

VALUES (value [,value]);

Con questa sintassi verrà inserita solo una riga

per volta

Page 4: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

INSERT

• inserire valori per ciascuna colonna della

tabella

• la lista di valori deve comparire nell’ordine delle colonne nella tabella

• non è obbligatorio inserire la lista delle colonne nella clausola insert, per quanto sia consigliabile per chiarezza

• usare gli apici per inserire valori quali caratteri e date

Page 5: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

INSERIMENTO DI VALORI NULLI

• Metodo implicito: omettere la colonna nela

lista INSERT INTO departments (department_id, department_name)

VALUES (30, ‘Nuovo dipartimento’);

• Metodo espicito : specificare NULL nella clausola VALUES

INSERT INTO departments

VALUES (30, ‘Nuovo dipartimento’, NULL, NULL);

Page 6: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

ERRORI DI INSERIMENTO

• tentativo di inserire un valore nullo per una colonna definita NOT NULL

• duplicazione di valori che violano il constraint di unicità

• foreign key constraint violato

• violato constraint CHECK (assicurano l’integrità di una colonna limitando i valori accettati da una colonna)

• tipo di dato non coerente con la definizione della colonna

• valore troppo grande per la colonna

Page 7: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

INSERT

È possibile utilizzare funzioni speciali per inserire valori nella tabella.

INSERT INTO employees (employee_id, first_name, last_name,

email, phone_number, hire_date,

jod_id, salary, commission_pct,

manager_id, department_id)

VALUES (113, ‘Luis’, ‘Popp’,

‘LPOPP’,’515.124.4567’, SYSDATE,

‘AC_ACCOUNT’, 6900, NULL,

205, 100);

Page 8: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

INSERT

Esempio di inserimento campo data

INSERT INTO employees

VALUES (113, ‘Den’, ‘Raphealy’,

‘DRAPHELY’,’515.127.4561’,

TO_DATE(‘FEB 3, 1999’,’MON DD, YYYY’),

‘AC_ACCOUNT’, 11000, NULL, 205, 100);

Normalmente la data viene inserita nel formatoDD-MON-YY. Se deve essere inserita in un formato differente occorre usare la funzione TO_DATE per specificarne il formato.

Page 9: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

INSERIMENTO DI PIÙ RIGHE

• scrivere uno statement INSERT con una subquery

• non usare la clausola VALUES

• scrivere la giusta corrispondenza tra i campi della tabella e quelli della subquery e verificare i data type

INSERT INTO sales_reps (id, name, salary, commission_pct)

SELECT employee_id, last_name, salary, commission_pct

FROM employees

WHERE job_id LIKE ‘%REP%’;

Page 10: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

INSERT CON LE SUBQUERY

INSERT INTO (SELECT employee_id, last_name, email, hire_date, job_id, salary, department_id FROM employees WHERE department_id = 50)VALUES (99999, ‘Taylor’, ‘DTAYLOR’, TO_DATE(’07-JUN-99’,’DD-MON-YY’), ‘ST_CLERK’,500,50);

La select list della subquery deve avere lo stesso numero di colonne della lista valori nella clausola VALUES.

Page 11: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

COPIA DI TABELLE

• mantenendo valide le regole della slide precedente per creare una copia della tabella usare SELECT *

INSERT INTO copy_emp

SELECT *

FROM employees;

Page 12: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

MODIFICA DEI DATI IN UNA TABELLA

• usare lo statement UPDATE per modificare le righe in una tabella

UPDATE tableSET colonna = valore [, colonna = valore, …][WHERE condizione];

• se richiesto è possibile modificare più righe contemporaneamente (con lo stesso statement)

• utilizzare la primary key per isentificare una singola riga. Utilizzare le altre colonne può causare la modifica involontaria di più righe

Page 13: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

MODIFICA DEI DATI IN UNA TABELLA

• specificare la riga o le righe che devono essere modificare con la clausola WHERE

UPDATE employeesSET department_id = 70WHERE employee_id = 113;

• omettendo la clausola WHERE verranno modificate tutte le righe della tabella

UPDATE copy_empSET department_id = 110;

Page 14: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

MODIFICA COLONNE CON UNA SUBQUERY

• modificare job_id e salario dell’impiegato 114 con i dati dell’impiegato 205

UPDATE employeesSET job_id = (SELECT job_id FROM employees WHERE employee_id = 205), salary = (SELECT salary FROM employees WHERE employee_id = 205)WHERE employee_id = 114;

Page 15: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

UPDATE

• è possibile modificare il campo di una tabella assegnado un valore proveniente da un’altra tabella

UPDATE copy_empSET department_id = (SELECT department_id FROM employees WHERE employee_id = 100)WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 200);

Page 16: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

ERRORI: INTEGRITY CONSTRAINT

UPDATE employeesSET department_id = 55WHERE department_id = 110;

UPDATE employees *ERRORE at line 1:ORA-02291: integrity constraint (HR.EMP_DEPT_PK) violated -Parent key not found

si è cercato di modificare un record con un valore che viola il vincolo di integrità. Nella tabella DEPARTMENTS (tabella parent) non esiste il record 55

Page 17: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

DELETE

È possibile cancellare righe da una tabella usando lo statement DELETE

DELETE [FROM] tabella[WHERE condizione;

NOTA: se nessuna riga viene cancellata viene restituito il messaggio “0 rows deleted”

Page 18: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

DELETE

• specificare le righe da cancellare con la clausola WHERE

DELETE FROM departmentsWHERE department_name = ‘Finance’;

• tutte le righe della tabella verranno cancellate se si omette la clausola WHERE

DELETE FROM copy_emp;

Page 19: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

DELETE

È possibile cancellare righe da una tabella usando i valori di un’altra tabella

DELETE FROM employeesWHERE department_id = (SELECT department_id FROM departments WHERE department_name LIKE ‘%Public%’);

Page 20: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

ERRORI: INTEGRITY CONSTRAINT

DELETE FROM departmentsWHERE department_id = 60;

DELETE FROM departments *ERRORE at line 1:ORA-02292: integrity constraint (HR.EMP_DEPT_PK) violated -Child record found

si è cercato di modificare un record con un valore che viola il vincolo di integrità. Cercando di cancellare il dipartimento 60 ritorna un errore perché il numero di dipartimento è usato dalla foreign key della tabella employees

Page 21: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

WITH CHECK OPTION

• una subquery è usata per identificare una tabella e le colonne di uno statement DML

• WITH CHECK OPTION indica che non è permesso fare modifiche (INSERT; UPDATE, DELETE) alle righe che non sono nella subquery

INSERT INTO (SELECT employee_id, last_name, email, hire_date, job_id, salary FROM employees WHERE department_id = 50 WITH CHECK OPTION)VALUES (99999, ‘Smith’, ‘JSMITH’, TO_DATE(’07-JUN-99’,’DD-MON-YY’), ‘ST_CLERK’,5000);

La subquery identifica le righe che sono del dipartimento 50, ma il campo department_id non è nella select list, quindi il valore non è fornito per esso nella VALUES list. Inserendo questa riga risulterebbe il department_id nullo ma non è così nella subquery

Page 22: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

MERGE

• è possibile effettuare una insert o un’update in base a certe condizioni usando lo statement MERGE

MERGE INTO tabella alias_tabella INTO indica la tabella in cui verrà fatto l’insert o l’update

USING (tabella|vista|subquery) alias indica la sorgente dati per l’inserimento o l’update

ON (condizione di join) WHEN MATCHED THEN UPDATE SET col1 = col_val1, col2 = col2_val WHEN NOT MATCHED THEN INSERT (lista_colonne) VALUES (lista_valori);

Page 23: Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.

MERGE

Esempio

MERGE INTO copy_emp cUSING employees eON (c.employee_id = e.employee_id) WHEN MATCHED THEN UPDATE SET c.first_name = e.first_name; c.last_name = e.last_name … c.department_id = e.department_id WHEN NOT MATCHED THEN INSERT VALUES(e.employee_id, e.first_name, e.last_name, e.email, e.phone_number, e.hire_date, e.job_id, e.salary, e.commission_pct, e.manager_id, e.department_id);

Inserisce o modifica i dati nella tabella copy_emp utilizzando i record della tabella employees