Lecture 20: External DB Programming II

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

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

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

Lecture 19: Internal DB Programming II

Απαντήσεις θέματος 2. Παξαθάησ αθνινπζεί αλαιπηηθή επίιπζε ησλ εξσηεκάησλ.

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

TOOLBOOK (μάθημα 2) Δεκηνπξγία βηβιίνπ θαη ζειίδσλ ΠΡΟΑΡΜΟΓΗ: ΒΑΛΚΑΝΙΩΣΗ ΔΗΜ. ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΕ19 1 TOOLBOOK ΜΑΘΗΜΑ 2

Constructors and Destructors in C++

Βάσεις Δεδομέμωμ. Εξγαζηήξην V. Τκήκα Πιεξνθνξηθήο ΑΠΘ

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

Lecture 3: Introduction III

ΑΛΛΑΓΗ ΟΝΟΜΑΣΟ ΚΑΙ ΟΜΑΔΑ ΕΡΓΑΙΑ, ΚΟΙΝΟΥΡΗΣΟΙ ΦΑΚΕΛΟΙ ΚΑΙ ΕΚΣΤΠΩΣΕ ΣΑ WINDOWS XP

Αιγόξηζκνη Γνκή επηινγήο. Πνιιαπιή Δπηινγή Δκθωιεπκέλεο Δπηινγέο. Δηζαγωγή ζηηο Αξρέο ηεο Δπηζηήκεο ηωλ Η/Υ. introcsprinciples.wordpress.

ΑΠΑΝΤΗΣΔΙΣ ΓΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ II ΔΠΑΛ

Ενδεικτικά Θέματα Στατιστικής ΙΙ

ΕΝΤΟΛΕΣ WINDOWS ΚΑΙ UNIX

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

ΜΑΘΗΜΑ / ΤΑΞΗ : ΗΛΕΚΤΡΟΛΟΓΙΑ/Γ ΛΥΚΕΙΟΥ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 08/09/2014

ΔΕΟ 13. Ποσοτικές Μέθοδοι. θαη λα ππνινγίζεηε ην θόζηνο γηα παξαγόκελα πξντόληα. Να ζρεδηαζηεί γηα εύξνο πξντόλησλ έσο

Αιγόξηζκνη Δθρώξεζε, Δίζνδνο θαη Έμνδνο ηηκώλ Γνκή αθνινπζίαο. Δηζαγσγή ζηηο Αξρέο ηεο Δπηζηήκεο ησλ Η/Υ

H ΜΑΓΕΙΑ ΤΩΝ ΑΡΙΘΜΩΝ

Απνηειέζκαηα Εξσηεκαηνινγίνπ 2o ηεηξάκελν

ΡΤΘΜΙΕΙ ΔΙΚΣΤΟΤ ΣΑ WINDOWS

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

Βάσεις Δεδομέμωμ. Δξγαζηήξην Ι. Τκήκα Πιεξνθνξηθήο ΑΠΘ

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

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

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

Εγκατάσταση του πακέτου XAMPP. Β Τεχνική Σχολή Λεμεςοφ Σχολική χρονιά Άριςτοσ Παςιάσ

Αζκήζεις ζτ.βιβλίοσ ζελίδας 13 14

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

Κευάλαιο 8 Μονοπωλιακή Συμπεριφορά- Πολλαπλή Τιμολόγηση

Η αξρή ζύλδεζεο Client-Server

x x x x tan(2 x) x 2 2x x 1

Internal DB Programming, Scripts/Batches in TSQL

ΓΗΑΓΩΝΗΣΜΑ ΣΤΑ ΜΑΘΖΜΑΤΗΚΑ. Ύλη: Μιγαδικοί-Σσναρηήζεις-Παράγωγοι Θεη.-Τετν. Καη Εήηημα 1 ο :

ΑΠΛΟΠΟΙΗΗ ΛΟΓΙΚΩΝ ΤΝΑΡΣΗΕΩΝ ΜΕ ΠΙΝΑΚΕ KARNAUGH

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

Η επιζκόπηζη ηης έμμιζθης ενηολής ζηην Αλλοδαπή. Καηεξίλα Γαιαλνπνύινπ, Intellectual Property Manager, Microsoft Ειιάο Α.Ε.

Σημεία Ασύπματηρ Ππόσβασηρ (Hot-Spots)

ΣΕΙ Δυτικήσ Μακεδονίασ, Παράρτημα Καςτοριάσ Τμήμα Πληροφορικήσ και Τεχνολογίασ Υπολογιςτών

Κεθάιαην 20. Ελαχιστοποίηση του κόστους

MySQL Εργαστήριο #5 Ενεργοποιητές (συνέχεια)

Η/Υ A ΤΑΞΕΩΣ ΑΕ Συστήματα Αρίθμησης. Υποπλοίαρχος Ν. Πετράκος ΠΝ

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

ΘΔΚΑ ΡΖΠ ΑΛΑΓΛΩΟΗΠΖΠ

Δπηιέγνληαο ην «Πξνεπηινγή» θάζε θνξά πνπ ζα ζπλδέεζηε ζηελ εθαξκνγή ζα βξίζθεζηε ζηε λέα ρξήζε.

Α. Εηζαγσγή ηεο έλλνηαο ηεο ηξηγσλνκεηξηθήο εμίζσζεο κε αξρηθό παξάδεηγκα ηελ εκx = 2

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

ΔΡΓΑΙΑ 1. Γιαδικησακά πληροθοριακά σζηήμαηα. Ομάδα Δργαζίας: Μεηαπηστιακοί Φοιηηηές. ηέθανος Κονηοβάς ΑΔΜ :283. Πάζτος Βαζίλειος ΑΔΜ :288

ΚΕΦ. 2.3 ΑΠΟΛΤΣΗ ΣΘΜΗ ΠΡΑΓΜΑΣΘΚΟΤ ΑΡΘΘΜΟΤ

Case Study. Παξαθάηω παξνπζηάδνπκε βήκα - βήκα κε screenshots έλα παξάδεηγκα ππνβνιήο κηαο εξγαζίαο θαη ηελ παξαγωγή ηνπ Originality Report.

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

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

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

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

ΗΥ-150 Πξνγξακκατησκόο Ταμηλόκεσε θαη Αλαδήτεσε

ΑΝΤΗΛΙΑΚΑ. Η Μηκή ζθέθηεθε έλαλ ηξόπν, γηα λα ζπγθξίλεη κεξηθά δηαθνξεηηθά αληειηαθά πξντόληα. Απηή θαη ν Νηίλνο ζπλέιεμαλ ηα αθόινπζα πιηθά:

ΣΕΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΕΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΥΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

ΠΑΡΑΡΣΗΜΑ Δ. ΔΤΡΔΗ ΣΟΤ ΜΔΣΑΥΗΜΑΣΙΜΟΤ FOURIER ΓΙΑΦΟΡΩΝ ΗΜΑΣΩΝ

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

ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ. Οξηδόληηα θαη θαηαθόξπθε κεηαηόπηζε παξαβνιήο

5 η Δργαζηηριακή Άζκηζη Κσκλώμαηα Γσαδικού Αθροιζηή/Αθαιρέηη

Πολυεπίπεδα/Διασυμδεδεμέμα Δίκτυα

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

Κβαντικοί Υπολογισμοί. Πέκπηε Γηάιεμε

EL Eνωμένη στην πολυμορυία EL A8-0046/319. Τροπολογία

Παιχνίδι γλωζζικής καηανόηζης με ζχήμαηα!

f '(x)g(x)h(x) g'(x)f (x)h(x) h'(x) f (x)g(x)

6 η Εργαζηηριακή Άζκηζη Επαλήθεσζη Λειηοσργίας Βαζικών Φλιπ-Φλοπ

Γοκή επαλάιευες Δληοιές Όζο & Μέτρης_όηοσ

Οργάνωση και Δομή Παρουσιάσεων

ΣΥΣΤΗΜΑΤΑ ΑΛΓΕΒΡΑ Α ΛΥΚΕΙΟΥ. 1. Να ιπζνύλ ηα ζπζηήκαηα. 1 0,3x 0,1y x 3 3x 4y 2 4x 2y ( x 1) 6( y 1) (i) (ii)

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

iii. iv. γηα ηελ νπνία ηζρύνπλ: f (1) 2 θαη

ΜΑΘΗΜΑΣΑ ΦΩΣΟΓΡΑΦΙΑ. Ειζαγωγή ζηη Φωηογραθία. Χριζηάκης Σαζεΐδης EFIAP

(Ενδεικηικές Απανηήζεις) ΘΔΜΑ Α. Α1. Βιέπε απόδεημε Σει. 262, ζρνιηθνύ βηβιίνπ. Α2. Βιέπε νξηζκό Σει. 141, ζρνιηθνύ βηβιίνπ

Ηλεκηπονικά Απσεία και Διεπαθέρ

Ζαχαρίας Μ. Κοντοπόδης Εργαστήριο Λειτουργικών Συστημάτων ΙΙ

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

Άμεσοι Αλγόριθμοι: Προσπέλαση Λίστας (list access)

ΚΔΦ. 2.4 ΡΗΕΔ ΠΡΑΓΜΑΣΗΚΩΝ ΑΡΗΘΜΩΝ

ΔΙΑΓΩΝΙΣΜΑ ΣΤΗ ΦΥΣΙΚΗ. Ύλη: Εσθύγραμμη Κίνηζη

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

Να ζρεδηάζεηο ηξόπνπο ζύλδεζεο κηαο κπαηαξίαο θαη ελόο ιακπηήξα ώζηε ν ιακπηήξαο λα θσηνβνιεί.

ΣΕΙ Δυτικήσ Μακεδονίασ, Παράρτημα Καςτοριάσ Τμήμα Πληροφορικήσ και Τεχνολογίασ Υπολογιςτών

Δξγαζηεξηαθή άζθεζε 03. Σηεξενγξαθηθή πξνβνιή ζην δίθηπν Wulf

Σήκαηα Β Α Γ Γ Δ Λ Η Σ Ο Ι Κ Ο Ν Ο Μ Ο Υ Γ Ι Α Λ Δ Ξ Η - ( 2 ) ΕΙΣΑΓΨΓΗ ΣΤΙΣ ΤΗΛΕΠΙΚΟΙΝΨΝΙΕΣ

α) ηε κεηαηόπηζε x όηαλ ην ζώκα έρεη κέγηζην ξπζκό κεηαβνιήο ζέζεο δ) ην κέγηζην ξπζκό κεηαβνιήο ηεο ηαρύηεηαο

Δηζαγωγή ζηε γιώζζα C Παξνπζίαζε 3 ε : Δίζνδνο/ Έμνδνο - Σπλαξηήζεηο - Pointers

Image J Plugin particle tracker για παρακολούθηση της κίνησης σωματιδίων

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

MySQL Εργαστήριο #3 Structured Query Language - SQL

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙ ΜΟ

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 4 ΣΥΝΔΥΑΣΤΙΚΑ ΚΥΚΛΩΜΑΤΑ

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

ΜΑΘΗΜΑΤΙΚΑ ΘΔΤΙΚΗΣ ΚΑΙ ΤΔΦΝΟΛΟΓΙΚΗΣ ΚΑΤΔΥΘΥΝΣΗΣ Β ΛΥΚΔΙΟΥ ΤΔΣΤ(1) ΣΤΑ ΓΙΑΝΥΣΜΑΤΑ

Lecture 18: Internal DB Programming I

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΤΙΚΗ ΣΚΥΤΑΛΟΓΡΟΜΙΑ 2015 ΓΙΑ ΤΟ ΓΥΜΝΑΣΙΟ Τεηάπηη 28 Ιανουαπίου 2015 ΛΔΥΚΩΣΙΑ Τάξη: Α Γυμναζίου

Η Αξιολόγηζη ηηρ Πεπίλητηρ Κειμένος Παιδαγυγικό Ινζηιηούηο

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 Demetris Zeinalipour 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) Απνηειέζκαηα Midterm 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 Παξάκεηξνο Δηζόδνπ 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 = IF @PurchaseTotal = 0 BEGIN SET @CustomerLevel = Empty RETURN END IF @PurchaseTotal > 1000 SET @CustomerLevel = 'Standard' ELSE (SELECT SUM(amount) FROM transactions tr 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

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 (Παξάδεηγκα 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 (Embedded SQL) Δλζσκαησκέλε SQL (Embedded SQL): Αλαθέξεηαη ζηελ δήισζε SQL εληνιώλ ζε κηα γιώζζα πξνγξακκαηηζκνύ πςεινύ επηπέδνπ (ε νπνία νλνκάδεηαη Γιώζζα Υπνδνρήο (Host language), ελώ ε SQL νλνκάδεηαη Υπνγιώζζα (sublanguage). Θα δνύκε παξαδείγκαηα ησλ αθόινπζσλ δπν θαηεγνξηώλ: Δκπέδσζε ζε γιώζζα C (SQLCA) Δκπέδσζε ζε γιώζζα JAVA (SQLJ) ΣΗΜΔΙΩΣΗ: ΓΔΝ ζα κπνύκε ζε πνιιέο ιεπηνκέξεηεο εθόζνλ ν πην δηαδεδνκέλνο ηξόπνο ελζσκάησζεο SQL ζε γιώζζεο ππνδνρήο είλαη κέζσ Κιήζεσλ Σπλαξηήζεσλ (JDBC, CLI/SQL (ex ODBC)), πνπ ζα δνύκε ζε ιίγν. Σηόρνο είλαη απιά λα θαηαιάβεηε πεξίπνπ ηη γίλεηαη ζε απηέο ηηο γιώζζεο ελζσκάησζεο. 20-28

Δκπέδσζε 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-29

Δκπέδσζε SQL ζε JAVA (SQLJ) Υπάξρεη ε δπλαηόηεηα εκπέδσζεο SQL εθθξάζεσλ θαη ζε JAVA, θαη αληίζηνηρν ηξόπν κε ην SQLCA πνπ είδακε ζηελ πξνεγνύκελε δηαθάλεηα. Απηή ε πξνζπάζεηα, πνπ μεθίλεζε από ηελ Oracle νλνκάδεηαη SQLJ θαη έρεη ζηόρν λα θάλεη ηνλ πξνγξακκαηηζκό JAVA+Oracle επθνιόηεξν. Σην SQLJ, νη εκπεδσκέλεο SQL εθθξάζεηο κεηαηξέπνληαη από ηνλ κεηαθξαζηή sqlj ζε JDBC θιήζεηο, νπόηαλ απηή ε ηερλνινγία είλαη απιά έλα επίπεδν αθαηξεηηθόηεηαο πάλσ από ην JDBC. 20-30

Δκπέδσζε 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-31

Δλζσκαησκέλε 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-32

Δλζσκαησκέλε SQL κέζσ Κιήζεσλ Σπλαξηήζεσλ Γηα ζύλδεζε κέζσ ODBC ζε Windows απαηηείηαη ε δήισζε κηαο βάζεο ζηνλ Data Source Administrator ησλ Windows 20-33