VARIABILI, ASSEGNAZIONE, DECISIONI

Похожие документы
Basi di Dati: Corso di laboratorio

Programmazione in Java (I modulo)

Tipi di sottoquery SQL

Strutture di Controllo

Interrogazioni nidificate

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Costrutti condizionali e iterativi

Caratteristiche dei linguaggi per Database

Per poter interagire con un database in rete mediante uno script php bisogna. innanzitutto cerare una connessione. Ciò si ottiene mediante la funzione

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

PROGRAMMAZIONE: Le strutture di controllo

PROGRAMMAZIONE STRUTTURATA

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Access 2007 Colonna di ricerca

DATABASE PER IL WEB. Programmazione Web 1

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

2011 Politecnico di Torino 1

VBA Principali Comandi

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Programmazione in Python. Moreno Marzolla

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Esercitazione 4. Comandi iterativi for, while, do-while

Access. P a r t e t e r z a

CORSO ACCESS 2000 PARTE VI

Matlab 5. Funzioni. Slide basate sul corso di C. Blundo. A.A. 2010/ GPersiano. Laboratorio di Informatica per Fisici 1

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Interrogazioni nidificate

SISTEMI OPERATIVI, RETI, INTERNET

Variabili e Istruzioni

SQL - Sottointerrogazioni

Istruzioni iterative. Istruzioni iterative

Eprogram ITIS V anno Unità 4 - Il linguaggio SQL

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Le direttive del Preprocessore

Formule e funzioni. Manuale d uso

Laboratorio di Informatica. Esercitazione su algoritmi e diagrammi di flusso

Lezione 7: La Formalizzazione degli Algoritmi - Strutture di Controllo e Selettive La Programmazione Strutturata (3 p) Giovedì 21 Ottobre 2010

Microsoft Access (parte 5) Query. Query. Query. Query. Creare una query

5 - Istruzioni condizionali

Algoritmi e soluzione di problemi

ASP e Database. A cura di Michele Cavalieri

Esempio di database relazionale con l utilizzo del prodotto MySQL

Lettura da tastiera e scrittura su monitor

Espressione di chiamata di funzione

Algoritmi e dintorni: La radice quadrata Prof. Ettore Limoli. Formule iterative

Il linguaggio SQL: query innestate

IL PRIMO PROGRAMMA IN C

Excel & VBA. Excel e Visual Basic for Application

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

3. Le routine evento in Access 2000/2003

Le query di comando e di servizio in Access

Istruzioni Condizionali in C

Algoritmi e basi del C Struttura di un programma

DUE GRUPPI DI COMANDI

Excel 3. Master Universitario di II livello in MANAGER NELLE AMMINISTRAZIONI PUBBLICHE A.A Prof.ssa Bice Cavallo

Corso di Basi di Dati A.A. 2015/2016

4 GLI ARRAY E LE STRINGHE

Il generatore di numeri casuali

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Triggers Esercitazione 1

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

Codice Gray. (versione Marzo 2007)

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Tecnologia delle Basi di Dati Esercitazione #4 Definizione dei trigger in Oracle

Definizione di metodi in Java

Quando usiamo Python in modo interattivo in genere e' lo shell utilizzato che gestisce l'indentazione e la deindentazione.

Esercitazione 4: Trigger in DB2

Istruzioni iterative (o cicliche)

ACCESS Esercitazione (query complesse) Ing. Cosimo Orlacchio

Strutture dati e loro organizzazione. Gabriella Trucco

2. Algoritmi e Programmi

Individuazione di sottoproblemi

SQL: Structured Query Language. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

28/02/2014 Copyright V. Moriggia

SOLUZIONE AL TEMA DI INFORMATICA (PROGETTO ABACUS)

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Транскрипт:

LEZIONE-TSQL-03 PROGRAMMAZIONE (VER02) PAG. 1 / 6 LEZIONE-TSQL-03 PROGRAMMAZIONE (VER02) T-SQL PROGRAMMAZIONE PARTE TERZA VARIABILI, ASSEGNAZIONE, DECISIONI Tratto da Gregory A. Larsen, http://www.databasejournal.com/features/mssql/article.php/3087431/t-sql-programming-part-1---defining-variables-and-if-logic.htm Dopo aver appreso alcuni aspetti del T-SQL di Microsoft, è opportuno analizzare altri vari aspetti della programmazione T-SQL. Per costruire un trigger, una stored procedure (procedura memorizzata) o uno script del Query Analyzer, è necessario conoscere le basi della programmazione di T-SQL. In questa dispensa si discuterà la definizione delle variabili, e l utilizzo della logica IF.... VARIABILI LOCALI Come con qualsiasi linguaggio di programmazione, T-SQL consente di definire e impostare le variabili. Una variabile è un contenitore che conserva un pezzo unitario di informazioni, come un numero o una stringa di caratteri. Le variabili possono essere utilizzate per svolgere un numero di cose. Alcuni esempi di utilizzo di variabili comuni sono: Per passare i parametri alle stored procedure o una funzione Per controllare la trasformazione di un ciclo Per verificare una condizione vera o falsa in un IF Per controllare le condizioni di programmazione in WHERE In SQL Server è tipico l uso di una variabile nota come «variabile locale», la cui esistenza è limitata ad un blocco o una procedura. L'ambito di una variabile locale è disponibile solo in modalità batch, stored procedure o blocco di codice in cui è definita. Una variabile locale è definita utilizzando il comando T-SQL "DECLARE" che significa «dichiara». Il nome della variabile locale deve necessariamente iniziare con il segno "@" usato come primo carattere del nome. Una variabile locale può essere dichiarata per essere utilizzta in due modi: come una qualsiasi variabile di sistema come un nuovo tipo di dati definito dall'utente. La tipica dichiarazione di una variabile è la seguente: DECLARE @NOMEVARIABILE TIPO Ad esempio, una variabile intera denominata @CNT può essere così dichiarata: DECLARE @CNT INT Più di una variabile può essere definita con un singolo DECLARE. Per definire più variabili, con un unico DECLARE, si separa ciascuna definizione di variabile con una virgola, in questo modo: DECLARE @CONTA INT, @ETA TINYINT, @PRESTITO DATE, @NOME CHAR(10); ASSEGNAZIONI E VALORI PER VARIABILI LOCALI Sopra sono definite 4 variabili locali con un unico DECLARE. Ad una variabile locale viene inizialmente assegnato un valore NULL. Un valore può essere assegnato ad una variabile locale utilizzando due possibili comandi:

LEZIONE-TSQL-03 PROGRAMMAZIONE (VER02) PAG. 2 / 6 SET SET SELECT (imposta, che assegna un valore costante o ottenuto con un operazione) (seleziona, che assegna un valore all interno di una query SQL) Nel comando SET si specifica la variabile locale e il valore che si desidera assegnare alla variabile locale. Ecco un esempio di dove è definita la variabile @CONTA e poi è inizializzata col valore a 1. INT DECLARE @CONTA SET @CONTA = 1 SELECT Nel comando SELECT si specifica la variabile locale all interno della prima riga della query con l espressione da calcolare da assegnare alla variabile locale. Ecco un esempio di come utilizzare l'istruzione SELECT per impostare il valore di una variabile locale. DECLARE @CONTEGGIO INT SELECT @CONTEGGIO = COUNT (*) FROM MIODATABASE.MIATABELLA; L'esempio sopra imposta la variabile @ ROWCNT il numero di righe della tabella MioDataBase.MiaTabella. Uno degli usi di una variabile è quello di controllare e filtrare i record restituiti da un'istruzione SELECT. A tale scopo, è possibile utilizzare una variabile nella clausola WHERE. Ecco un esempio che restituisce tutti i record Clienti nel database Northwind in cui la colonna Paese Clienti è uguale a 'Italy': DECLARE @PAESE VARCHAR (25) SET @PAESE = 'ITALY' SELECT * FROM NORTHWIND.DBO.CUSTOMERS WHERE COUNTRY = @PAESE ; IF... T-SQL ha la "IF" che permette di aiutare con codice diverso da eseguire sulla base dei risultati di una condizione. Il "IF" consente una T-SQL programmatore per eseguire selettivamente una sola riga o un blocco di codice basato su una condizione booleana. Ci sono due formati per l'istruzione "IF", entrambi sono indicati di seguito: Primo Formato: Secondo Formato: IF <condizione> < codice then da eseguire solo se la condizione rende vero > IF <condizione> < codice then da eseguire solo se la condizione rende vero > <altro codice da eseguire quando la condizione rende falsa> In entrambi i formati, la <condizione> è un'espressione booleana o una sequenza di espressioni booleane che restituiscono true o false. Se la condizione restituisce true, allora l istruzione immediatamente successiva viene eseguita. Il codice da eseguire deve essere una singola istruzione TSQL oppure un blocco di codice che deve essere racchiuso in una dichiarazione ed. Per il secondo formato, se la condizione è falsa, allora viene eseguito il codice immediatamente successivo alla clausola.

LEZIONE-TSQL-03 PROGRAMMAZIONE (VER02) PAG. 3 / 6 IF SEMPLICE Analizziamo meglio il funzionamento del primo formato. L esempio proposto mostra come scrivere l'istruzione IF per eseguire una singola istruzione, se la condizione valutata è vera. Nell esempio, banalmente, ci si limita a verificare se una variabile è impostata su un valore specifico ed eventualmente stampare un messaggio appropriato. DECLARE @MESE INT SET @MESE = 12 IF @MESE = 12 PRINT 'IL MESE È DICEMBRE' IF @MESE < 12 PRINT 'IL MESE NON È DICEMBRE' Il codice sopra stampa solo la frase «IL MESE È DICEMBRE», perché la condizione del primo IF restituisce true. Poiché la condizione del secondo IF è falsa la rispettiva istruzione PRINT non viene eseguita. Occorre osservare che la condizione di un IF può anche contenere una intera clausola SELECT. Se viene utilizzata una istruzione SELECT, l intera query deve essere racchiusa tra parentesi tonde. L'istruzione SELECT avrà bisogno di restituire un valore o anche un insieme di valori che possano essere confrontati in qualche modo. Per esempio: IF ( SELECT COUNT (*) FROM DBSCUOLA.STUDENTI WHERE ETÀ < 18) > 0 PRINT 'HO TROVATO STUDENTI MINORENNI' Oppure, usando la LIKE di T-SQL, posso eseguire: IF ( SELECT COUNT (*) FROM MYDB.AUTORI WHERE AU_NAME LIKE '[AD]%') > 0 PRINT 'TROVATO AUTORI CON INIZIALE A..D' Qui si stampa il messaggio «TROVATO AUTORI CON INIZIALE A..D» se l'istruzione SELECT ha trovato qualche autore nella tabella AUTORI il cui cognome inizi con una A, B, C o D. In questi due esempi si è mostrato come eseguire una singola istruzione T-SQL qualora la condizione testata sia vera. Il linguaggio T-SQL consente di eseguire anche un blocco di codice come azione. Un blocco di codice viene definito utilizzando una clausola "" prima della prima riga di codice nel blocco di codice, e una dichiarazione "" dopo l'ultima riga di codice nel blocco di codice. Ecco qualche esempio che esegue un blocco di codice quando la condizione di istruzione IF restituisce true. IF DB_NAME () = 'MASTER' PRINT 'SIETE NEL MASTER DATABASE' PRINT '' PRINT 'QUINDI STATE ATTENTI A CIÒ CHE SI ESEGUE' La sequenza di clausole "PRINT" saranno eseguite qualora il test dell'if venga eseguito nel contesto del database master; se il contesto è un altro database, nessuno dei comandi di stampa sarà eseguito. IF.. Talvolta si vuole non solo eseguire del codice qualora la condizione sia vera, ma anche eseguire un diverso insieme di istruzioni T-SQL quando la condizione sia falsa. Per questa necessità è opportuno utilizzare il

LEZIONE-TSQL-03 PROGRAMMAZIONE (VER02) PAG. 4 / 6 costrutto IF..., indicato sopra come secondo formato. Con questo formato, se la condizione è vera, allora la dichiarazione o il blocco di codice che segue la clausola IF viene eseguito, ma se la condizione restituisce falso allora verrà eseguito l'istruzione o il blocco di codice che segue la clausola. Vediamo un paio di esempi. Vediamo il caso di un conferimento di una certa quantità (Kg) di un ortaggio (codice PG01) odierno da parte di un socio (IS47) di una cooperativa agricola; se il socio, nella stessa data, ha già conferito quell ortaggio allora si tratta di incrementare la quantità già versata; viceversa occorre inserire un nuovo conferimento. DECLARE @QUANTO INT SET @QUANTO = 345; IF EXISTS( SELECT * FROM COOPERATIVA.CONFERIMENTI WHERE IDSOCIO='IS47' AND IDPRODOTTO='PG01' ) UPDATE COOPERATIVA.CONFERIMENTI SET QUANTITÀ = QUANTITÀ + @QUANTO WHERE IDSOCIO='IS47' AND IDPRODOTTO='PG01' INSERT INTO COOPERATIVA.CONFERIMENTI (IDSOCIO, IDPRODOTTO, QUANTITÀ) VALUES ( 'IS47', 'PG01', @QUANTO ) È anche possibile determinare più condizioni in un IF legate da operatori logici oppure nidificare più IF in cascata, nel caso che sia opportuno agire secondo una logica articolata. Per esempio, vediamo un caso in cui uno script determina se l'ambito della query è nel database 'Northwind' e se la tabella "Clienti" esiste. La scrittura di questa interrogazione è proposta in due modi diversi, il primo con condizioni multiple su un unico IF, e l'altro usando istruzioni IF nidificate. -- COMANDO IF SINGOLO, CON PIÙ CONDIZIONI USE NORTHWIND IF DB_NAME() = 'NORTHWIND' AND (SELECT COUNT(*) FROM SYSOBJECTS WHERE NAME = 'CUSTOMERS') = 1 PRINT 'TABELLA CUSTOMERS ESISTENTE' PRINT 'NON DATABASE NORTHWIND' + 'O TABELLA CUSTOMER INESISTENTE' -- COMANDI IF NIDIFICATI USE NORTHWIND IF DB_NAME() = 'NORTHWIND' IF (SELECT COUNT(*) FROM SYSOBJECTS WHERE NAME = 'CUSTOMERS') = 1 PRINT 'TABELLA CUSTOMERS ESISTENTE' PRINT 'NON DATABASE NORTHWIND' PRINT ' TABELLA CUSTOMER INESISTENTE'

LEZIONE-TSQL-03 PROGRAMMAZIONE (VER02) PAG. 5 / 6 ISTRUZIONI ITERATIVE IN T-SQL Questo è il secondo articolo della sequenza di Gregory A. Larsen sulla programmazione T-SQL. Questo articolo affronta la costruzione di un ciclo di programma con T-SQL. Oltre a discutere di come costruire un ciclo, si discute anche delle modalità di controllo sulla gestione dei loop, e dei diversi modi per uscire da un ciclo. Un ciclo di programmazione è un pezzo di codice che viene eseguito più volte iterativamente. Nel ciclo, una certa logica viene eseguita ripetutamente in modo iterativo fino a quando una condizione è verificata, che consente al codice di uscire dal loop. Un esempio di dove si potrebbe utilizzare un ciclo potrebbe essere quella di elaborare una serie di record un record alla volta. Un altro esempio potrebbe essere quello in cui è necessario generare alcuni dati di prova e di un ciclo che permette di inserire un record nella tabella dei dati di test con i valori delle colonne leggermente diversi, ogni volta che il ciclo viene eseguito. In questo articolo si accennerà ai costrutti time, break, continue e goto. WHILE In T-SQL l istruzione WHILE è il modo più comunemente utilizzato per eseguire un ciclo. La sintassi di base per un ciclo WHILE è: WHILE <CONDIZIONE> <BLOCCO> La <CONDIZIONE> è una qualsiasi espressione booleana che può essere valutata e restituire vero o falso. Il <BLOCCO> è il frammento di programma che si intende eseguire nel caso la condizione sia vera. Vediamo un semplice esempio reale. Si desidera incrementare un contatore da 1 a 10 e visualizzare il valore del contatore ad ogni iterazione del ciclo WHILE. DECLARE @CONTA INT SET @CONTA = 0 WHILE (@CONTA < 10) SET @CONTA = @CONTA + 1 PRINT 'CONTA VALE ' + CAST(@CONTA AS CHAR) Qui il codice esegue l'istruzione WHILE a condizione che il @ variabile contatore intero è inferiore a 10, questa è l'espressione booleana del ciclo while. La variabile @ contatore inizia a zero, e ogni volta attraverso il ciclo WHILE viene incrementato di 1. L'istruzione PRINT visualizza il valore della variabile @ contatore ogni iterazione del ciclo WHILE. L'uscita da questo campione è simile al seguente: CONTA vale 1 CONTA vale 2 CONTA vale 3 CONTA vale 4 CONTA vale 5 CONTA vale 6 CONTA vale 7 CONTA vale 8 CONTA vale 9 CONTA vale 10 Oltre a poter utilizzare un singolo ciclo WHILE, e possibile nidificare più cicli scrivendoli uno dentro l altro. I motivi per usare l annidamento dei cicli sono diversi; comunemente si usa la nidificazione di cicli WHILE per generare dati di test nelle prove del sistema. Il seguente esempio propone un ciclo WHILE per generare i record di una tabella di prova PROVA. Un record in PROVA è formato da un identificatore PROVA_ID, e da un CATEGORIA_ID; infine c è un campo DETTAGLI. Per ogni Part_Id ci sono tre diversi category_id del. Nell esempio si generano 6 record differenti per la tabella ARTICOLI utilizzando un ciclo nidificato WHILE.

LEZIONE-TSQL-03 PROGRAMMAZIONE (VER02) PAG. 6 / 6 DECLARE @PROVA_ID INT DECLARE @CATEGORIA_ID INT DECLARE @DESC VARCHAR(50) CREATE TABLE PROVA ( PROVA_ID INT, CATEGORIA_ID INT, DETTAGLI VARCHAR(50) ) SET @PROVA_ID = 0 SET @CATEGORIA_ID = 0 WHILE @PROVA_ID < 2 SET @PROVA_ID = @PROVA_ID + 1 WHILE @CATEGORIA_ID < 3 SET @CATEGORIA_ID = @CATEGORIA_ID + 1 SET @DESC = 'PROVA_ID: ' + CAST(@PROVA_ID AS CHAR(1)) + 'CATEGORIA_ID: ' + CAST(@CATEGORIA_ID AS CHAR(1)) INSERT INTO PROVA VALUES(@PROVA_ID,@CATEGORIA_ID,@DESC) SET @CATEGORIA_ID = 0 SELECT * FROM PROVA DROP TABLE PROVA Ecco l'output del SELECT che è proposta nella sezione finale dell esempio prima di eliminare l intera tabella (eliminare la struttura, non solo i record, con DROP). PROVA_ID CATEGORIA_ID DESCRIZIONE ---------------------------------------------------- 1 1 PROVA_ID: 1 CATEGORIA_ID: 1 1 2 PROVA_ID: 1 CATEGORIA_ID: 2 1 3 PROVA_ID: 1 CATEGORIA_ID: 3 2 1 PROVA_ID: 2 CATEGORIA_ID: 1 2 2 PROVA_ID: 2 CATEGORIA_ID: 2 2 3 PROVA_ID: 2 CATEGORIA_ID: 3 Argomenti Trattati: T-SQL PROGRAMMAZIONE PARTE SECONDA... 1 VARIABILI, ASSEGNAZIONE, DECISIONI... 1 Variabili locali... 1 Assegnazioni e valori per variabili locali... 1 SET... 2 SELECT... 2 IF...... 2 IF semplice... 3 IF..... 3 ISTRUZIONI ITERATIVE IN T-SQL... 5 WHILE... 5