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

Σχετικά έγγραφα
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

Διαχείριση Πολιτισμικών Δεδομένων

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2 ο Σύνολο Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Εξεταστική Περίοδος Ιουνίου 2004

Τεχνολογία Πολιτισμικού Λογισμικού

Σύνολα Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Στην συνέχεια και στο επόµενο παράθυρο η εφαρµογή µας ζητάει να εισάγουµε το Username και το Password το οποίο σας έχει δοθεί από τον ΕΛΚΕ.

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

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

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

Εισαγωγή Mια από τις βασικές λειτουργίες ενός σχεσιακού συστήµατος διαχείρισης βάσεων δεδοµένων είναι η διαχείριση του πληροφοριακού περιεχοµένου που

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

Η αναλυτική περιγραφή της γλώσσας SQL αποτελεί αντικείµενο των σελίδων που ακολουθούν. Η ΓΛΩΣΣΑ ΟΡΙΣΜΟΥ Ε ΟΜΕΝΩΝ

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

ΒΙΒΛΙΟ ΠΑΓΙΩΝ Ο ΗΓΙΕΣ ΧΡΗΣΗΣ ΓΙΑ ΤΟ CALCULUS ULTRA.

Ακολουθεί η πλήρης ανάλυση της παραµετροποίησης χωρισµένη στις αντίστοιχες ενότητες µε αυτές του module Customization Tools. :

Κεφάλαιο 5ο: Εντολές Επανάληψης

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

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

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

Βάσεις Δεδομένων Ι SQL Μέρος 3 ο. (Constraints & Joins) Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

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

Με Χρήση της ΦΟΡΜΑΣ να προσθέσετε εγγραφές στον πίνακα που ακολουθεί

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

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

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

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

Certified Data Base Designer (CDBD)

ΕΘΝΙΚΗ ΤΡΑΠΕΖΑ ΥΔΡΟΛΟΓΙΚΩΝ ΚΑΙ ΜΕΤΕΩΡΟΛΟΓΙΚΩΝ ΠΛΗΡΟΦΟΡΙΩΝ ΟΔΗΓΙΕΣ ΚΑΤΑΧΩΡΗΣΗΣ ΧΡΟΝΟΣΕΙΡΩΝ ΓΙΑ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΒΔ ΕΝΥΔΡΙΣ ΤΟΥ ΥΔΡΟΣΚΟΠΙΟΥ

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

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

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

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

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

DELETE, UPDATE, INSERT

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

ALERTS ή EDA (Event Driven Actions)

DELETE, UPDATE, INSERT.

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

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

ΑΣΚΗΣΗ 1. Structural Programming

Τεχνολογία Πολιτισμικού Λογισμικού

Βάσεις εδοµένων Ευαγγελία Πιτουρά 2

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

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

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

ιαχείριση Στόλου Οχηµάτων

PHPMyAdmin: Σύντομος οδηγός για αρχάριους

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο. Εργαστηριακή Άσκηση 4 7/02/2012

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram.

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

Ο ΗΓΙΕΣ ΓΙΑ ΤΟ ΚΛΕΙΣΙΜΟ ΧΡΗΣΗΣ ΣΤΟ DYNAMICS NAV INNOVERA ERP

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

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

Η SQL ως γλώσσα τροποποίησης Δεδομένων


Φύλλο Εργασίας «Προσέγγιση της γραφής Braille µέσω Scratch»

ΚΕΦΑΛΑΙΟ ΤΡΙΤΟ ΕΝΤΟΛΕΣ SQL

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

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

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

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΠΕΜΠΤΟ Views, Triggers Γιώργος Μαρκοµανώλης

Περιεχόµενα Όψη... 1 ηµιουργία όψης... 2 Επιλογή CHECK... 3 Όψεις µόνο για εµφάνιση δεδοµένων... 4 ιαγραφή όψης... 4 Triggers... 5 Σειρά εκτελέσεων των triggers... 6 ηµιουργία Triggers... 7 Generators... 7 auto-increment... 8 Μετασχηµατισµοί... 8 Default τιµές µε triggers... 9

Όψεις Όψεις (Views) Η όψη είναι ένας τύπος πίνακα που δεν αποθηκεύει δεδοµένα. Λειτουργεί σαν ένα φίλτρο στις στήλες και στις γραµµές των πινάκων που αναφέρεται η όψη. Το ερώτηµα που ορίζει την όψη µπορεί να αναφέρεται σε έναν ή σε παραπάνω πίνακες, καθώς και σε άλλη όψη αυτής της βάσης. Μπορείτε να κάνετε ερωτήµατα στην όψη σαν να ήταν πραγµατικός πίνακας. Οι όψεις δεν µπορούν να έχουν κλειδιά ή indexes. Σαν index λειτουργούν, τα indexes των πινάκων που αναφέρεται η όψη. Μια όψη δεν µπορεί να περιέχει την εντολή ORDER BY γιατί δηµιουργείται πρόβληµα στην βάση. Μπορούµε να δηµιουργήσουµε όψεις µε κάθε είδους ερώτηµα SELECT. Παραδείγµατα Για να δηµιουργήσουµε µια όψη µε την οποία θα βλέπουµε τους φοιτητές που πέρασαν στο πανεπιστήµιο από το 1997 και πιο µετά, δίνουµε την εντολή (οι πίνακες είναι από το τεστ 18/1//2004): CREATE VIEW AFTER_1997 SELECT * FROM STUDENTS WHERE START_DATE> 1.1.1997 ; Για να δηµιουργήσουµε µια όψη για την εύρεση των αριθµών µητρώων των φοιτητών και των ονοµάτων των µαθηµάτων που έχουν περάσει, δίνουµε την εντολή: CREATE VIEW ID_PS SELECT STUDENTS.ID, LESSONS.NAME FROM STUDENTS, LESSONS, GRADES WHERE STUDENTS.ID=GRADES.ID AND GRADES.CODE=LESSONS.CODE AND GRADE>=5; Χρησιµότητα όψεων: Με τις όψεις µπορούµε: Να έχουµε ανεξαρτησία δεδοµένων, δηλαδή αν αποφασίσουµε να χωρίσουµε έναν πίνακα, σε δύο πίνακες, τότε µπορούµε να δηµιουργήσουµε µια νέα όψη η οποία θα είναι η ένωση των πινάκων και θα µπορείτε να κάνετε ερωτήµατα πάνω στην όψη σαν να είναι ένας πίνακας. Να έχουµε ασφάλεια δεδοµένων. Με τις όψεις µπορούµε να δίνουµε την δυνατότητα στους χρήστες µόνο τα δεδοµένα που θέλουµε. Για παράδειγµα σε µια βάση µε υπαλλήλους, µπορούµε να ορίσουµε να µην εµφανίζεται ο µισθός των υπαλλήλων. 1

Όψεις Παρατήρηση: Για να δηµιουργήσετε όψεις πρέπει να έχετε δικαιώµατα στους αντίστοιχους πίνακες που χρησιµοποιείται. ηµιουργία όψης Σε µια όψη υποστηρίζονται όλες οι εντολές JOIN, UNION. εν είναι σωστό να χρησιµοποιείται το ORDER BY. Η σύνταξη της όψης είναι η εξής: Όνοµα όψης CREATE VIEW όνοµα_όψης [(όνοµα_στήλης1_όψης, όνοµα_στήλης2_όψης,..).] Εντολή SELECT [Με επιλογή CHECK]; Το όνοµα της όψης πρέπει να είναι µοναδικό σε κάθε βάση και να µην υπάρχει µε το ίδιο όνοµα όψη, πίνακας ή stored procedure. Ονόµατα στηλών όψης Ο ορισµός ονοµάτων στηλών σε µια όψη είναι προαιρετικός και απαιτείται µόνο αν η όψη περιέχει ενώσεις πινάκων που έχουν ίδιο όνοµα σε κάποιες στήλες. Παράδειγµα Έστω ότι έχουµε την βάση για την καταχώρηση των φοιτητών, των µαθηµάτων και των βαθµών τους µε τους ακόλουθους πίνακες: Όνοµα πίνακα: Students FNAME LNAME ID START_DATE FNAME = Όνοµα φοιτητή LNAME = Επώνυµο φοιτητή ID = Αριθµός µητρώου START_DATE = Ηµεροµηνία εισαγωγής στην σχολή Όνοµα πίνακα: Lessons NAME CODE CREDITS ΝΑΜΕ = Όνοµα µαθήµατος CODE = Κωδικός µαθήµατος CREDITS = ιδακτικές µονάδες 2

Όψεις Όνοµα πίνακα: Grades ID CODE GRADE Για την εύρεση των ονοµάτων των µαθηµάτων από τον πίνακα Lessons που έχουν 3 διδακτικές µονάδες, δηµιουργούµε την ακόλουθη όψη: CREATE VIEW lessons_credits_3 SELECT * FROM LESSONS WHERE CREDITS=3; Για την εύρεση των αριθµών µητρώων των φοιτητών και των ονοµάτων των µαθηµάτων που έχουν περάσει αν θέλουµε να δηλώσουµε τις δύο στήλες που θέλουµε να βρούµε νε τις λέξεις mitroo, onoma, τότε θα δώσουµε την εντολή: CREATE VIEW lessons_credits_3 (mitroo, onoma) SELECT STUDENTS.ID, LESSONS.NAME FROM STUDENTS, LESSONS, GRADES WHERE STUDENTS.ID=GRADES.ID AND GRADES.CODE=LESSONS.CODE AND GRADE>=5; Επιλογή CHECK Αν ορίσουµε µια όψη έστω για τον πίνακα Students να καταχωρούνται µόνο οι φοιτητές που µπήκαν στο πανεπιστήµιο µετά το 2000, δηλαδή: CREATE VIEW after_2000 SELECT * FROM STUDENTS WHERE START_DATE>= 1.1.2000 WITH CHECK OPTION; Τότε αν προσπαθήσουµε να βάλουµε νέα δεδοµένα στην όψη (τα δεδοµένα θα καταχωρηθούν στους πίνακες που χρησιµοποιεί η όψη, συγκεκριµένα στο παράδειγµά µας στον πίνακα Students), επειδή έχουµε βάλει το CHECK, θα γίνει έλεγχος αν η νέα ηµεροµηνία ικανοποιεί την συνθήκη WHERE, αλλιώς δεν θα καταχωρηθεί. 3

Όψεις Όψεις µόνο για εµφάνιση δεδοµένων Μπορούµε να δηµιουργήσουµε όψεις, στις οποίες δεν µπορείτε να καταχωρήσετε δεδοµένα ή να ενηµερώσετε τα δεδοµένα των πινάκων που δηµιουργούν την όψη. Μια όψη, που δεν ενηµερώνει τα στοιχεία των πινάκων από τους οποίους δηµιουργείται πρέπει να έχει ένα από τα παρακάτω χαρακτηριστικά: Αν υπάρχει περιορισµός στην επιλογή δεδοµένων, όπως DISTINCT, FIRST, SKIP. Περιέχει γνωρίσµατα που δηλώνονται µέσα σε υποερωτήµατα στο SELECT. Περιέχει γνωρίσµατα που δηλώνονται µέσα σε συναρτήσεις ή δηλώνονται µε GROUP BY. Περιέχει SELECT µε UNION. Είναι η ένωση πολλών πινάκων εν περιέχει όλα τα γνωρίσµατα του πίνακα που είναι NOT NULL (δηλαδή όταν προσπαθήσουµε να κάνουµε εισαγωγή νέων δεδοµένων, τότε θα υπάρχει γνώρισµα NOT NULL και η τιµή που θα θέλουµε να βάλουµε θα είναι NULL και εποµένως θα δηµιουργηθεί λάθος). Περιέχει γνωρίσµατα από άλλη όψη που δεν δέχεται ενηµέρωση στοιχείων. Αλλαγή ορισµού όψης Για να αλλάξετε τα στοιχεία µιας όψης πρέπει να την διαγράψετε και να την δηµιουργήσετε ξανά. ιαγραφή όψης Η σύνταξη για την διαγραφή της όψης µε το όνοµα AFTER_2000 είναι η εξής: DROP VIEW AFTER_2000; 4

Triggers Triggers Μια trigger είναι µια ρουτίνα που αναφέρεται σε έναν πίνακα ή µια όψη και πραγµατοποιεί αυτόµατα µια διαδικασία, όταν µια γραµµή προστίθεται, ενηµερώνεται ή διαγράφεται. Μια trigger ποτέ δεν µπορούµε να την καλέσουµε κατευθείαν, αλλά όταν µια εφαρµογή ή ένας χρήστης προσπαθεί να εισάγει, ενηµερώσει ή διαγράψει µια γραµµή, τότε ενεργοποιείται η trigger εφόσον υπάρχει. Οι triggers µπορούν να χρησιµοποιηθούν για: Να πραγµατοποιεί διαδικασίες κατά την επεξεργασία στοιχείων. Για παράδειγµα µπορούµε να βάλουµε µια trigger ώστε όταν γίνεται διαγραφή από την βάση δεδοµένα, να αποθηκεύονται σε άλλον πίνακα για ιστορικούς λόγους. Να γίνεται έλεγχος στα δεδοµένα που θα εισαχθούν. Μετατροπή δεδοµένων, για παράδειγµα να µετατρέψουµε ένα κείµενο σε κείµενο µε κεφαλαία γράµµατα. Ειδοποίηση εφαρµογών για αλλαγές στην βάση χρησιµοποιώντας γεγονότα. Να πραγµατοποιηθούν ενηµερώσεις σε αναφορικούς περιορισµούς (foreign key). Οι triggers αποθηκεύονται σαν αντικείµενα στην βάση και είναι ενεργές µέχρι να τις απενεργοποιήσουµε ή σβήσουµε. Πλεονεκτήµατα από την χρησιµοποίηση Triggers: Αυτόµατη ενεργοποίηση περιορισµών για την εισαγωγή σωστών δεδοµένων. Μείωση κώδικα στις εφαρµογές για τον έλεγχο των δεδοµένων που θα εισαχθούν στην βάση. Αυτόµατη καταγραφή των αλλαγών που γίνονται σε έναν πίνακα, µέσω ενός log αρχείου. Αυτόµατη προειδοποίηση για τις αλλαγές στην βάση µέσο γεγονότων στις triggers. 5

Triggers Παρακάτω βλέπουµε έναν πίνακα που συνοψίζει τα είδη των triggers. Είδος trigger BEFORE INSERT AFTER INSERT BEFORE UPDATE AFTER UPDATE BEFORE DELETE AFTER DELETE BEFORE <γεγονός> OR <γεγονός> AFTER <γεγονός> OR <γεγονός> Περιγραφή Ξεκινάει πριν την δηµιουργία µιας γραµµής και οι τιµές µπορούν να αλλαχτούν. Ξεκινάει αφού δηµιουργηθεί µια νέα γραµµή και δεν µπορούµε να αλλάξουµε τις τιµές. Συνήθως χρησιµοποιείται για να αλλάξουµε άλλους πίνακες. Ξεκινάει πριν δηµιουργηθεί µια νέα έκδοση της γραµµής και µπορούµε να αλλάξουµε τις τιµές. Ξεκινάει αφού δηµιουργηθεί µια νέα έκδοση της γραµµής και δεν µπορούµε να αλλάξουµε τις τιµές της. Συνήθως χρησιµοποιείται για την αλλαγή άλλων πινάκων. Ξεκινάει πριν διαγραφή η γραµµή και δεν επιτρέπει αλλαγές σε καµιά στήλη στην γραµµή. Ξεκινάει αφού διαγραφτεί µια γραµµή και δεν επιτρέπει καµιά αλλαγή στις τιµές. Συνήθως χρησιµοποιείται για την αλλαγή άλλων πινάκων. Ξεκινάει πριν πραγµατοποιηθεί κάποια αλλαγή στα δεδοµένα. Το γεγονός πρέπει να είναι σε µορφή συνθήκης. εν µπορείτε να διαγράψετε καµία τιµή από τις στήλες στην γραµµή. Ξεκινάει αφού πραγµατοποιηθεί κάποια αλλαγή στα δεδοµένα. Το γεγονός πρέπει να είναι σε µορφή συνθήκης. εν µπορείτε να διαγράψετε καµία τιµή από τις στήλες στην γραµµή. Χρησιµοποιείται για αλλαγή άλλων πινάκων. Σειρά εκτελέσεων των triggers Έχει επικρατήσει για την ονοµασία των triggers, να βάζουµε το πρώτο γράµµα της λέξης BEFORE ή AFTER, µετά το πρώτο γράµµα της λέξης INSERT ή UPDATE ή DELETE ή συνδυασµό αυτών και µετά µια κάτω παύλα και το όνοµα που θέλουµε. ηλαδή αν θέλουµε να δηλώσουµε µια trigger για πριν την καταχώρηση δεδοµένων µε σε πίνακα µε όνοµα TEST, το όνοµα θα είναι TEST_BI (B=BEFORE, I=INSERT), αν θέλουµε πριν την καταχώρηση και την ενηµέρωση το όνοµα αλλάζει σε TEST_BIU. Αν θέλουµε να δηµιουργήσουµε trigger για πριν απ όλα ή µετά απ όλα, θα γράψουµε το όνοµα BA ή AA αντίστοιχα. Πρέπει όµως να δίνουµε και µια σειρά προτεραιότητας στις triggers, αν δηλαδή έχουµε δύο triggers για πριν την καταχώρηση για έναν πίνακα πρέπει να δηλώσουµε στην Firebird, ποια θα εκτελεσθεί πρώτη. Αυτό το πετυχαίνουµε µε την δήλωση position ξεκινώντας από το µηδέν. ηλαδή αν έχουµε δύο triggers για BEFORE INSERT και η µία έχει δηλωθεί µε position 0 και ή άλλη position 1, τότε όταν προσπαθούµε να καταχωρήσουµε µια νέα γραµµή, θα εκτελέσει πρώτα αυτή µε position 1 και µετά αυτή µε position 2. 6

Triggers ηµιουργία Triggers Η δηµιουργία trigger πραγµατοποιείται µε το CREATE TRIGGER που αποτελείται από αρχικές δηλώσεις για την trigger και το κύριο µέρος της διαδικασίας. Το µέρος µε τις αρχικές δηλώσεις περιέχει: Το όνοµα της trigger που είναι µοναδικό στην βάση. Ένα όνοµα πίνακα που δηλώνει τον πίνακα για τον οποίο είναι η trigger. Ιδιότητες που δηλώνουν την φάση (BEFORE, AFTER), το γεγονός (INSERT, UPDATE, DELETE) και την σειρά εκτέλεσης αν χρειάζεται. Το κύριο µέρος της trigger περιέχει: Αν χρειάζεται λίστα µε τις τοπικές µεταβλητές και τον τύπο δεδοµένων τους. Τις εντολές BEGIN και END όπου δηλώνουν την έναρξη του κώδικα το τέλος. Η γενική σύνταξη της trigger είναι η ακόλουθη: CREATE TRIGGER όνοµα_trigger FOR {όνοµα πίνακα ή όψης} {ACTIVE INACTIVE} {BEFORE AFTER} {DELETE OR {[INSERT [OR UPDATE]} {INSERT OR [..]} {UPDATE OR [..]}} [POSITION αριθµός] <κύριο µέρος διαδικασίας> ^ Ειδική σύνταξη της PSQL για triggers Για το κύριο µέρος της διαδικασίας στις triggers µπορείτε να χρησιµοποιήσετε τις µεταβλητές Boolean INSERTING, UPDATING και DELETING καθώς και τις µεταβλητές NEW και OLD. Generators Για να συνεχίσουµε θα αναφέρουµε την δήλωση Generator. Οι Generators είναι χρήσιµοι για τον υπολογισµό ενός αυτόµατου αυξανόµενου µοναδικού κλειδιού. ηµιουργία Generator CREATE GENERATOR όνοµα_generator; 7

Triggers Μπορούµε να ορίσουµε εµείς ο generator να ξεκινάει από µια τιµή έστω το 1. Άρα δηλώνουµε τον generator και έχουµε: CREATE GENERATOR count2; SET GENERATOR count2 TO 1; Συνάρτηση GEN_ID Με την συνάρτηση GEN_ID µπορούµε να βρούµε την τιµή του generator. ηλαδή αν δώσουµε την εντολή GEN_ID(όνοµα_generator, 1) στην κατάλληλη θέση στο κύριο µέρος της διαδικασία της trigger, θα πάρουµε την τιµή του generator αυξηµένη κατά 1. ηµιουργία trigger για την αυτόµατη αύξηση της τιµής µιας στήλης (autoincrement) ηµιουργούµε τον generator: CREATE GENERATOR COUNTER; ηµιουργούµε την trigger: CREATE TRIGGER BI_STUDENTS FOR STUDENTS ACTIVE BEFORE INSERT POSITION 0 BEGIN IF(NEW.NUM IS NULL) THEN NEW.NUM=GEN_ID(COUNTER,1); END^ COMMIT^ Μετασχηµατισµοί Αν θέλουµε σε µια στήλη να καταχωρείται συµβολοσειρά µε κεφαλαία γράµµατα µόνο, τότε δηµιουργούµε την ακόλουθη trigger: 8

Triggers CREATE TRIGGER STUDENTS1 FOR STUDENTS ACTIVE BEFORE INSERT OR UPDATE POSITION 0 BEGIN NEW.LNAME=UPPER(NEW.LNAME); END^ Default τιµές µε triggers Αν θέλουµε να έχουµε σε µια στήλη default τιµή, τότε δηµιουργούµε την trigger: CREATE TRIGGER GRADES_BIU FOR GRADES ACTIVE BEFORE INSERT OR UPDATE BEGIN IF(NEW.GRADE IS NULL) THEN NEW.GRADE=0; END^ 9