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

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

Lecture 20: External DB Programming II

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

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

Lecture 19: Internal DB Programming II

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

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

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

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

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

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

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

Διάλεξη 13: Γλώσσα Επεξεργασίας Δεδομένων/ Data Manipulation Language (SQL DML) I. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

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

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

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

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

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

Lecture 18: Internal DB Programming I


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

MySQL stored procedures

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

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

Ηλεκτρονικοί Υπολογιστές II

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Lecture 20: External DB Programming II

Lecture 21: Functional Dependencies and Normalization

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

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

Τμήμα Πληροφορικής ΑΠΘ

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

Διάλεξη 15: Γλώσσα Επεξεργασίας Δεδομένων/ Data Manipulation Language (SQL DML) III. Διδάσκων: Παναγιώτης Ανδρέου

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

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 9β: SQL (Διαχείριση εγγραφών, Όψεις, Περιορισμοί, Εναύσματα) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής

( Boats)) ( Tempsids, bid. sname. Boats. Boats. Boats. (Reserves)/ > Reserves. Interlake' Sailors) ...

Ορισμοί Σχεσιακού Μοντέλου και (απλές)τροποποιήσεις Σχέσεων στην SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

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

Ηλεκτρονικοί Υπολογιστές II

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

Lecture 3: Introduction III

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

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

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

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

Εισαγωγή στην πληροφορική

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

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

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

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

Προσοµοίωση τροχιάς σε Oracle Spatial 8i DBMS

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

DELETE, UPDATE, INSERT

Διάλεξη 14: Γλώσσα Επεξεργασίας Δεδομένων/ Data Manipulation Language (SQL DML) II. Διδάσκων: Παναγιώτης Ανδρέου

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ.

SQL Data Manipulation Language

Δομημένος Προγραμματισμός

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

Το σχεσιακό μοντέλο βάσεων δεδομένων

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

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Ενότητα 3:

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

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

DELETE, UPDATE, INSERT.

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

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

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

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

Βάσεις Δεδομένων 2η εργαστηριακή άσκηση

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

Ανοικτά Ακαδημαϊκά Μαθήματα

Ηλεκτρονικοί Υπολογιστές II

Βάσεις Δεδομένων. Σχεσιακό Μοντέλο Δεδομένων. Βασίλειος Βεσκούκης Ορισμός Βάσης Δεδομένων Δομή Περιορισμοί

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Επιλέγει όλες τις πλειάδες, από μια σχέση R, που ικανοποιούν τη συνθήκη επιλογής.

Ανοικτά Ακαδημαϊκά Μαθήματα

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

Transcript:

Διάλεξη 17: Προγραμματισμός Βάσης Δεδομένων Ι Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: Όψεις (Views) σε TSQL Αποθηκευμένες Διαδικασίες (Stored Procedures) σε TSQL Συναρτήσεις Χρήστη (UDFs) σε TSQL Διδάσκων: Παναγιώτης Ανδρέου EPL342: Databases Demetris Zeinalipour (University of Cyprus) 1

Όψεις/Views Μια όψη είναι ένας νοητός πίνακας ( virtual table) ο οποίος παράγεται από άλλους κανονικούς πινάκες (Base Tables) Στην πράξη μια όψη δεν είναι τίποτα περισσότερο από μια αποθηκευμένη επερώτηση SELECT! Σύνταξη δημιουργίας όψεων: CREATE VIEW <view name> <statement> Παραδείγματα Όψεων Θεωρήστε πίνακα PERSON (όπως φαίνεται δεξιά) PERSON (P) CREATE VIEW GET_ALL_PERSONS SELECT * FROM PERSONS CREATE VIEW GET_MALE_PERSONS SELECT * FROM PERSONS WHERE GENDER= M PID PNAME GENDER 1 Andreas M 2 Kostas M 3 Maria F 4 Eleni F CREATE VIEW GET_FEMALE_PERSONS SELECT * FROM PERSONS WHERE GENDER= F EPL342: Databases Demetris Zeinalipour (University of Cyprus) 2

Χαρακτηριστικά Όψεων Τα δεδομένα μιας όψης ΔΕΝ αποθηκεύονται φυσικά κάπου (τα δεδομένα αποθηκεύονται στους πηγαίους πίνακες) Μπορούν να χρησιμοποιηθούν όπως τους υπόλοιπους πίνακες (σε επερωτήσεις, συνενώσεις, συναθροίσεις, κτλ.) Περιέχουν ΠΑΝΤΑ ενημερωμένα δεδομένα. Μπορούμε να εκτελέσουμε αλλαγές σε μια όψη (INSERT/UPDATE/DELETE) κάτω από τις εξής προϋποθέσεις Ενημερώσεις γίνονται μόνο εάν η όψη ορίζεται από ένα base tables (όχι από περισσότερα base tables) Επίσης, όψεις με aggregates & group by ΔΕΝ ενημερώνονται. Εκτέλεση μιας Όψης είναι πιο γρήγορο από εκτέλεση της αντίστοιχης SELECT επερώτησης. Αυτό επειδή το VIEW είναι ήδη μεταγλωττισμένο και έτοιμοι για εκτέλεση Ο query optimizer εισάγει κάποιooverhead. EPL342: Databases Demetris Zeinalipour (University of Cyprus) 3

Πλεονεκτήματα Όψεων Ευελιξία στην ανάπτυξη εφαρμογών μπορούμε να αναπαραστήσουμε περίπλοκες επερωτήσεις ως νοητούς πίνακες. Μπορούμε να δώσουμε διαφορετική αντίληψη στον κάθε χρήστη για την βάση Ασφάλεια Επιτρέπουν στον DBA να εκθέσει μόνο τις πίνακες/στήλες που επιθυμεί σε συγκεκριμένες ομάδες χρηστών. Η δομή της ΒΔ μπορεί να μετατραπεί σε μαύρο κουτί Συμβατή με προηγούμενες εκδόσεις της βάσης Ακόμα και αν έχει αλλάξει η δομή της ΒΔ, οι όψεις μπορούν να προσομοιώσουν την προηγούμενη δομή EPL342: Databases Demetris Zeinalipour (University of Cyprus) 4

Παράδειγμα Όψης σε SQL Όψη με συνάθροιση στο SELECT. CREATE VIEW Emp_Sal2 SELECT dno, SUM(salary) SUM_SALARY FROM PERSON GROUP BY dno Επισημάνσεις: Σε περίπτωση ενημέρωσης του πίνακα EMPLOYEE ενημερώνεται αυτόματα η όψη. Η ίδια η όψη ΔΕΝ μπορεί να ενημερωθεί από τον χρήστη με INSERT/UPDATE/DELETE (λόγω του aggregate / group by). Π.χ., UPDATE Emp_Sal2 SET dno=1 EPL342: Databases Demetris Zeinalipour (University of Cyprus) 5

Σύνταξη Όψεων σε T SQL CREATE VIEW [<schema name>].<view.name> [(column namelist>)] [WITH ENCRYPTION] [[,] WITH SCHEMABINDING] <SELECT statement> [WITH CHECK OPTION] [;] <schema name>: dbo (default), guest, κτλ. <column name list>: ονόματα γνωρισμάτων της νέας όψης WITH ENCRYPTION: Ο SQL κώδικας της όψης κωδικοποιείται μέσα στη βάση για να μην μπορεί να τον δει κανείς (ούτε και εσείς!). Για να δείτε τον κώδικα μη κωδικοποιημεν. όψεων: EXEC sp_helptext view_name; WITH SCHEMABINDING: Διασφαλίζει ότι η όψη ΔΕΝ θα μείνει ορφανή σε περίπτωση δομικών αλλαγών στα basetables. Π.χ., εάν διαγραφεί ο πίνακας πάνω στον οποίο ορίζεται η όψη. WITH CHECK OPTION: Κατά την τροποποίηση (insert(x)/update(χ)) δεδομένων (μέσω μιας όψης) ελέγχει ότι το X είναι σύμφωνα με το WHERE του <SELECT statement> (έτσι ώστε να μην χαθούν τα δεδομένα από την όψη) EPL342: Databases Demetris Zeinalipour (University of Cyprus) 6

Παράδειγμα Δημιουργίας Όψης σε T SQL USE AdventureWorks; change to specified database context GO not tsql cmd. Instructs SQLStudio to execute statements. IF OBJECT_ID ('dbo.seattleonly', 'V') IS NOT NULL DROP VIEW dbo.seattleonly; GO OBJECT_ID (int) uniquely identifies objects in DB CREATE VIEW dbo.seattleonly WITH SCHEMABINDING structural changes to Person.Contact (e.g., drop) will be prohibited. SELECT c.lastname, c.firstname FROM Person.Contact c WHERE c.city = 'Seattle' WITH CHECK OPTION; any update to this view has to obey the WHERE condition(i.e., c.city= Seattle ) GO EPL342: Databases Demetris Zeinalipour (University of Cyprus) 7

Stored Procedures σε TSQL Stored Procedures (SPs), είναι διαδικασίες (T)SQL οι οποίες αποθηκεύονται στη βάση δεδομένων και οι οποίες μπορούν να πάρουν ορίσματα και να επιστρέψουν τιμές. Σύνταξη: Παρόμοια με τις όψεις, αλλά επιτρέπουν και παραμέτρους CREATE PROCEDURE <sp name>[(<params)] <statement(s)> Παραδείγματα Stored Procedures Θεωρήστε πίνακα PERSON (όπως φαίνεται δεξιά) PERSON (P) PID PNAME GENDER CREATE PROCEDURE GET_ALL_PERSONS SELECT * FROM PERSONS CREATE PROCEDURE GET_PERSONS_BY_GENDER ( @GENDER CHAR(1) ) SELECT * FROM PERSONS WHERE GENDER=@GENDER 1 Andreas M 2 Kostas M 3 Maria F 4 Eleni F EPL342: Databases Demetris Zeinalipour (University of Cyprus) 8

Εκτέλεση/Ακύρωση Stored Procedure Εκτέλεση SP (χωρίς Παραμέτρους) μέσω EXECUTE EXECUTE GET_ALL_PERSONS Εκτέλεση SP (με Παραμέτρους) μέσω EXECUTE EXECUTE GET_PERSONS_BY_GENDER Μ Ακύρωση SP DROP PROCEDURE spemployee Μεταβολή Sproc ALTER PROCEDURE GET_PERSONS_BY_GENDER ( @GENDER CHAR(1) @ID INT ) SELECT * FROM PERSONS WHERE GENDER=@GENDER AND PID>=@PID EPL342: Databases Demetris Zeinalipour (University of Cyprus) 9

Χαρακτηριστικά Stored Procedures Βασικό Πλεονέκτημα SPs: Επίδοση/Μειωμένη Κίνηση Δικτύου: Το 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 Μεγαλύτερο Πακέτο EPL342: Databases Demetris Zeinalipour (University of Cyprus) 10

Πλεονεκτήματα/Μειονεκτήματα SPs Πλεονεκτήματα SPs Ασφάλεια: Τα Sprocs μας επιτρέπουν να δώσουμε πρόσβαση σε λειτουργίες της βάσης χωρίς να δίνουμε πρόσβαση στους πίνακες. Ακρίβεια: Οι διεπαφές (ODBC, JDBC, κτλ) στη προσπάθεια να προσφέρουν ένα κοινό υπόβαθρο λειτουργίας σε διαφορετικούς κατασκευαστές βάσεων κάνουν διάφορους συμβιβασμούς στην ακρίβεια (π.χ., μετατροπή τύπων κτλ) Εύκολη μεταφορά σε άλλη Γλώσσα Προγραμματισμού: Αυτό εφόσον όλη η λογική της βάσης υλοποιείται εσωτερικά και όχι στην γλώσσα προγραμματισμού. Μειονεκτήματα SPs Δύσκολη Μεταφορά σε άλλο DBMS: Αυτό λόγω του ότι οι γλώσσες που χρησιμοποιούνται σε Προγ. Γλώσσες Βάσεων Δεδομένων (π.χ., σύνταξη της TSQL) δεν είναι προτυποποιημένες EPL342: Databases Demetris Zeinalipour (University of Cyprus) 11

Stored Procedures: Παράμετροι Εισόδου Οι παράμετροι εισόδου/εξόδου δηλώνονται με πρόθεμα το @ (T SQL, PL/SQL) Πολλές παράμετροι εισόδου διαχωρίζονται με κόμμα (,) Παράδειγμα: ALTER PROCEDURE GET_PERSONS_BY_GENDER ( @GENDER CHAR(1), @ID INT ) SELECT * FROM PERSONS WHERE GENDER=@GENDER AND PID>=@PID EPL342: Databases Demetris Zeinalipour (University of Cyprus) 12

Stored Procedures: Παράμετροι Εξόδου Οι παράμετροι εξόδου δηλώνονται με το επίθεμα OUT Ένα SP υποστηρίζει πολλές παραμέτρους εξόδου παρόμοια με μεταβλητές διά αναφοράς Παράδειγμα: CREATE PROCEDURE sp_customerlevel @CustomerID INTEGER, @CustomerLevel VARCHAR(20) OUT DECLARE @PurchaseTotal DECIMAL(8,2) SET @PurchaseTotal = (SELECT SUM(amount) FROM transactions tr WHERE tr.customerid = @CustomerID) IF @PurchaseTotal = 0 BEGIN SET @CustomerLevel = Empty END ELSE BEGIN SET @CustomerLevel = 'Standard END Κλήση Sproc sp_customerlevel DECLARE @CustomerLevel VARCHAR(20) EXEC sp_customerlevel 12391, @CustomerLevel OUT PRINT @CustomerLevel Επιστρέφει Empty EPL342: Databases Demetris Zeinalipour (University of Cyprus) 13

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

UDF (User Defined Functions) Σύνταξη (μεταβλητή εξόδου απλός τύπος): CREATE FUNCTION <function name> (<parameter list>) Παράμετρος Εισόδου (δια τιμής) RETURNS <data type> Μεταβλητή Εξόδου (δεν μπορούμε να περάσουμε τιμές δια αναφοράς ) BEGIN RETURN <variable or value> END Σύνταξη (μεταβλητή εξόδου πίνακας): CREATE FUNCTION <function name>. (<parameter list>) Παράμετρος Εισόδου (δια τιμής) RETURNS TABLE RETURN ( <select statement> ) EPL342: Databases Demetris Zeinalipour (University of Cyprus) 15

Παραδείγματα UDFs CREATE FUNCTION dbo.meterstoinches ( @Meters DECIMAL(10,3) ) RETURNS DECIMAL(10,3) BEGIN DECLARE @Inches DECIMAL(10,3) SET @Inches = (@Meters * 3.281 ) * 12 RETURN @Inches END Γενικά, ισχύουν οι γνωστοί κανόνες συναρτήσεων που υπάρχουν σε άλλες γλώσσες (π.χ., εμβέλεια μεταβλητών, κτλ.) EPL342: Databases Demetris Zeinalipour (University of Cyprus) 16

Παραδείγματα UDFs Κλήση UDF (Scalar): SELECT dbo.meterstoinches(123.45) 'Inches' Επιστρέφει: Inches 4860.473 (1 row(s) affected) Άλλο Παράδειγμα: SELECT Weight, dbo.meterstoinches(length), Cost,... FROM Products WHERE ProductID = 199232 EPL342: Databases Demetris Zeinalipour (University of Cyprus) 17

Παραδείγματα UDFs UDF χωρίς παράμετρο CREATE FUNCTION dbo.two () RETURNS INT Τιμή Επιστροφής BEGIN RETURN 2 Επιστροφή Αποτελέσματος END Χρήση UDF σε Query SELECT * FROM EMP1 WHERE ssn = dbo.two() Αποτέλεσμα Εκτέλεσης Query ssn Fname Minit Lname Dno salary ---------- ---------- ---------- ---------- ----------- ----------- 2 Franklin T Wong 5 10000 (1 row(s) affected) EPL342: Databases Demetris Zeinalipour (University of Cyprus) 18

UDF (User Defined Functions) Παρόμοια με Stored Procedure CREATE FUNCTION getpersons( @PERSON_ID INT ) RETURNS TABLE RETURN ( SELECT * FROM PERSONS WHERE PERSON_ID=@PERSON_ID ) EPL342: Databases Demetris Zeinalipour (University of Cyprus) 19

Παραδείγματα UDFs Για δυναμικούς πίνακες ή πίνακες που χρειάζονται περισσότερη επεξεργασία τότε χρειαζόμαστε τον ειδικό τύπο μεταβλητής TABLE που επιστρέφει πίνακα σαν μεταβλητή CREATE FUNCTION dbo.getemployees() RETURNS @records TABLE ( Δήλωση μορφής πίνακα επιστροφής EmpID nchar(10) NOT NULL, FirstName nchar(10) NULL ) BEGIN Εισαγωγή Όλων των αποτελεσμάτων της σχέσης Emp1 στη σχέση @records INSERT INTO @records SELECT ssn,fname FROM Emp1 Τερματισμός της συνάρτησης (το records επιστρέφεται έτσι και αλλιώς) RETURN; END EPL342: Databases Demetris Zeinalipour (University of Cyprus) 20

Διαφορές μεταξύ SPs vs. UDFs Τα UDFs και στα SPs έχουν περισσότερες ομοιότητες παρά διαφορές στην TSQL. Βασικές διαφορές: Α) Στο πως γίνεται η κλήση: Στα UDFs η κλήση συνήθως στο SELECT (και κάποτε στο WHERE ή FROM) ενώ στα SPs η κλήση γίνεται μέσω EXEC. B) Στο πως επιστρέφονται τα αποτελέσματα: Στα UDFs τα αποτελέσματα μπορούν να χρησιμοποιηθούν άμεσα ενώ στα SPs πρέπει να τοποθετηθούν σε ενδιάμεσους πίνακες Π.χ., Για χρήση αποτελεσμάτων της spemployee σε ενα query τα εισάγω πρώτα σε ένα ενδιάμεσο πίνακα EmpBack INSERT INTO EmpBack EXEC spemployee EPL342: Databases Demetris Zeinalipour (University of Cyprus) 21

Διαφορές μεταξύ SPs vs. UDFs (συν.) Το UDF είναι υποπρόγραμμα το οποίο γράφεται για να εκτελεί κάποιους υπολογισμούς και να επιστρέφει μια μοναδική τιμή. Το Sproc είναι υποπρόγραμμα το οποίο γράφεται για να εκτελεί μια ακολουθία από εντολές και να επιστρέφει 0 ή περισσότερες τιμές. Τα UDFs ΠΡΕΠΕΙ να επιστρέφουν τιμή με το RETURN ενώ τα SPROCs μπορούν να χρησιμοποιούν το RETURN αλλά χωρίς να επιστρέφουν τιμή. UDFs μπορεί να χρησιμοποιηθούν στο SELECT (δεδομένου του ότι δεν κάνουν επεξεργασία πινάκων) Τα UDFs έχουν μόνο ΙΝ παραμέτρους. Τα SPROCs μπορεί να έχουν OUT ή IN/OUT παραμέτρους. EPL342: Databases Demetris Zeinalipour (University of Cyprus) 22