Lecture 20: External DB Programming II

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

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

Lecture 20: External DB Programming II

Lecture 19: Internal DB Programming II

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

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

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

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

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

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

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

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

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

MySQL stored procedures

Lecture 16: SQL DML III

Lecture 3: Introduction III

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

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

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

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

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

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

Lecture 21: Functional Dependencies and Normalization

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

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

Lecture 14: SQL DML I

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

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

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

Lecture 18: Internal DB Programming I

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

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

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

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

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

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

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

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

Επανάληψη για τις Τελικές εξετάσεις

Προγραμματισμός ΙΙ (Java) 6. Διαχείριση δεδομένων

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

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

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

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

Lecture 12: SQL DDL I

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

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

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

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

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

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

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Lecture 21: Functional Dependencies and Normalization

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

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

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

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

Τμήμα Διοίκησης Επιχειρήσεων

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

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

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

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

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

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

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

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

H SQL είναι η γλώσσα για όλα τα εμπορικά σχεσιακά συστήματα διαχείρισης βάσεων δεδομένων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 3) Ουρανία Σμυρνάκη

Κεφάλαιο 5. Ορισµός Βάσεων εδοµένων µε SQL DDL - Άλλες Γλώσσες Σχεσιακών Βάσεων (QBE) Ι.Β. Σχεσιακές Γλώσσες Εµφύτευση / DDL Σελίδα 2.

ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ (Relational Model) Μαθ. #10

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 3ο Μάθημα: Εισαγωγή στην SQL. Δρ. Κωνσταντίνος Χ.

SQL Τύποι Δεδομένων Δημιουργία Πίνακα Παράδειγμα.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (1)

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Συστήματα Διαχείρισης Βάσεων Δεδομένων (ΗΥ460) Χειμερινό εξάμηνο 2017

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

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

Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη. (Διάλεξη. Πανεπιστήμιο Κύπρου

Κεφάλαιο 5. Ορισµός Βάσεων εδοµένων µε SQL DDL - Άλλες Γλώσσες Σχεσιακών Βάσεων (QBE) Ι.Β. Σχεσιακές Γλώσσες Εµφύτευση / DDL Σελίδα 2.

Κλάσεις και Αντικείµενα

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

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

Διδάσκων: Παναγιώτης Ανδρέου

databases linux - terminal (linux / windows terminal)

ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Copyright 2007 Ramez Elmasri and Shamkant B. NavatheΕλληνικήΈκδοση ίαυλος

Εισαγωγή στις Βάσεις Δεδομζνων II

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

είκτες και Πίνακες (2)

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

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

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

8. Μέθοδοι (Methods)

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Transcript:

Department of Computer Science University of Cyprus EPL342 Databases Lecture 20: External DB Programming II Internal Prog.: Sprocs, UDFs, Cursors, External Prog.: Embedded SQL,JDBC, SQL/CLI (Chapter 9.2-9.4, Elmasri-Navathe 5ED + ΤransactSQL Reference Guide ιδάσκων: Παναγιώτης Ανδρέου http://www.cs.ucy.ac.cy/courses/epl342 20-1

Περιεχόµενο ιάλεξης Εσωτερικός Προγραµµατισµός DB II Εσωτερικός Προγραµµατισµός Scripts/Batchesσε TSQL Stored Procedures (Sprocs) σε TSQL User Defined Functions (UDFs) σε TSQL Cursors σε TSQL Εξωτερικός Προγραµµατισµός DB Ενσωµατωµένη SQL (Embedded SQL): SQLCA και SQLJ Ενσωµατωµένη SQL µε Κλήσεις Συναρτήσεων (Embedded SQL with APIs and Functions Calls): JDBC και SQL/CLI (ex ODBC) 20-2

Β) Stored Procedures σε TSQL Stored Procedures (Sprocs), είναι εντολές (T)SQL οι οποίες αποθηκεύονταιστη βάση δεδοµένων και οι οποίες µπορούν να πάρουν ορίσµατα και να επιστρέψουν τιµές. Παράδειγµα: ηµιουργία Sproc το οποίο επιστρέφει όλους τους Employee USE epl342 GO CREATE PROC spemployee AS GO SELECT * FROM Emp1 20-3

Β) Stored Procedures σε TSQL (Sprocχωρίς Παραµέτρους) Κλήση Sproc (χωρίς Παραµέτρους) µέσω EXEC USE epl342 GO EXEC spemployee Άλλες Εντολές Ακύρωση SProc DROP PROC spemployee [;] Μεταβολή Sproc ALTER PROC GO AS SELECT * FROM Emp1 20-4

Β) Stored Procedures σε TSQL (Χαρακτηριστικά Sprocs) Βασικό Πλεονέκτηµα Sprocs: Επίδοση/Μειωµένη Κίνηση ικτύου: Το Sprocείναι Precompiled/Optimized πριν την κλήση του. Επίσης µειώνεταιη κυκλοφορία δεδοµένωνµεταξύ DBMS και προγράµµατος εφαρµογής. DBMS Catalog/ Indexes SProcs Tables Triggers Dynamic SQL: SELECT * FROM EMPLOYEE E, DEPARTMENT D WHERE E.Dno=E.Dno Μικρό Πακέτο Program WITH Stored Procedures Program WITHOUT Stored Procedures Μεγαλύτερο Πακέτο 20-5

Β) Stored Procedures σε TSQL (Χαρακτηριστικά Sprocs) Άλλα Πλεονεκτήµατα Sprocs Ασφάλεια: Τα Sprocsµας επιτρέπουν να δώσουµε πρόσβασησε λειτουργίες της βάσης χωρίς να δίνουµε πρόσβαση στους πίνακες. Ακρίβεια: Οι διεπαφές (ODBC, JDBC, κτλ) στη προσπάθεια να προσφέρουν ένα κοινό υπόβαθρο λειτουργίας σε διαφορετικούς κατασκευαστές βάσεων κάνουν διάφορους συµβιβασµούς στην ακρίβεια (π.χ., µετατροπή τύπων κτλ) Εύκολη µεταφορά σε άλλη Γλώσσα Προγραµµατισµού: Αυτό εφόσον όλη η λογική της βάσης υλοποιείται εσωτερικά και όχι στην γλώσσα προγραµµατισµού. Μειονεκτήµατα Sprocs ύσκολη Μεταφορά σε άλλο DBMS:Αυτό λόγω του ότι οι γλώσσες που χρησιµοποιούνται σε Προγ. Γλώσσες Βάσεων εδοµένων (π.χ., σύνταξη της TSQL) δεν είναι προτυποποιηµένες 20-6

Β) Stored Procedures σε TSQL (Sprocµε ΠαράµετροΕισόδου) Παράδειγµα Sproc: Βρες όλα τα name, dependent name βάσει κάποιας συµβολοσειράς αναζήτησης USE epl342 GO CREATE PROC spempdep AS @SearchName nvarchar(50) SELECT E.fname, D.dname FROM Dependent D, Emp1 E WHERE D.ssn=E.ssn AND Παράµετρος Εισόδου (max αριθµός = 2100) D.Dname LIKE '%' + @ SearchName + '%'; EMPLOYEE Κλήση Sproc: EXEC spempdep1 'Ach' Επιστρέφει Franklin, Achilleas DEPENDENT 20-7

Β) Stored Procedures σε TSQL (Sproc µε Παράµετρο Εισόδου/Εξόδου) Παράδειγµα Stored Procedure που λαµβάνει ως είσοδο ένα CustomerIDκαι ελέγχει το ιστορικό αγορών του εν λόγω πελάτη. CREATE PROCEDURE sp_customerlevel @CustomerID INTEGER, @CustomerLevel VARCHAR(20) OUT AS DECLARE @PurchaseTotal DECIMAL(8,2) SET @PurchaseTotal = (SELECT SUM(amount) FROM transactions tr IF @PurchaseTotal = 0 BEGIN SET @CustomerLevel = Empty RETURN END IF @PurchaseTotal > 1000 SET @CustomerLevel = 'Standard' ELSE WHERE tr.customerid = @CustomerID) Μεταβλητή εξόδου Κλήση Sproc sp_customerlevel DECLARE @CustomerLevel VARCHAR(20) EXEC sp_customerlevel 12391, @CustomerLevel OUT PRINT @CustomerLevel Επιστρέφει Empty SET @CustomerLevel = Gold 20-8

C) UDFs σε TSQL UDF (User Defined Functions):συναρτήσειςτου χρήστη οι οποίες αποτελούνται από εντολές (T)SQL και οι οποίες αποθηκεύονται στη βάση δεδοµένων. Σηµειώστε ότι κάθε βάση δεδοµένων παρέχει και built-in συναρτήσεις οι οποίες ονοµάζονται System Functions (π.χ., MAX, MIN, ABS, κτλ) Τα UDFs (TSQL) διακρίνονται στις κατηγορίες: Scalar-valued Functions Επιστρέφουν Βαθµωτή Τιµή (Scalar: int, varchar, κτλ.) Table-Valued Functions Επιστρέφουν Πίνακα Aggregate Functions Επιστρέφουν κάποιο συναθροιστικόαποτέλεσµα (π.χ., µια εξειδικευµένη MAX συνάρτηση) 20-9

C) UDFs σε TSQL (Παράδειγµα I) Παράδειγµα ηµιουργίας UDF (Scalar) που µετατρέπει τα Μέτρα σε Ίντσες CREATE FUNCTION dbo.meterstoinches (@Meters DECIMAL(10,3)) -- Παράµετρος Εισόδου (δια τιµής) RETURNS DECIMAL(10,3) -- Τιµή Επιστροφής (δεν µπορούµε να περάσουµε τιµές δια αναφοράς ) AS BEGIN DECLARE @Inches DECIMAL(10,3) SET @Inches = (@Meters * 3.281 ) * 12 RETURN @Inches --Επιστροφή Αποτελέσµατος END Γενικά, ισχύουν οι γνωστοί κανόνες συναρτήσεων που υπάρχουν σε άλλες γλώσσες (π.χ., εµβέλεια µεταβλητών, κτλ) 20-10

Κλήση UDF (Scalar): C) UDFs σε TSQL (Παράδειγµα I) SELECT dbo.meterstoinches(123.45) AS 'Inches' Επιστρέφει: Inches --------------------------------------- 4860.473 (1 row(s) affected) Άλλο Παράδειγµα: SELECT Weight, dbo.meterstoinches(length), Cost,... FROM Products WHERE ProductID = 199232 20-11

C) UDFs σε TSQL UDFχωρίς παράµετρο (Παράδειγµα II) CREATE FUNCTION dbo.two () RETURNS INT --Τιµή Επιστροφής AS Query BEGIN END SELECT * FROM EMP1 RETURN 2 --Επιστροφή Αποτελέσµατος Κλήση UDF στο WHERE WHERE ssn = dbo.two() Αποτέλεσµα Εκτέλεσης Query ssn Fname Minit Lname Dno salary ---------- ---------- ---------- ---------- ----------- ----------- 2 Franklin T Wong 5 10000 (1 row(s) affected) 20-12

C) UDFs σε TSQL (UDF Table-Valued Function) CREATE FUNCTION dbo.getemployees() RETURNS @records TABLE -- ήλωση ότι η Συνάρτηση Επιστρέφει Πίνακα ( -- Πεδία Σχέσης Επιστροφής ) AS EmpID nchar(10) NOT NULL, FirstName nchar(10) NULL BEGIN -- Εισαγωγή Όλων των αποτελεσµάτων της σχέσης Emp1 στη σχέση @records INSERT INTO @records SELECT ssn,fname FROM Emp1 -- Τερµατισµός της συνάρτησης (το records επιστρέφεται έτσι και αλλιώς) RETURN; END Κλήση UDF (Table-Valued) στο FROM Select * FROM dbo.getemployees() Σηµείωση: Το αποτέλεσµα της συνάρτησης µπορεί να χρησιµοποιηθεί στο FROM 20-13

C) UDFs σε TSQL ( ιαφορές µε Sprocs) Τα UDFs και στα Sprocs έχουν περισσότερες οµοιότητες παρά διαφορές στην TSQL. Βασικές διαφορές: Α) Στο πως γίνεται η κλήση: Στα UDFsη κλήση συνήθως στο SELECT (και κάποτε στο WHEREή FROM) ενώ στα SPROC η κλήση γίνεται µέσω EXEC. B) Στο πως επιστρέφονται τα αποτελέσµατα: Στα UDFs τα αποτελέσµατα µπορούν να χρησιµοποιηθούν άµεσα ενώ στα SPROCπρέπει να τοποθετηθούν σε ενδιάµεσους πίνακες Π.χ.,Για χρήση αποτελεσµάτων της spemployeeσε ενα query τα εισάγω πρώτα σε ένα ενδιάµεσο πίνακα EmpBack INSERT INTO EmpBack EXEC spemployee 20-14

[ Ενδιάµεσοι Πίνακεςσε TSQL ] (Temporary Tables in TSQL Οι ΤοπικοίΕνδιάµεσοι Πίνακες δηµιουργούνται στα πλαίσια µιας σύνδεσης µε την βάση (Session)και καταστρέφονται αµέσως µετά. Είναι χρήσιµοι για προσωρινή αποθήκευση ενδιάµεσων αποτελεσµάτων σε προγράµµατα TSQL ηµιουργία: CREATE TABLE #tablename ( ) Σηµείωση: Ο πίνακας δηµιουργείται στην tempdb Εισαγωγή εδ.: INSERT INTO #ΤemporaryTable EXEC sp_somestoredprocedure Καθολικοί Ενδιάµεσοι Πίνακες: Eχουν αντίστοιχη λειτουργία µε τους Τοπικούς, µε την διαφορά ότι σε αυτούς έχουν πρόσβαση όλες οι συνδέσεις µε την βάση (sessions). ηµιουργία: CREATE TABLE ##tablename ( ) 20-15

C) UDFs σε TSQL (Άλλες ιαφορές UDF vs. Sprocs) Το UDFείναι υποπρόγραµµατο οποίο γράφεται για να εκτελείκάποιους υπολογισµούςκαι να επιστρέφει µια µοναδική τιµή. Το Sprocείναι υποπρόγραµµατο οποίο γράφεται για να εκτελεί µια ακολουθίααπό εντολέςκαι να επιστρέφει 0 ή περισσότερες τιµές. Τα UDFsΠΡΕΠΕΙνα επιστρέφουν τιµή µε το RETURNενώ τα SPROCsµπορούν να χρησιµοποιούν το RETURNαλλά χωρίς να επιστρέφουν τιµή. UDFs µπορεί να χρησιµοποιηθούν στο SELECT (δεδοµένου του ότι δεν κάνουν επεξεργασία πινάκων) Τα UDFs έχουν µόνο ΙΝ παραµέτρους. Τα SPROCs µπορεί να έχουν OUT ή IN/OUT παραµέτρους. 20-16

SQL/PSM - Persistent Stored Modules Στo πρότυπο ANSI, τα Sprocsκαι UDFsορίζονται ως µέρος της ενότητας SQL/PSM (SQL/Persistent Stored Modules) Το Persistent (δηλ., µόνιµα) υποδηλώνει ότι οι λειτουργίες αυτές αποθηκεύονταικαι εκτελούνταιαπό τον διαθέτη της βάσης παρά τον πελάτη. Βασικό Πρόβληµα είναι το γεγονός ότι ο κάθε κατασκευαστήςακολουθεί δική του σύνταξη για υλοποίηση του PSM H TSQL είναι ένα παράδειγµα µη-συµβατής γλώσσας. To ίδιο ισχύει για την PL/SQL (Procedural Language/ SQL) της Oracle 20-17

Υλοποίηση Προγρ. Αντικειµένων Βάσης µέσω Γλωσσών Υψηλού Επίπεδου Τα προγραµµατιστικά αντικείµενα µιας βάσης (UDFs, Sprocs, Triggers, User-Defined Types, κτλ)µπορούν σε πολλές βάσεις να γραφούν µε σύνταξηγλωσσών υψηλού επιπέδου αντί µε σύνταξη SQL/PSM (TSQL, PL/SQL) π.χ., SQL Server: Χρήση.ΝΕΤ και C# (δες SQLCLR: SQL Common Language Runtime). Ακολουθεί παράδειγµα στην επόµενη διαφάνεια. Oracle και DB2: Υλοποίηση UDFs σε C ή JAVA Λόγοι Χρήσης αυτών των Τεχνικών: Πιο πολλές δυνατότητες σε µια γλώσσα υψηλού επιπέδου Επίδοση, Ασφάλεια, κτλ. DBMS C# Program Catalog/ Indexes Tables SProcs 20-18 Triggers

Υλοποίηση Προγρ. Αντικειµένων Βάσης µέσω Γλωσσών Υψηλού Επίπεδου using System; using System.Data; using System.Data.Sql; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; public partial class UserDefinedFunctions { }; [Microsoft.SqlServer.Server.SqlFunction] public static SqlString RiskProfile() { } // Put your code here return new SqlString( Hello ); Σηµείωση: εν χρειάζεται να καταλάβετε τι αναπαριστούν οι βιβλιοθήκες στο using Υλοποίηση ενός UDF σε C# το οποίο ενσωµατώνεται στις λειτουργίες της βάσης DBMS C# Program Catalog/ Indexes Tables SProcs Triggers 20-19

D) 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 20-20

D) 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 0=OK, -1=ERROR, WHILE @@FETCH_STATUS=0 -- όσο δεν άδειασαν τα αποτελέσµατα BEGIN PRINT RTRIM(@ssn) + ', ' + RTRIM(@fname) -- RTRIM: φεύγει right spaces FETCH NEXT FROM employee_cursor --Ανάγνωση επόµενης γραµµής INTO @ssn, @fname END CLOSE employee_cursor --Κλείσιµο Cursor DEALLOCATE employee_cursor --Αποδέσµευση Πίνακα Ενδιάµεσων Αποτελεσµάτωνπου χρησιµοποιεί ο SqlServerγια το Result του Cursor. Εναλλακτικά µένει στην µνήµη µέχρι το Κλεισιµο του Session. Τυπώνει 1, 1 2, Franklin 3, Alicia 4, Jennifer 5, Ramesh 6, Joyce 7, Ahmad 8, James 20-21 1, 1

D) Cursors ( ροµείς)σε TSQL (Χαρακτηριστικά 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 20-22

D) Cursors ( ροµείς)σε TSQL (Παράδειγµα Χρήσης) 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 ] ] ] [;] 20-23

D) Cursors ( ροµείς)σε TSQL (Παράδειγµα Script για BackupΒάσεων) DECLARE @name VARCHAR(50) -- database name DECLARE @path VARCHAR(256) -- path for backup 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 CURSOR FOR SELECT name FROM master.dbo.sysdatabases WHERE name NOT IN ('master','model','msdb','tempdb') Μορφοποίηση Ηµερ.µε style 112, δηλ. σε: 20091119 -- Continued Οn Next Page Πίνακας του Καταλόγου που περιέχει τα ονόµατα όλων των βάσεων 20-24

D) Cursors ( ροµείς)σε TSQL (Παράδειγµα Χρήσης) -- 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 π.χ., 'C:\Backup\epl342_20091119.BAK CLOSE db_cursor DEALLOCATE db_cursor 20-25

Εξωτερικός Προγραµµατισµός DB Internal DB Programming DBMS SProcs Views UDFs Interfaces: JDBC, ODBC, κτλ. External DB Programming Έµφαση Επόµενων ιαφανειών Programming Language (π.χ., JAVA, C, C#, ) Catalog/ Indexes Tables Triggers 20-26

Εξωτερικός Προγραµµατισµός DB External DB Programming Ενσωµατωµένη SQL (Embedded SQL) SQLCA και SQLJ Ενσωµατωµένη SQL µε Κλήσεις Συναρτήσεων (Embedded SQL with APIs and Functions Calls) JDBC και SQL/CLI (ex ODBC) 20-27

Εµπέδωση SQL σε Γλώσσα C (SQLCA) Παράδειγµα include "sqlca.h" // Σύνδεση µε την βάση δεδοµένων µέσω εξειδικευµένων εντολών int loop; // µεταβλητή C EXEC SQL BEGIN DECLARE SECTION; varchar dname[16], fname[16], ; char ssn[10], bdate[11], ; int dno, dnumber, SQLCODE, ; EXEC SQL END DECLARE SECTION;... loop = 1; Γνωρίσµατα Σχέσης Βάσης while (loop) { prompt ( Enter SSN:, ssn); EXEC SQL select FNAME, LNAME, ADDRESS, SALARY } into :fname, :lname, :address, :salary from EMPLOYEE where SSN == :ssn; if (SQLCODE == 0) printf(fname, ); else printf( SSN does not exist:, ssn); prompt( More SSN? (1=yes, 0=no):, loop); END-EXEC ήλωση Μεταβλητών µεταφοράς δεδοµένων από SQL σε C Αρχικοποίηση µεταβλητών µεταφοράς δεδοµένων Έλεγχος Λαθών Εάν το αποτέλεσµα ήταν σύνολο πλειάδων τότε κάπου εδώ θα µπορούσε να χρησιµοποιηθεί EPL342: Databases ένας Cursor - Demetris της SQLCA Zeinalipour για εκτύπωση (University of αποτελεσµάτων Cyprus) 20-28

Εµπέδωση SQLσε JAVA (SQLJ) Υπάρχει η δυνατότητα εµπέδωσης SQL εκφράσεων και σε JAVA, κατ αντίστοιχο τρόπο µε το SQLCAπου είδαµε στην προηγούµενη διαφάνεια. Αυτή η προσπάθεια, που ξεκίνησε από την Oracle ονοµάζεται SQLJκαι έχει στόχο να κάνει τον προγραµµατισµό JAVA+Oracleευκολότερο. Στο SQLJ, οι εµπεδωµένες SQL εκφράσεις µετατρέπονται από τον µεταφραστή sqlj σε JDBC κλήσεις, οπόταν αυτή η τεχνολογία είναι απλά ένα επίπεδο αφαιρετικότητας πάνω από το JDBC. 20-29

Εµπέδωση SQLσε JAVA (SQLJ) Παράδειγµα ssn = readentry("enter a SSN: "); try { } #sql{select FNAME, LNAME, ADDRESS, SALARY into :fname, :lname, :address, :salary from EMPLOYEE where SSN = :ssn}; catch (SQLException se) { } System.out.println("SSN does not exist: ",+ssn); return; ήλωση ότι ακολουθεί εµπεδωµένη SQL έκφραση ιαχείριση Λαθών µέσα στο Περιβάλλον της JAVA System.out.println(fname + " " + lname + ); 20-30

Ενσωµατωµένη SQLµέσω Κλήσεων Συναρτήσεων O πιο παραδοσιακός τρόπος σύνδεσης µια εφαρµογής µε µια DBMS είναι µέσω κλήσεων συναρτήσεων. Εάν η εφαρµογή είναι γραµµένη σε JAVA τότε χρησιµοποιείται το JDBC, το οποίο είδατε στο φροντιστήριο. Εάν η εφαρµογήείναι γραµµένη σε άλλη γλώσσα τότε χρησιµοποιούνται άλλα API (Application Protocol Interfacesκαι βιβλιοθήκες. SQL/CLI (o διάδοχος του ODBC) ή OLEDB (σε Win) Microsoft s ActiveX Data Objects ADO ( 96), ADO.NET Σύνοψη τεχνολογιών Πρόσβασης σε εδοµένα από την Microsoft: http://support.microsoft.com/kb/190463 20-31

Ενσωµατωµένη SQLµέσω Κλήσεων Συναρτήσεων Για σύνδεση µέσω ODBC σε Windows απαιτείται η δήλωση µιας βάσης στον Data Source Administrator των Windows 20-32