DUGI, DB2 User Group Italia. i Trigger INSTEAD OF ; SELECT FROM INSERT, UPDATE, MERGE, DELETE con Colonne INCLUDE



Documenti analoghi
Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Il linguaggio SQL: trigger. Versione elettronica: 04.7.SQL.trigger.pdf

Lezione 8. Metadati, Viste e Trigger

Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

Basi di Dati: Corso di laboratorio

Il linguaggio SQL: viste e tabelle derivate

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Oracle PL/SQL. Motivazioni

SQL PER LA DEFINIZIONE DI BASI DI DATI

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

Capitolo 7. Esercizio 7.1

PL/SQL PL/SQL. Ordine degli elementi dei triggers di Oracle. Differenze nei triggers. Versione dei trigger e PSM di Oracle

Nozione ed uso. Operazioni eseguite automaticamente ogni volta che avviene un certo evento Uso:

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Gestione delle tabelle

Sistemi Mobili e Wireless Android - Dati persistenti: SQLite

SQL non è solo un linguaggio di interrogazione (Query Language), ma. Un linguaggio per la definizione di basi di dati (Data-definition language (DDL))

TRIGGER Regole Attive (Trigger) OLD_TABLE NEW_TABLE old new

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

2104 volume III Programmazione

Vincoli e Triggers. Vincoli. Tipo di vincoli. Chiavi esterne

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Basi di Dati. S Q L Lezione 5

Data Management Software. Il linguaggio SQL. Raggruppamenti. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management Marzo 2004

Il linguaggio SQL: query innestate

GERARCHIE RICORSIVE - SQL SERVER 2008

DBMS (Data Base Management System)

Procedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM

Data warehouse in Oracle

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

Definizione di domini

User Tools: DataBase Manager

Esercitazione 02: JDBC, SQL e DB SAMPLE

Linguaggio SQL: fondamenti D B M G. Gestione delle tabelle

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

Istruzioni DML di SQL

07. Ottimizzare le istruzioni SQL

SQL - Funzioni di gruppo

Giovanna Rosone 04/03/ /03/2010 SQL, Istruzioni per la modifica dello schema

CONCETTO DI ANNIDAMENTO

SQL Server. SQL server e un RDBMS di tipo client/server che utilizza Transact-SQL per gestire la comunicazione fra un client e SQL Server

********************* MODIFICA STRUTTURA DI UNA TABELLA (inserimento di un nuovo campo) ALTER TABLE Personale ADD Nascita date;

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

Introduzione a MySQL

Stored Procedures. Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma

Corso di Laboratorio di Basi di Dati

Azioni. Select e join non consentono di modificare il contenuto del DB. Inserzione di nuovi dati. Azioni desiderate. Aggiornamento di dati

MySQL Command Line Client: operazioni fondamentali

Informatica per le discipline umanistiche 2 lezione 10

SQL/OLAP. Estensioni OLAP in SQL

Volumi di riferimento

SQL (STRUCTURED QUERY LANGUAGE)

MySQL Database Management System

Corso sul linguaggio SQL

Database Lezione 1. Sommario. - Introduzione - Tabelle e chiave primaria - Query - Calcoli ed alias - Ordinamento

Nella relazione CINEMA, Nome è chiave secondaria. Nella relazione FILM, CodRegista, e CodProtagonista sono chiavi esterne sulla tabella PERSONE.

OSSIF WEB. Manuale query builder

Esercitazione di riepilogo sulle Query MySQL Giugno 2011 Classe VB Informatica

Basi di dati (8) Docente: Andrea Bulgarelli. Università di Modena e Reggio Emilia. andrea.bulgarelli@gmail.com Argomento: trigger e cursori (1.

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:

PHP e Structured Query Language

SQL Sintassi Dei Comandi

1. Le macro in Access 2000/2003

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Tipi MULTISET: accesso

MySQL Database Management System

Form Editor. Dove NomeProfilo è personalizzabile.

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

Laboratorio di Basi di Dati e Web

IL LINGUAGGIO SQL IDENTIFICATORI E TIPI DI DATI COMANDI E ISTRUZIONI

Capitolo 13. Interrogare una base di dati

Introduzione al corso

OR true null false true true true true null true null null false true null false NOT

Operazioni sui database

DUE GRUPPI DI COMANDI

SQL Server. Applicazioni principali

DATABASE.

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

Il linguaggio SQL: le basi

EDI Manuale Sistemista. EDI Manuale Sistemista

Dispensa di database Access

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

Manuale utente Volta Control

ACCESSO Per accedere al sito è necessario autenticarsi con CODICE SOCIETA e PASSWORD utilizzando poi il tasto Login.

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

ROUTINE E PROGRAMMAZIONE

SQL. Alcune note sulla definizione dei dati

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

Raggruppamenti Conti Movimenti

Basi di Dati e Sistemi Informativi. Structured Query Language

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query

Interrogazioni complesse. SQL avanzato 1

a.a. 2012/13 12 Novembre 2012 Preparazione al Test in itinere, Compito A 1. Modellare tramite uno schema entità- relazione la seguente base di dati:

Transcript:

DUGI, DB2 User Group Italia Milano, 9 Aprile 2013 -- Roma 10 Aprile 2013 DB2 for z/os i Trigger INSTEAD OF ; SELECT FROM INSERT, UPDATE, MERGE, DELETE con Colonne INCLUDE massimo MACERA massimo MACERA IBM Italia, Software Group Education 1

DOCENDO DISCIMUS Le informazioni contenute in questa presentazione non sono state sottoposte a nessuna revisione formale da parte di IBM e vengono distribuite così come sono, senza nessuna garanzia, né esplicita, né implicita. Chi utilizza queste informazioni lo fa sotto la propria responsabilità. Questo materiale è allineato ad una determinata versione del prodotto DB2 Mainframe e pertanto può essere soggetto a miglioramenti o a PTF (Programming Temporary Fixes) successivi alla data di rilascio di queste pagine. Questa presentazione e tutte quelle degli anni precedenti, possono essere scaricate in formato pdf collegandosi al seguente sito internet: http://cid-6d23af35b0e6758e.office.live.com/browse.aspx/.public 2

DOCENDO DISCIMUS 3

Definizione : Vista Read Only Definizione: una Vista è read-only se si verifica almeno una delle seguenti condizioni: La prima clausola FROM identifica più di una tabella o vista, o identifica una table function, una nested table, oppure una common table. La prima clausola SELECT specifica l opzione DISTINCT La fullselect più esterna contiene la clausola GROUP BY. La fullselect più esterna contiene la clausola HAVING. La prima clausola SELECT contiene una funz. di aggregazione (SUM, AVG, MIN, ) La vista contiene una subquery che accede la stessa tabella della fullselect esterna. La prima clausola FROM identifica una Vista read-only La prima clausola FROM identifica una Materialized Query Table system-maintained. La fullselect esterna NON è una subselect (contiene un operatore SET). 4

Modificare i Dati attraverso una Vista Un utente che fa INSERT, UPDATE, DELETE, TRUNCATE sulla Vista, ripercuote questi cambiamenti sulla tabella di base da cui la Vista deriva. Però queste istruzioni SQL che modificano i dati reali attraverso la vista sono possibili solamente se la Vista non è"read-only". Una Vista read-only non può essere oggetto di una istruzione SQL di INSERT, UPDATE, DELETE, TRUNCATE. La subquery di un predicato sulla tabella di base, non può riferire una Vista che include GROUP BY o HAVING. Per fare INSERT, UPDATE, DELETE, TRUNCATE su una Vista read only si possono usare i Triggers INSTEAD OF. Questi Triggers, fanno credere all utente di modificare i dati della Vista (anche se questa è read-only), ma in realtà vanno a modificare i dati direttamente sulla tabella di base. 5

Trigger INSTEAD OF Diversamente dagli altri trigger che sono definiti solo su tabelle, i trigger INSTEAD OF sono definiti soltanto sulle Viste. i trigger INSTEAD OF sono trigger definiti solamente sulle Viste, che sono eseguiti al posto delle istruzioni INSERT, UPDATE, or DELETE lanciate sulle Viste read-only. in pratica, un INSERT, UPDATE, DELETE lanciato su una Vista read-only scatena un Trigger fa Insert, Update, Delete sulle Tabelle Base da cui la vista deriva. 6

Esempio di Trigger INSTEAD OF Creiamo una Tabella WEATHER che memorizza le diverse Città e le rispettive Temperature espresse in gradi Fahrenheit: Poi creiamo una Vista read-only di nome CELSIUS_WEATHER per quegli utenti che preferiscono lavorare coi gradi Celsius anziché Fahrenheit: CREATE TABLE WEATHER ( CITY VARCHAR(25), TEMPF DECIMAL(5,2) ) ; CREATE VIEW CELCIUS_WEATHER (CITY, TEMPC) AS SELECT CITY, (TEMPF 32 ) * 5.00 /9.00 FROM WEATHER ; infine creiamo un Trigger INSTEAD OF sulla Vista CELSIUS_WEATHER che fa credere all utente di inserire sulla vista i gradi Celsius, mentre invece il Trigger inserisce i corrispondenti gradi Fahrenheit sulla tabella WEATHER: CREATE TRIGGER CW_INSERT INSTEAD OF INSERT ON CELCIUS_WEATHER REFERENCING NEW AS NEWCW FOR EACH ROW MODE DB2SQL BEGIN ATOMIC INSERT INTO WEATHER VALUES (NEWCW.CITY, 1.8*NEWCW.TEMPC+32) END ; INSERT INTO CELSIUS_WEATHER VALUES ('ROMA', 30) ; Questa istruzione inserisce nella tabella WEATHER la riga 'ROMA' 86 7

DOCENDO DISCIMUS DROP TRIGGER e DROP VIEW La DROP VIEW di una Vista che ha dei Trigger INSTEAD OF, elimina tutti gli INSTEAD OF trigger creati su quella Vista e i loro rispettivi Package. DROP TRIGGER invalida i Packages (inclusi i trigger package) che dipendono dal INSTEAD OF Trigger che è stato eliminato. Esempio: il corpo di un AFTER Trigger TR2 contiene una istruzione UPDATE VIEW V1 la Vista read-only V1 ha un INSTEAD OF UPDATE Trigger TR1 l istruzione DROP TRIGGER TR1 fa invalidare il Package del TR2 perché TR2 dipende da TR1. 8

Restrizioni sui Trigger INSTEAD OF Su una VIEW può esserci un solo INSTEAD OF trigger per INSERT, un solo INSTEAD OF trigger per UPDATE, un solo INSTEAD OF trigger per DELETE. Un INSTEAD OF trigger NON può specificare la clausola WHEN. Un INSTEAD OF trigger NON deve specificare la clausola FOR EACH STATEMENT. Un INSTEAD OF trigger non può specificare UPDATE OF di una lista di colonne. Un INSTEAD OF trigger non può specificare una Vista definita con la clausola WITH CHECK OPTION. Un INSTEAD OF trigger non può specificare Viste che referenziano dati codificati con differenti Schemi di Codifica o valori CCSID. Un INSTEAD OF trigger non funziona con Cursor Update né Cursor Delete. 9

DOCENDO DISCIMUS 10

Non l Utente ma il DB2 scrive i dati Talvolta non sono le applicazioni ad inserire direttamente i dati in tabella, ma è lo stesso DB2 che inserisce i dati, a fronte di: -- valori di default, -- identity columns, -- colonne ROWID, -- sequences, -- before trigger In questi casi, gli utenti hanno bisogno di determinare immediatamente i valori inseriti in tabella dal DB2. Per questo: il DB2 V8 introdusse l istruzione SELECT FROM INSERT. il DB2 9 offre anche la possibilità di fare SELECT FROM MERGE, SELECT FROM UPDATE e SELECT FROM DELETE. Nelle istruzioni SELECT FROM INSERT-UPDATE-DELETE-MERGE il passo che viene eseguito per primo è l esecuzione delle istruzioni INSERT, UPDATE, DELETE, o MERGE. La parte di SELECT semplicemente ci mostra i valori che sono stati rispettivamente inseriti, aggiornati, cancellati o mergiati. 11

Sintassi di SELECT FROM FROM FINAL TABLE ( INSERT statement ) FINAL TABLE ( searched UPDATE statement ) OLD OLD TABLE ( searched DELETE statement ) FINAL TABLE ( MERGE statement ) SELECT * FROM OLD TABLE ( DELETE FROM employee WHERE emp_id = 12345 ) ; SELECT numord INTO :hv-numord FROM FINAL TABLE ( INSERT INTO ordini (numord, ) VALUES (NEXT VALUE FOR seq_ordini,...) ) ; SELECT COL5 INTO :C5-HV FROM FINAL TABLE (INSERT (COL1, COL2, COL5, COL7) INTO MY_TABLE VALUES ('MAX', 'MACERA', CURRENT DATE, 'IBM') ) ; 12

Esempi di SELECT FROM INSERT -- 1/3 La tabella EMP abbia 1000 righe. Noi vogliamo vedere i primi 5 valori della colonna EMP_ROWID [ROWID NOT NULL GENERATED ALWAYS] che sono stati generati e inseriti dal DB2 nella tabella EMP_PHOTO_RESUME: DECLARE CS1 CURSOR FOR SELECT EMP_ROWID FROM FINAL TABLE ( INSERT INTO EMP_PHOTO_RESUME (EMPNO) SELECT EMPNO FROM EMP ) FETCH FIRST 5 ROWS ONLY; Vengono inserite 1000 righe in EMP_PHOTO_RESUME, ma solo le prime 5 sono restituite. 13

Esempi di SELECT FROM INSERT -- 2/3 CREATE TABLE MIEI_PROGETTI ( COD_PROGETTO INTEGER NOT NULL, NOME_PROGETTO CHAR(20) NOT NULL WITH DEFAULT 'NOME PROJ NON DEFINITO', COD_REPARTO CHAR(8), COD_CAPO_PROG..... ) ; SELECT NOME_PROGETTO INTO :nome_hv FROM FINAL TABLE ( INSERT INTO MIEI_PROGETTI (COD_PROGETTO, COD_REPARTO, COD_CAPO_PROG) VALUES (:codprog-hv, :codreparto-hv, :codcapoprog-hv) ) ; DOCENDO DISCIMUS 14

Esempi di SELECT FROM INSERT -- 3/3 CREATE TABLE EMPLOYEE ( EMPNO INTEGER GENERATED ALWAYS AS IDENTITY,... DECLARE CS2 SCROLL CURSOR WITH ROWSET POSITIONING FOR SELECT EMPNO, NAME FROM FINAL TABLE ( INSERT INTO EMPLOYEE (NAME, TELEF) FOR 3 ROWS VALUES (:HVA1, :HVA2) ) ORDER BY INPUT SEQUENCE ; 15

SELECT FROM UPDATE Mentre stiamo facendo UPDATE delle righe, è possibile fare SELECT dei valori che si stanno aggiornando, semplicemente specificando l istruzione UPDATE nella clausola FROM della istruzione SELECT. Quando facciamo Update di una o più righe in tabella, possiamo reperire: SELECT sum(salary) INTO :hv-salary FROM FINAL TABLE ( UPDATE emp SET salary = salary * 1.05 WHERE job = 'DESIGNER' ) ; il valore generato automaticamente dal DB2, ad es. per una colonna identity o ROWID; qualunque valore di default delle colonne; tutti i valori di una riga aggiornata, senza specificare i nomi individuali delle colonne. In molti casi, è possibile usare l istruzione SELECT FROM UPDATE, con la clausola FINAL TABLE. La FINAL TABLE contiene le righe appena aggiornate dall Update che si sta eseguendo in quel momento sulla tabella (o vista). DECLARE CS1 CURSOR FOR SELECT lastname, bonus FROM FINAL TABLE (UPDATE emp SET bonus = bonus * 1.3 WHERE job = 'DESIGNER'); FETCH CS1 INTO :lastname, :bonus; Se per questa forma di Update si vogliono vedere i cambiamenti riga per riga, occorre dichiarare un Cursore per la SELECT 16

SELECT FROM DELETE Mentre stiamo facendo DELETE di righe, è possibile fare SELECT delle righe che si stanno cancellando, semplicemente specificando l istruzione DELETE nella clausola FROM della istruzione SELECT. Quando facciamo DELETE di una o più righe di tabella, possiamo reperire: qualunque valore di default delle colonne; tutti i valori della riga cancellata, senza specificare i nomi individuali delle colonne; valori calcolati basati sulle righe cancellate. L istruzione SELECT FROM DELETE deve utilizzare la clausola FROM OLD TABLE per reperire i valori cancellati. La OLD TABLE contiene le righe appena cancellate dal Delete che si sta eseguendo in quel momento sulla tabella (o vista). SELECT sum(salary) INTO :salary FROM OLD TABLE (DELETE FROM emp WHERE job = 'OPERATOR') ; Nota che qui non è FINAL TABLE, ma OLD TABLE DECLARE CS1 CURSOR FOR SELECT YEAR(CURRENT DATE HIREDATE) FROM OLD TABLE (DELETE FROM emp WHERE job = 'ANALYST'); FETCH CS1 INTO :years_of_service; Se per questa forma di Delete si vogliono vedere le cancellazioni riga per riga, occorre dichiarare un Cursore per la SELECT 17

SELECT FROM MERGE Mentre stiamo facendo MERGE è possibile fare SELECT di quelle stesse righe [aggiornate o cancellate con MERGE], semplicemente specificando l istruzione MERGE nella clausola FROM dell istruzione SELECT. Quando si fa MERGE di una o più righe in una tabella, è possibile reperire: i valori generati automaticamente dal DB2, ad esempio per le colonne ROWID o le colonne IDENTITY qualunque valore di default per le colonne tutti i valori di una riga risultato di un MERGE, senza specificare i nomi individuali delle colonne i valori calcolati basati sui cambiamenti delle righe risultato del MERGE DOCENDO DISCIMUS Con l istruzione SELECT FROM MERGE si usa la clausola FINAL TABLE. La FINAL TABLE contiene le righe della tabella (o vista) dopo che è avvenuto il MERGE. 18

DOCENDO DISCIMUS 19

Colonne INCLUDE Le colonne INCLUDE sono delle colonne addizionali e virtuali che, pur non esistendo nella tabella oggetto di Ins/Upd/Del/Mrg, possono essere specificate nella tabella intermedia che contiene il risultato delle istruzioni INSERT / UPDATE / DELETE / MERGE. Le colonne INCLUDE non pregiudicano il risultato delle istruzioni SQL di modifica dei dati e non modificano la definizione delle tabelle base. Sono disponibili soltanto se le istruzioni INS / UPD / DEL / MRG sono annidate nella clausola FROM di una istruzione SELECT (o SELECT INTO). Una colonna INCLUDE può essere di qualunque data type, può assumere valori NULL, e deve avere un nome univoco rispetto a ogni altra colonna della tabella oggetto delle istruzioni SQL di modifica dei dati. È possibile riferire le colonne INCLUDE nella Select-list, nelle clausole ORDER BY, o WHERE della istruzione SELECT. Nel risultato della SELECT FROM INS/UPD/MRG/DEL, le Colonne INCLUDE compaiono all estrema destra.! 20

Sintassi per le Colonne INCLUDE DELETE FROM table name AS view name correlation name, INCLUDE ( column name data type ) SET assignment clause UPDATE table name view name AS correlation name, INCLUDE ( column name data type ) SET assignment clause 21

Colonne INCLUDE nella SELECT FROM INSERT L istruzione SELECT FROM INSERT offre la possibilità di includere nella Select-list colonne addizionali e virtuali, i cui valori sono reperiti da una tabella (in questo esempio DEPT) specificata all interno della INSERT. Si noti che nella tabella PROJ non ci sono colonne che danno informazioni sul Manager. DECLARE CS1 CURSOR FOR SELECT manager_num, projname FROM FINAL TABLE DOCENDO DISCIMUS (INSERT INTO proj (deptno) INCLUDE ( manager_num CHAR(6) ) SELECT deptno, mgrno FROM dept); 22

Colonne INCLUDE nella SELECT FROM INSERT Per assegnare valori alle Colonne INCLUDE nelle operazioni di INSERT, si può usare la clausola VALUES. Un uso comune delle Colonne INCLUDE nelle operazioni di INSERT, consiste nel personalizzare l ordinamento delle righe risultato. Ad esempio: SELECT * FROM FINAL TABLE (INSERT INTO sales INCLUDE (sortkey integer) VALUES ( CURRENT DATE, 'Jimmy', 'Tel Aviv', 7, 3 ), ( CURRENT DATE, 'Massimo', 'Roma', 5, 1 ), ( CURRENT DATE, 'Luca', Carrara', 4, 2 ) ) ORDER BY sortkey DOCENDO DISCIMUS SALES_DATE SALES_PERSON REGION SALES SORTKEY ----------+-------------+----------+------+-------- 21/11/2012 MASSIMO ROMA 5 1 21/11/2012 LUCA CARRARA 4 2 21/11/2012 JIMMY TEL AVIV 7 3 in una operazione di INSERT è anche possibile assegnare valori a una Colonna INCLUDE utilizzando una fullselect. 23

Colonne INCLUDE nella SELECT FROM UPDATE Per assegnare valori alle Colonne INCLUDE nelle operazioni di UPDATE o DELETE, si usa la clausola SET. Se nessun valore è assegnato alla Colonna INCLUDE nella clausola SET di una istruzione UPDATE o DELETE, viene restituito un valore NULL per quella colonna. Nelle istruzioni UPDATE si usano le Colonne INCLUDE anche per ricevere nel risultato, sia i valori della vecchia che della nuova colonna per una riga. Per esempio: DECLARE CS1 CURSOR FOR SELECT lastname, Salary, Old_Salary FROM FINAL TABLE (UPDATE emp INCLUDE ( Old_Salary DECIMAL(9,2) ) SET Salary = Salary * 1.20, Old_Salary = Salary WHERE job = 'INSTRUCTOR'); LASTNAME SALARY OLD_SALARY ---------+---------+------------ MACERA 9600.00 8000.00 ROMNEY 8760.00 7300.00 CLINTON 9840.00 8200.00 24

Colonne INCLUDE nella SELECT FROM DELETE L istruzione SELECT FROM DELETE offre la possibilità di includere nella Select-list colonne addizionali e virtuali, i cui valori sono impostati con una clausola SET specificata all interno della DELETE. DECLARE CS1 CURSOR FOR SELECT lastname, salary, Years_Of_Service FROM OLD TABLE DOCENDO DISCIMUS ( DELETE FROM emp INCLUDE ( Years_Of_Service INTEGER ) SET Years_Of_Service = YEAR ( CURRENT DATE Start_Date) WHERE job = 'INSTRUCTOR' ); 25

Colonne INCLUDE nella SELECT FROM MERGE S.id 1 5 10 Source 5 1 S.amt 30 10 40 20 50 Righe restituite T.id 1 5 10 5 1 include column balance status 1030 upd 10 ins 540 upd 30 upd 1080 upd SELECT id, balance, status FROM FINAL TABLE (MERGE INTO account AS T INCLUDE (status char(3) ) USING (VALUES ((:hv_id, :hv_amt) FOR 5 ROWS)) AS S (id,amt) ON T.id = S.id WHEN MATCHED THEN UPDATE SET balance = T.balance + S.amt, status = upd WHEN NOT MATCHED THEN INSERT (id, balance,status) VALUES (S.id, S.amt, ins ) NOT ATOMIC CONTINUE ON SQLEXCEPTION ) ; T.id Account target table balance 1 1000 10 500 200 600 300 300 315 100 500 4000... Account - after T.id balance 1 1080 5 30 10 540 200 600 300 300 315 100 500 4000... 26

R I F E R I M E N T I Redbook -- DB2 UDB for z/os Version 8: Everything You Ever Wanted to Know,... and More revised edition, April 2005 -- SG24-6079-00 Redbook -- DB2 9 for z/os Technical Overview revised edition March 2010 -- SG24-7330-00 DB2 10 for z/os, SQL Reference edition, June 2012 -- SC19-2983-06 DOCENDO DISCIMUS 27