Lecture 19: Internal DB Programming II

Σχετικά έγγραφα
Διάλεξη 19: Προγραμματισμός Βάσης Δεδομένων ΙΙΙ. Διδάσκων: Παναγιώτης Ανδρέου

Internal DB Programming, Scripts/Batches in TSQL

Διάλεξη 18: Προγραμματισμός Βάσης Δεδομένων ΙΙ. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 17: Προγραμματισμός Βάσης Δεδομένων Ι. Διδάσκων: Παναγιώτης Ανδρέου

Αποθηκευμένες Διαδικασίες Stored Routines (Procedures & Functions)

Διάλεξη 16: SQL DML IV, SQL DCL, SQL TCL. Διδάσκων: Παναγιώτης Ανδρέου

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Lecture 18: Internal DB Programming I

Εργαστήριο βάσεων δεδομένων. MySQL Stored Procedures

ΕΠΛ 342 Βάσεις εδοµένων

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

9η Εργαστηριακή Άσκηση: Stored Procedures - Triggers. Αποθηκευμένες Διαδικασίες (Stored Procedures):

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΓΡΕΒΕΝΑ)

10 η Διάλεξη Python Βάσεις δεδομένων στη python

Διάλεξη 07: Σχεσιακό Μοντέλο II (Relational Data Model) Διδάσκων: Παναγιώτης Ανδρέου

Department of Computer Science University of Cyprus. EPL342 Databases. Lecture 8: RM II. Relational Model. (Chapter )

. Εργαστήριο Βάσεων Δεδομένων. Triggers

Lecture 20: External DB Programming II

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 02: Βάσεις Δεδομένων Εισαγωγή. Διδάσκων: Παναγιώτης Ανδρέου

Εργαστήριο Βάσεων Δεδομένων. Triggers

ΕΠΛ 012. JavaScripts

PL/SQL. Κώστας Στεφανίδης

ΘΕΜΑΤΑ. Ερώτηση 1 Κατά τη Φυσική Αποθήκευση (Physical storage) μιας ΒΔ αποθηκεύονται στον δίσκο τα:

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

MySQL + Γλώσσα Προγραμματισμού. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Βάσεις δεδομένων. (10 ο μάθημα) Ηρακλής Βαρλάμης

. Εργαστήριο Βάσεων Δεδομένων. Stored Procedures

Lecture 3: Introduction III

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΙI

Εισαγωγή στη Matlab 2 Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής

Ακεραιότητα και Ασφάλεια Μέρος 1 Σχεδιασμός Βάσεων Δεδομένων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #2

Lecture 16: SQL DML III

Postgress ΣΤΟΧΟΣ ΣΧΕΤΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ ΥΛΙΚΟ. ΠΕΡΙΒΑΛΛΟΝ ΓΙΑ ΕΞΑΣΚΗΣΗ pgadmin ΥΠΟΒΑΘΡΟ. Συναρτήσεις στην PostgreSQL. 1. Γενικά

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

ΕΝΑΥΣΜΑΤΑ ΣΤΗΝ POSTGRES

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Ενεργές ΒΔ. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Βάσεις Δεδομένων Ενεργές ΒΔ 1

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ Relational Model. SQL Μαθ. #11

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Εισαγωγή στον Προγραμματισμό

ΑΠΟΘΗΚΕΥΜΕΝΕΣ ΔΙΑΔΙΚΑΣΙΕΣ

(Μέρος 3:Γλώσσα Ορισµού, Γλώσσα Τροποποίησης, Ενσωµατωµένη SQL) Βάσεις εδοµένων Ευαγγελία Πιτουρά 2

Αντικειµενοστρεφής Προγραµµατισµός

Βάσεις Δεδομένων ΗγλώσσαSQL (Structured Query Language)

Θέματα Προγραμματισμού Διαδικτύου ~ MySQL & PHP ~

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples Ξένου Ρουμπίνη

Αντικειμενοστρεφής Προγραμματισμός

MySQL + Γλώσσα Προγραμματισμού. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

MySQL stored procedures

Βάσεις Δεδομένων Η γλώσσα SQL (Structured Query Language) Εισαγωγή στην SQL (2) Ιστορικά Στοιχεία. SQL - Structured Query Language (1)

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

Κεφάλαιο 7: Υπορουτίνες

Lecture 14: SQL DML I

Lecture 21: Functional Dependencies and Normalization

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Προγραμματισμός Διαδικτύου

Μεταγλωττιστές. Σημασιολογική Ανάλυση. Εργαστήριο 9. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Χειµερινό Εξάµηνο 2016 Συµπληρωµατική ΔΙΑΛΕΞΗ 14: Περιγραφή Ακολουθιακών Κυκλωµάτων στη VHDL

Σχεδιασμός Βάσεων Δεδομένων

Θέματα Προγραμματισμού Διαδικτύου ~ PHP ~

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

Κεφάλαιο 4. Προχωρημένες λειτουργίες στον SQL Server

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος

Δομές ελέγχου ροής προγράμματος

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επιλογής. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

DELETE, UPDATE, INSERT

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Έχουµε την βάση της σχολής που αποτελείται από τους παρακάτω πίνακες.

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

Βάσεις Δεδομένων (Databases)

Σχεδίαση και Χρήση Βάσεων Δεδομένων. Χρήση της MySQL. Γιώργος Πυρουνάκης -

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #3

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Διάλεξη 6: Δείκτες και Πίνακες

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Βάσεις Δεδομένων. Βασίλειος Βεσκούκης Εισαγωγή στη γλώσσα SQL (Structured Query Language) Η γλώσσα SQL

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

VHDL για Σχεδιασµό Ακολουθιακών Κυκλωµάτων

databases linux - terminal (linux / windows terminal)

DELETE, UPDATE, INSERT.

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Σχεδιασμός Πληροφοριακών Συστημάτων. Σημειώσεις

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

Λογισµικό (Software SW) Γλώσσες

PHP 1. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Δ. Ζήνδρος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας

Transcript:

Department of Computer Science University of Cyprus EPL342 Databases Lecture 19: Internal DB Programming II Internal DB Programming, Scripts/Batches in TSQL (Chapter 9.1, Elmasri-Navathe 5ED + ΤransactSQL Reference Guide ιδάσκων: Παναγιώτης Ανδρέου http://www.cs.ucy.ac.cy/courses/epl342 19-1

Περιεχόµενο ιάλεξης Ολοκλήρωση ιάλεξης 18. Internal DB Programming II Εσωτερικός Προγραµµατισµός Σ Β Scripts/Batches σε TSQL Stored Procedures (Sprocs) σε TSQL User Defined Functions (UDFs) σε TSQL 19-2

Προγραµµατισµός Λειτουργιών µιας DBMS Ενώ η SQLξεκίνησε ως δηλωτική γλώσσα διατύπωσης επερωτήσεων στη συνέχεια επεκτάθηκε µε εντολές DDL και οι σύγχρονες Β παρέχουν σήµερα και δυνατότητες για διαδικαστικό προγραµµατισµό ΜΕΣΑ στην ίδια την βάση. Γενικά, υπάρχουν οι ακόλουθες κατηγορίες: Εσωτερικός Προγραµµατισµός: Scripts/Batches, Sprocs, UDFs, Views, Triggers, Assertions, κτλ Εξωτερικός Προγραµµατισµός: Μέσω Γλώσσας Προγραµµατισµού (Host Language): Embedded SQL, Dynamic SQL, APIsκαι ιεπαφών Βάσεων (ODBC, JDBC, MS OLEDB, ADO.NET κτλ) επόµενη διάλεξη. Στην ερχόµενη διάλεξη θα ασχοληθούµε µε τον Εξωτερικό Προγραµµατισµό (Φροντιστήριο: JDBC) 19-3

Προγραµµατισµός Λειτουργιών DBMS SProcs UDFs µιας DBMS Εξωτερικός Προγραµµατισµός (Μέσω Εφαρµογής) Interfaces: JDBC, ODBC, κτλ. Programming Language (π.χ., JAVA, C, C#, ) Web Languages (PHP, Python, ASP, Ruby, Perl) Views Catalog/ Indexes Tables Εσωτερικός Προγραµµατισµός Triggers Administration Consoles # SQLCMD 1> SELECT * FROM EMPLOYEE 2> go Εξωτερικός Προγραµµατισµός ( ιαδραστικός) 19-4

Εσωτερικός Προγραµµατισµός µιας DBMS Σήµερα θα δούµε πως µπορούµε να προγραµµατίσουµε τον SQL Server µε τους ακόλουθους τρόπους: A. Scripts / Batches: Απλή ακολουθία SQL εντολών µε τελεστές έλεγχου, επανάληψης, µεταβλητές, κτλ. (αντίστοιχη λογική µε shell scripts στο UNIX) B. Stored Procedures (Sprocs): Ακολουθίες SQL εντολών µε παραµέτρους αποθηκευµένες στην βάση. C. User Defined Functions (UDFs): Επιτρέπουν στον χρήστη να ορίζει συναρτήσεις πουµπορούν να χρησιµοποιηθούν στα πλαίσια του SELECT ή WHERE (π.χ., MetersToInches(decimal(10,3)) 19-5

Scripts: Ακολουθία (Τ)SQL Εντολών η οποία αποθηκεύεταισε ένα αρχείογια επαναχρησιµοποίηση. Παραδείγµατα Χρήσης: Backup / Restore πινάκων ή ολόκληρης της DB. Θυµηθείτε το Northwind.sql (Εργαστήριο 8) το οποίο χρησιµοποιήσατε για να δηµιουργήσετε αυτόµατα όλη την βάση. Επανάληψη Συχνών Λειτουργιών (Συντήρηση, κτλ) 19-6

USE epl342; DECLARE @TEST int A) Scripts σε TSQL (Μεταβλητές) Παράδειγµα Script σε TSQL Set current Database (otherwise script will be executed on whatever database is currently open) Declare Variable with Name TEST of TYPE int (default = NULL) Assign Value to Variable TEST SET @TEST = (SELECT MAX(salary) FROM Emp1) Display the TEST Variable with Column Name Result SELECT @TEST AS Result --Αντίστοιχο του STDOUT PRINT @TEST Αντίστοιχο του STDERR. To µήνυµα είναι µέχρι 8000 χαρακτήρες και επιστρέφεται στον χρήστη. 19-7

(Μεταβλητές) SELECT PRINT (δες και RAISERROR για try catch) 19-8

Χαρακτηριστικά των Scripts 1. Τα Scripts δηµιουργούνταικαι εκτελούνταιαπό κάποιο χρήστη ή ως µέρος άλλου script. 2. Το Script εκτελείται γραµµή-γραµµήαπό πάνωπρος τα κάτω (η σύνταξη ελέγχετε πριν την εκτέλεση) από τον µεταφραστή της βάσης. 3. Εάν προκύψει λάθος (runtime λάθος) τότε ΑΚΥΡΩΝΕΤΑΙ ολόκληρο το script. Ένα Script εκτελείται ως µια δοσοληψία (transaction). Συνεπώς αποτελεί µια ατοµική πράξη: Είτε εκτελείται ολόκληρο ή καθόλου! Μετά από κάποιο λάθος επαναφέρεται (ROLLBACK) πίσω στην αρχική κατάσταση η βάση δεδοµένων. 19-9

(Παράδειγµα µε χρήση @@IDENTITY) USE Northwind DECLARE @NewOrderID int Παράδειγµα Εισαγωγής Συσχετιζόµενων εδοµένων σε υο Πίνακες (Order και OrderDetails). INSERT INTO Orders(CustomerID, OrderDate) VALUES (15, DATEADD(day,-1,GETDATE())) Assign value to variable SET @NewOrderID = @@IDENTITY --ή SELECT @NewOrderID = @@IDENTITY Current Date Function @@: System Function (last recorded Identity) INSERT INTO [Order Details](OrderID, ProductID, UnitPrice, Quantity) VALUES (@NewOrderID, 1, 50, 25) Casting integer to string SELECT 'The OrderID of the INSERTed row is ' + CONVERT(varchar(8), @NewOrderID) 19-10

Πίνακας Convert / Cast σεtsql Syntax for CAST: CAST ( expression AS data_type [ (length ) ]) Π.χ., CAST(sex AS char(1)) Syntax for CONVERT: CONVERT ( data_type [ ( length ) ], expression [, style ] ) 19-11

(Χρήση Συνάρτησης Συστήµατος @@ ROWCOUNT) Η συνάρτηση συστήµατος @@ROWCOUNT σας επιστρέφει τον αριθµό των πλειάδων που επηρεάστηκαν ή διαβάστηκαν από την τελευταία SQL επερώτηση. Θυµηθείτε το µήνυµα: (Χ row(s) affected) που προκύπτει µετά από ανάγνωση/αλλαγή δεδοµένων ενός πίνακα USE epl342; DECLARE @ROWCOUNT int SELECT * FROM Emp1 SET @ROWCOUNT = @@ROWCOUNT SELECT 'The Rowcount is' + CAST(@ROWCOUNT as varchar); Με την εντολή SET NOCOUNT ON δεν τυπώνεται το (Χ row(s) affected) 19-12

A) έσµες (Batches)σε TSQL Τα Batches ( έσµες)είναι Scripts εντολών TSQL τα οποία διαχωρίζονται µε την εντολή GO και τα οποία εκτελούνται ανεξάρτητα µεταξύ τους (δηλαδή όχι στα πλαίσια του ίδιου transaction) Παράδειγµα: USE epl342; GO --αποστολή δέσµης εκφράσεων TSQL στον SQL Server INSERT INTO Emp1(SSN) VALUES ( 4411111993 ) GO --αποστολή δέσµης εκφράσεων TSQL στον SQL Server INSERT INTO Emp1(SSN) VALUES ( 3311111993 ) GO -- δεν πρέπει να υπάρχουν άλλες εντολές στην ίδια γραµµή µε το GO! H εντολή GOλειτουργεί ΜΟΝΟ στο πλαίσιο του SQL Management Studioή της sqlcmd (ή osql). Σε προγράµµατα γίνεται κάτι αντίστοιχο µέσω εξειδικευµένων εντολών, π.χ.στη JAVA: stmt.executeupdate(query); 19-13

A) έσµες (Batches)σε TSQL Κάποιες εντολέςείναι αναγκαστικόνα είναι µέρος του δικούτους Batch (δηλαδή πρεπεινα ακολουθούνται από GO). Μερικές από αυτές είναι: CREATE TRIGGER CREATE VIEW CREATE PROCEDURE θα το δούµε σε λίγο Συντακτικά Λάθη ελέγχονται όπως και στα Scripts πριν την εκτέλεση ολόκληρου του Batch Εάν προκύψουν Runtime λάθη σε ένα batchστο σηµείο Χτότε δεν εκτελείται καµία εντολή µετά το X. Εντολές πριν το Χ δεν γίνονται ROLLBACK και αλλάζουν µόνιµα την κατάσταση της βάσης. 19-14

( υναµική SQL σε TSQL) υναµική SQL (Dynamic SQL): Εκφράσεις SQL που παράγονται κατά την εκτέλεση ενός script ή προγράµµατος µε χρήση της εντολής ΕΧΕC Χρήσιµες εάν δεν είναι γνωστή εκ των προτέρων η SQL έκφραση. Σηµείωση: Όλα τα προηγούµενα παραδείγµατα ήταν µε στατικές εκφράσεις SQL (Static SQL) Παράδειγµα USE epl342; GO DECLARE @Salary int; SET @Salary = (SELECT MAX(salary) FROM EMP1); EXEC ('SELECT * FROM Emp1 WHERE salary=' + @Salary); GO concat Έκφραση SQL που παράγεται δυναµικά κατά την εκτέλεση 19-15

( υναµική SQL σε TSQL) -- ηµιουργία Πίνακα Ως Χρήστης DBO (Database Owner) USE epl342; GO EXECUTE ('CREATE TABLE SalesTable (SalesID int, SalesName varchar(10));') AS USER = 'dbo'; GO Το EXEC είναι συντοµογραφία του EXECUTE Επισηµάνσεις για το EXEC Εκτελείται κάτω από µε τα ίδια δικαιώµατα µε τον Script που το καλεί. Το ΕΧΕC τρέχει µε τα ίδιο connection µε το πρόγραµµα που το καλεί. Εάν θα γίνει σύµπτυξη µε συνάρτηση, τότε αυτή πρέπει να γίνει πριν την κλήση της EXEC. ΛΑΘΟΣ: EXEC ('SELECT * FROM Emp1 WHERE date=' + GetDate()); Εάν ήταν @DATEVAL δεν θα είχε πρόβληµα 19-16

(Έλεγχος Ροής σε TSQL) Τελεστής Έλεγχου IF <Βοοlean Expression> <SQL statement> BEGIN <code series> END ELSE <SQL statement> BEGIN <code series> END Επισηµάνσεις Προφανώς επιτρέπεται και η εµφώλευσηαυτού του τελεστή τόσο µε τον εαυτό του όσο και µε άλλους τελεστές. Εάν το <Boolean Expression> είναι NULLτότε είναι FALSEη λογική συνθήκη. ΛΑΘΟΣ: IF @myvar=null ΣΩΣΤΟ: IF @myvar IS NULL Υπάρχει και η CASE (δηλ., αντίστοιχο της SWITCH στη C) http://msdn.microsoft.com/en-us/library/ms181765.aspx 19-17

(Έλεγχος Ροής σε TSQL) USE AdventureWorks; GO SELECT ProductNumber, Category = CASE ProductLine WHEN 'R' THEN 'Road' WHEN 'M' THEN 'Mountain' WHEN 'T' THEN 'Touring' WHEN 'S' THEN 'Other sale items' ELSE 'Not for sale' END, Name, SSN FROM Production.Product ORDER BY ProductNumber; GO H συνθήκη µπορούσε να είναι και πιο σύνθετη, π.χ., (ProductNumber % 2) = 0 19-18

(Επανάληψη σε TSQL) Τελεστής Επανάληψης σε TSQL USE epl342 GO DECLARE @var INT Αναµονή 1 δευτερολέπτου µέχρι την επόµενη κληση WHILE 1 = 1 BEGIN WAITFOR DELAY '00:00:01' SET @var = (SELECT MAX(salary) FROM EMP1) END 19-19

(Επανάληψη σε TSQL) Τελεστής Επανάληψης WHILE Boolean_expression { sql_statement statement_block -- several statements in BEGIN END BREAK CONTINUE } 19-20