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

Σχετικά έγγραφα
Lecture 19: Internal DB Programming II

Lecture 20: External DB Programming II

Internal DB Programming, Scripts/Batches in TSQL

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

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

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

MySQL stored procedures

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Lecture 18: Internal DB Programming I

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

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

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

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

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

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

5 η Διάλεξη Python - Αρχεία

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

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

Βασικά Στοιχεία της Java

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

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

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

Κεφάλαιο 12 Υλοποίηση Stored Procedures, Χρήση Ευρετηρίων

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

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

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

ΕΠΛ 012. JavaScripts

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

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

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Lecture 21: Functional Dependencies and Normalization

Εργαστήριο Βάσεων Δεδομένων. Δικαιώματα Χρηστών Προβολές

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

Γιάννης Σαμωνάκης. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 4 - PHP)

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

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

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

databases linux - terminal (linux / windows terminal)

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

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

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

Lecture 3: Introduction III

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

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

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

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

Βασικά Στοιχεία της Java

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Πανεπιστήµιο Ιωαννίνων Τµήµα Μαθηµατικών Μάθηµα: Βάσεις εδοµένων (741) Εργαστηριακό Τεστ Οµάδα: Α 18/11/2004

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

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

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

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

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

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

Οδηγίες Χρήσης της MySQL

Μεθόδων Επίλυσης Προβλημάτων

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

S, (5, -3, 34, -23, 7) ( *, _

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

Εργαστήριο 9: Αρχεία

Δομημένος Προγραμματισμός (ΤΛ1006)

Transcript:

Διάλεξη 19: Προγραμματισμός Βάσης Δεδομένων ΙΙΙ Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: Scripts/Batches σε TSQL Δυναμική SQL Δρομείς (Cursors) σε TSQL Διδάσκων: Παναγιώτης Ανδρέου EPL342: Databases Demetris Zeinalipour (University of Cyprus) 1

Scripts σε TSQL Scripts: Ακολουθία (Τ)SQL Εντολών η οποία αποθηκεύεται σε ένα αρχείο για επαναχρησιμοποίηση. Παραδείγματα Χρήσης: Backup / Restore πινάκων ή ολόκληρης της DB. Θυμηθείτε το Northwind.sql (Εργαστήριο 9) το οποίο χρησιμοποιήσατε για να δημιουργήσετε αυτόματα όλη την βάση. Επανάληψη Συχνών Λειτουργιών (Συντήρηση, κτλ.) EPL342: Databases Demetris Zeinalipour (University of Cyprus) 2

Μεταβλητές σε TSQL USE epl342; DECLARE @TEST int Παράδειγμα 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 χαρακτήρες και επιστρέφεται στον χρήστη. EPL342: Databases Demetris Zeinalipour (University of Cyprus) 3

Μεταβλητές σε TSQL SELECT PRINT (δες και RAISERROR για try catch) EPL342: Databases Demetris Zeinalipour (University of Cyprus) 4

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

Παράδειγμα με χρήση @@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) EPL342: Databases Demetris Zeinalipour (University of Cyprus) 6

Πίνακας 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 ] ) Π.χ., COVERT(nvarchar(10), GETDATE(), 103) EPL342: Databases Demetris Zeinalipour (University of Cyprus) 7

Χρήση Συνάρτησης Συστήματος @@ 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) EPL342: Databases Demetris Zeinalipour (University of Cyprus) 8

Δέσμες (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); EPL342: Databases Demetris Zeinalipour (University of Cyprus) 9

Δέσμες (Batches) σε TSQL Κάποιες εντολές είναι αναγκαστικό να είναι μέρος του δικού τους Batch (δηλαδή πρεπει να ακολουθούνται από GO). Μερικές από αυτές είναι: CREATE TRIGGER CREATE VIEW CREATE PROCEDURE θα το δούμε σε λίγο Συντακτικά Λάθη ελέγχονται όπως και στα Scripts πριν την εκτέλεση ολόκληρου του Batch Εάν προκύψουν Runtime λάθη σε ένα batch στο σημείο Χ τότε δεν εκτελείται καμία εντολή μετά το X. Εντολές πριν το Χ δεν γίνονται ROLLBACK και αλλάζουν μόνιμα την κατάσταση της βάσης. EPL342: Databases Demetris Zeinalipour (University of Cyprus) 10

Δυναμική SQL (Dynamic SQL) σε ΤSQL Η δυναμική SQL (dynamic SQL) επιτρέπει στους προγραμματιστές βάσεων δεδομένων να παράγουν της δηλώσεις SQL με δυναμικό τρόπο Χρήσιμες εάν δεν είναι γνωστή εκ των προτέρων η SQL έκφραση. Σημείωση: Όλα τα προηγούμενα παραδείγματα ήταν με στατικές εκφράσεις SQL (Static SQL) Εκτελούνται με EXEC ή με EXECUTE sp_executesql Παράδειγμα: Αντί για SELECT * FROM PERSON DECLARE @SQL NVARCHAR(MAX) SET @SQL = SELECT * FROM PERSON EXECUTE sp_executesql @SQL Έκφραση SQL που παράγεται δυναμικά κατά την εκτέλεση EPL342: Databases Demetris Zeinalipour (University of Cyprus) 11

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

Έλεγχος Ροής σε 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 EPL342: Databases Demetris Zeinalipour (University of Cyprus) 13

Δημιουργία Γνωρισμάτων σε TSQL USE AdventureWorks; GO DECLARE @CATEGORY NVARCHAR(50) SET @CATEGORY = SELECT 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 WHERE PRODUCT_ID=5; GO H συνθήκη μπορούσε να είναι και πιο σύνθετη, π.χ., (ProductNumber % 2) = 0 EPL342: Databases Demetris Zeinalipour (University of Cyprus) 14

Επανάληψη σε TSQL Τελεστής Επανάληψης σε TSQL WHILE Boolean_expression BEGIN sql_statement statement_block several statements in BEGIN END BREAK CONTINUE END Παράδειγμα DECLARE @var INT WHILE 1 = 1 BEGIN WAITFOR DELAY '00:00:01' SET @var = (SELECT MAX(salary) FROM EMP1) END EPL342: Databases Demetris Zeinalipour (University of Cyprus) 15

Cursors (Δρομείς) σε TSQL Γνωρίζουμε ότι τα αποτελέσματα επερωτήσεων επιστρέφονται σε μια επερώτηση υπό μορφή μιας σχέσης Π.χ., SELECT * FROM Emp1 επιστρέφει ένα ολόκληρο πίνακα. Εάν θέλουμε να επεξεργαστούμε τα αποτελέσματα αυτά γραμμήγραμμή (αντί να απλά να τυπωθούν), τότε χρησιμοποιούμε την έννοια του Δρομέα (Cursor). Cursors υπάρχουν και στην JAVA όπως είδατε στο φροντιστήριο. Cursor in Sproc (TSQL) DECLARE cursorname CURSOR FOR SELECT * FROM Emp1 OPEN cursorname WHILE @@FETCH_STATUS=0 BEGIN PRINT @ssn END Έμφαση επόμενων διαφανειών Cursor in JAVA ResultSet rs; rs = stmt.executequery("select * FROM Emp1"); while ( rs.next() ) { System.out.println(rs.getString("ssn")); } Catalog/ Indexes Tables EPL342: Databases Demetris Zeinalipour (University of Cyprus) 16

Cursors (Δρομείς) σε TSQL USE epl342 DECLARE @ssn nchar(10), @fname nchar(10) DECLARE employee_cursor CURSOR FOR Δήλωση μεταβλητής τύπου Cursor SELECT ssn,fname FROM Emp1 Επερώτηση που συνδέεται με τον Cursor OPEN employee_cursor Άνοιγμα Cursor (Εκτέλεση Επερώτησης) Ανάγνωση πρώτης γραμμής στις μεταβλητές id, fname FETCH NEXT FROM employee_cursor INTO @ssn, @fname WHILE @@FETCH_STATUS=0 όσο δεν άδειασαν τα αποτελέσματα BEGIN PRINT RTRIM(@ssn) + ', ' + RTRIM(@fname) RTRIM: φεύγει right spaces FETCH NEXT FROM employee_cursor Ανάγνωση επόμενης γραμμής INTO @ssn, @fname END Τυπώνει 1, 1 2, Franklin 3, Alicia 4, Jennifer 5, Ramesh 6, Joyce 7, Ahmad 8, James 1, 1 CLOSE employee_cursor Κλείσιμο Cursor DEALLOCATE employee_cursor Αποδέσμευση Πίνακα Ενδιάμεσων Αποτελεσμάτων που χρησιμοποιεί ο SqlServer για το Result του Cursor. Εναλλακτικά μένει στην μνήμη μέχρι το Κλεισιμο του Session. EPL342: Databases Demetris Zeinalipour (University of Cyprus) 17

Χαρακτηριστικά Cursor Κατεύθυνση Cursor: H default λειτουργία του cursor είναι να κινείται μπροστά NEXT (default), εγγραφή εγγραφή μέσα σε ένα αποτέλεσμα. Υπάρχουν ορίσματα (SCROLL) για να κινείται διαφορετικά FIRST, LAST, PRIOR, RELATIVE, κτλ. Ενημέρωση Αποτελεσμάτων: Είναι δυνατό να ενημερώνεται το αποτελέσματα που προσπελαύνεται από ένα CURSOR (READ ONLY (default) UPDATE ) π.χ., κατά την προσπέλαση αύξησε ένα γνώρισμα κατά 1 Εμβέλεια Cursor: Η εμβέλεια ενός CURSOR μπορεί να περιοριστεί τοπικά μέσα στο ίδιο batch) (LOCAL (default) GLOBAL) Στο manual υπάρχουν αρκετές άλλες εξειδικεύσεις που προσφέρονται από την TSQL EPL342: Databases Demetris Zeinalipour (University of Cyprus) 18

Σύνταξη Δημιουργίας Cursor ISO Syntax DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR FOR select_statement [ FOR { READ ONLY UPDATE [ OF column_name [,...n ] ] } ] [;] Transact SQL Extended Syntax DECLARE cursor_name CURSOR [ LOCAL GLOBAL ] [ FORWARD_ONLY SCROLL ] [ STATIC KEYSET DYNAMIC FAST_FORWARD ] [ READ_ONLY SCROLL_LOCKS OPTIMISTIC ] [ TYPE_WARNING ] FOR select_statement [ FOR UPDATE [ OF column_name [,...n ] ] ] [;] EPL342: Databases Demetris Zeinalipour (University of Cyprus) 19

Παράδειγμα Script για Backup Βάσεων DECLARE @name VARCHAR(50) database name DECLARE @path VARCHAR(256) path forbackup files DECLARE @filename VARCHAR(256) filename for backup DECLARE @filedate VARCHAR(20) used for file name SET @path = 'C:\Backup\' κατάλογος στον οποίο θα γίνει το backup SELECT @filedate = CONVERT(VARCHAR(20),GETDATE(),112) DECLARE db_cursor CURSORFOR SELECT name FROM master.dbo.sysdatabases WHERE name NOT IN ('master','model','msdb','tempdb') Continued Οn Next Page Μορφοποίηση Ημερ. με style 112, δηλ. σε: 20091119 Πίνακας του Καταλόγου που περιέχει τα ονόματα όλων των βάσεων EPL342: Databases Demetris Zeinalipour (University of Cyprus) 20

Παράδειγμα Script για Backup Βάσεων (συν.) -- Continued From Previous Page OPEN db_cursor -- άνοιγμα cursor FETCH NEXT FROM db_cursor -- ανάκτηση επόμενης τιμής σε τοπική var INTO @name WHILE @@FETCH_STATUS = 0 BEGIN -- δημιουργία filename SET @filename = @path + @name + '_' + @filedate + '.BAK' -- εντολή για backup βάσης στο directory/name @filename BACKUP DATABASE @name TO DISK = @filename -- Τo RESTORE DATABASΕ κάνει restore την βάση FETCH NEXT FROM db_cursor INTO @name END CLOSE db_cursor DEALLOCATE db_cursor EPL342: Databases Demetris Zeinalipour (University of Cyprus) 21