Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Σχεσιακεσ βασεισ δεδομενων

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Σχεσιακεσ βασεισ δεδομενων"— Μεταγράφημα παρουσίασης:

1 Σχεσιακεσ βασεισ δεδομενων
ΚΕΧΡΗΣ ΕΥΑΓΓΕΛΟΣ ΕΚΔΟΣΕΙΣ ΚΡΙΤΙΚΗ

2 Κεφάλαιο 7: Ειδικά θέματα στην SQL
Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

3 Στόχοι του 7ου κεφαλαίου
Στόχος του κεφαλαίου αυτού είναι να παρουσιάσει (α) μία προσέγγιση της SQL για τη διαχείριση δεδομένων που υιοθετούν δομή ιεραρχίας ή δικτυώματος και (β) τη λογική και τον τρόπο ανάπτυξης προγραμματιστικών ενοτήτων που είναι γνωστά ως υπορουτίνες και εναύσματα Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

4 SQL, ιεραρχικές δομές και δικτυώματα
Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

5 SQL, ιεραρχικές δομές και δικτυώματα
Σε αρκετές περιπτώσεις είναι απαραίτητο να αποθηκεύσουμε σε μία σχεσιακή βάση δεδομένων δεδομένα τα οποία εμφανίζουν δομή ιεραρχίας ή δικτυώματος. Τυπικά παραδείγματα δεδομένων που εμπεριέχουν τέτοιες δομές είναι τα δεδομένα που περιγράφουν: το οργανόγραμμα μίας επιχείρησης, τον πίνακα υλικών-εξαρτημάτων ενός προϊόντος, τα δρομολόγια λεωφορείων ή αεροπορικών εταιριών, το σύστημα καταλόγου ενός υπολογιστή, κ.α. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

6 Παράδειγμα δεδομένων που έχει ιεραρχική δομή
Ένα οργανόγραμμα είναι μια σχηματική απεικόνιση της οργανωτικής δομής μιας επιχείρησης. Κάθε θέση του οργανογράμματος έχει έναν κωδικό αριθμό και έναν τίτλο. Η χαρακτηριστική ιδιότητα του οργανογράμματος είναι ότι: για κάθε θέση εργασίας υπάρχει ένας μόνο προϊστάμενος ενώ, κάποιος είναι προϊστάμενος για πολλές θέσεις εργασίας Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

7 Παράδειγμα οργανογράμματος
1011 Προϊστάμ. Β. Ελλάδος 1012 Ν. Ελλάδος 1021 Αποθήκης 1022 Εργοστασίου 1031 Προμηθειών 1032 Λογιστηρίου 101 Διευθυντής Μάρκετινγκ 102 Παραγωγής 103 10 Πρόεδρος 10111 Τμηματάρχης Θεσσαλονίκης 10221 Υπεύθυνος 10222 Συναρμολόγησης 10321 Πελατών Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

8 Δ.Ο.Σ. και πίνακας για το οργανόγραμμα
Κωδικός Τίτλος ΘΕΣΕΙΣ Ξ.κ. ΘΕΣΗ Κωδικός Τίτλος ΚωδΑνώτερου Αλγόριθμος μετατροπής ΔΟΣ σε σχήμα σχεσιακής β.δ Μ 1 κατώτερη ανώτερη Συσχετί-ζεται με Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

9 Αναπαράσταση Οργανογράμματος σε πίνακα (1/4)
Στη συνέχεια δείχνεται ο τρόπος με τον οποίο τα δεδομένα του οργανογράμματος αποθηκεύονται σε πίνακα. Για ευκολία το οργανόγραμμα εμφανίζεται τμηματικά Κάθε φορά ο πίνακας περιέχει τα δεδομένα του κάτω επιπέδου του οργανογράμματος Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

10 Αναπαράσταση οργανογράμματος σε πίνακα (2/4)
101 Διευθυντής Μάρκετινγκ 102 Παραγωγής 103 10 Πρόεδρος ΘΕΣΕΙΣ Κωδικός Τίτλος ΚωδΑνώτερου 10 Πρόεδρος 101 Διευθυντής Μάρκετινγκ 102 Διευθυντής Παραγωγής 103 Διευθυντής Οικονομικών Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

11 Αναπαράσταση Οργανογράμματος σε πίνακα (3/4)
1011 Προϊστάμ. Β. Ελλάδος 1012 Ν. Ελλάδος 1021 Αποθήκης 1022 Εργοστασίου 1031 Προμηθειών 1032 Λογιστηρίου 101 Διευθυντής Μάρκετινγκ 102 Παραγωγής 103 ΘΕΣΕΙΣ Κωδικός Τίτλος ΚωδΑνώτερου 1011 Προϊστάμενος Β. Ελλάδας 101 1012 Προϊστάμενος Ν. Ελλάδας 1021 Προϊστάμενος Αποθήκης 102 1022 Προϊστάμενος Εργοστασίου 1031 Προϊστάμενος Προμηθειών 103 1032 Προϊστάμενος Λογιστηρίου

12 Αναπαράσταση Οργανογράμματος σε πίνακα (4/4)
1011 Προϊστάμ. Β. Ελλάδος 1012 Ν. Ελλάδος 1021 Αποθήκης 1022 Εργοστασίου 1031 Προμηθειών 1032 Λογιστηρίου 10111 Τμηματάρχης Θεσσαλονίκης 10221 Υπεύθυνος Παραγωγής 10222 Συναρμολόγησης 10321 Πελατών ΘΕΣΕΙΣ Κωδικός Τίτλος ΚωδΑνώτερου 10111 Τμηματάρχης Θεσσαλονίκης 1011 10221 Υπεύθυνος Παραγωγής 1022 10222 Υπεύθυνος Συναρμολόγησης 10321 Υπεύθυνος Πελατών 1032 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

13 Διάγραμμα και πίνακας για το οργανόγραμμα (συνολική απεικόνιση)
ΘΕΣΕΙΣ Κωδικός Τίτλος ΚωδΑνώτερου 10 Πρόεδρος 101 Διευθυντής Μάρκετινγκ 102 Διευθυντής Παραγωγής 103 Διευθυντής Οικονομικών 1011 Προϊστάμενος Β. Ελλάδας 1012 Προϊστάμενος Ν. Ελλάδας 1021 Προϊστάμενος Αποθήκης 1022 Προϊστάμενος Εργοστασίου 1031 Προϊστάμενος Προμηθειών 1032 Προϊστάμενος Λογιστηρίου 10111 Τμηματάρχης Θεσσαλονίκης 10221 Υπεύθυνος Παραγωγής 10222 Υπεύθυνος Συναρμολόγησης 10321 Υπεύθυνος Πελατών Κωδικός Τίτλος ΘΕΣΗ Μ 1 κατώτερη ανώτερη Συσχετί-ζεται με ΘΕΣΕΙΣ Ξ.κ. Κωδικός Τίτλος ΚωδΑνώτερου

14 Αναζήτηση δεδομένων στον πίνακα ΘΕΣΕΙΣ
Ας υποθέσουμε ότι θέλουμε να βρούμε τον κωδικό και τον τίτλο της θέσης που είναι ανώτερη από τη θέση με κωδικό 1022. Για να απαντήσουμε στο ερώτημα αυτό πρέπει να χρησιμοποιήσουμε τον πίνακα ΘΕΣΕΙΣ δύο φορές, όπως φαίνεται στη συνέχεια: Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

15 ΘΕΣΕΙΣ ΘΕΣΕΙΣ Κωδι- κός Τίτλος Κωδ Ανώτε- ρου 10 Πρόεδρος 101
Διευθυντής Μάρκετινγκ 102 Διευθυντής Παραγωγής 103 Διευθυντής Οικονομικών 1011 Προϊστ. Β. Ελλάδας 1012 Προϊστ. Ν. Ελλάδας 1021 Προϊστ. Αποθήκης 1022 Προϊστ. Εργοστασίου 1031 Προϊστ. Προμηθειών 1032 Προϊστ. Λογιστηρίου 10111 Τμημ. Θεσσαλονίκης 10221 Υπεύθ. Παραγωγής 10222 Υπεύθ. Συναρμολόγησης 10321 Υπεύθ. Πελατών Κωδι- κός Τίτλος Κωδ Ανώτε- ρου 10 Πρόεδρος 101 Διευθυντής Μάρκετινγκ 102 Διευθυντής Παραγωγής 103 Διευθυντής Οικονομικών 1011 Προϊστ. Β. Ελλάδας 1012 Προϊστ. Ν. Ελλάδας 1021 Προϊστ. Αποθήκης 1022 Προϊστ. Εργοστασίου 1031 Προϊστ. Προμηθειών 1032 Προϊστ. Λογιστηρίου 10111 Τμημ. Θεσσαλονίκης 10221 Υπεύθ. Παραγωγής 10222 Υπεύθ. Συναρμολόγησης 10321 Υπεύθ. Πελατών Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

16 Παρατήρηση Παρατηρούμε ότι για να απαντήσουμε στο ερώτημα αυτό πρέπει να χρησιμοποιήσουμε τον πίνακα ΘΕΣΕΙΣ δύο φορές: Μία φορά για να εντοπίσουμε τον κωδικό της θέσης 1022 και Μία φορά για να εντοπίσουμε τον κωδικός και τον τίτλο της θέσης που είναι ανώτερη από τη θέση 1022. Για ευκολία, δίνουμε για κάθε μία χρήση του πίνακα ΘΕΣΕΙΣ μία ξεχωριστή ονομασία: όταν χρησιμοποιούμε τον πίνακα ΘΕΣΕΙΣ για να πάρουμε τον κωδικό της θέσης 1022 αναφερόμαστε σε αυτόν με το όνομα Θ (από το αρχικό της λέξης ΘΕΣΕΙΣ) ενώ τη δεύτερη φορά που χρησιμοποιούμε τον πίνακα ΘΕΣΕΙΣ για να πάρουμε τον κωδικό και τον τίτλο της θέσης που είναι ανώτερη από αυτήν που μας δόθηκε αναφερόμαστε σε αυτόν με το όνομα ΑΘ (από τα αρχικά των λέξεων Ανώτερη Θέση). Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

17 Η εντολή SQL για την αναζήτηση
Υπενθύμιση του ερωτήματος: θέλουμε να βρούμε τον κωδικός και τον τίτλο της θέσης που είναι ανώτερη από τη θέση με κωδικό 1022. Η εντολή SQL για το ερώτημα αυτό είναι: SELECT ΑΘ.κωδικός, ΑΘ.Τίτλος FROM Θεσεις AS Θ, Θεσεις ΑΘ WHERE Θ.ΚωδΑνώτερου = ΑΘ.Κωδικός AND Θ.Κωδικός = 1022 ΑΘ (ΘΕΣΕΙΣ με το ρόλο της Ανώτερης Θέσης) Κωδικός Τίτλος ΚωδΑνώτερου Θ (ΘΕΣΕΙΣ) Κωδικός Τίτλος ΚωδΑνώτερου Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

18 Αντίγραφα πίνακα Οι δύο πίνακες Θ και ΑΘ που χρησιμοποιήσαμε προηγουμένως συνήθως αναφέρονται ως αντίγραφα του πίνακα ΘΕΣΕΙΣ. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

19 Γενικεύοντας το ερώτημα
Ακολουθώντας την ίδια λογική μπορούμε να βρούμε για κάθε θέση, τον τίτλο της θέσης καθώς και τον κωδικό και τον τίτλο της θέσης που είναι άμεσα ανώτερη από αυτήν: SELECT Θ.Κωδικός, Θ.Τίτλος, ΑΘ.Κωδικός, ΑΘ.Τίτλος FROM Θεσεις AS Θ, Θεσεις ΑΘ WHERE Θ.ΚωδΑνώτερου = ΑΘ.Κωδικός Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

20 Κωδικός Τίτλος Στο προηγούμενο παράδειγμα η ιεραρχία που υπάρχει ανάμεσα στους εργαζόμενους ενός οργανογράμματος: καθορίζεται εμφανώς με την αναδρομική συσχέτιση "συσχετίζεται με" του Διαγράμματος Οντοτήτων Συσχετίσεων και υλοποιείται με τη στήλη ΚωδΑνώτερου του πίνακα ΘΕΣΕΙΣ που είναι ένα ξένο κλειδί το οποίο αναφέρεται στο πρωτεύον κλειδί του ίδιου πίνακα. ΘΕΣΗ Μ 1 κατώτερη ανώτερη Συσχετί-ζεται με ΘΕΣΕΙΣ Ξ.κ. Κωδικός Τίτλος ΚωδΑνώτερου Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

21 Έμμεση δήλωση της ιεραρχίας
Ορισμένες φορές, ωστόσο, η ιεραρχική δομή δεν καθορίζεται εμφανώς από κάποια αναδρομική σχέση αλλά υποδηλώνεται έμμεσα από τη σημασία που έχουν οι στήλες ενός πίνακα, όπως δείχνεται στο επόμενο παράδειγμα. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

22 Παράδειγμα Μια μικρή αεροπορική εταιρία προσφέρει καθημερινές πτήσεις ανάμεσα σε κάποιες ευρωπαϊκές πρωτεύουσες όπως φαίνεται παρακάτω: Φρανκφούρτη FRA Αθήνα ATH Βουκουρέστι ΒΒU Βερολίνο BER Σοφία SOF Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

23 Αναπαράσταση των πτήσεων ως ΔΟΣ
ΠΤΗΣΗ Κωδικός Ώρα Αναχώρησης Αναχωρεί από 1 Μ Ώρα Άφιξης ΑΕΡΟΔΡΟΜΙΟ Πόλη Φθάνει σε Φρανκφούρτη FRA Αθήνα ATH Βουκουρέστι ΒΒU Βερολίνο BER Σοφία SOF

24 Το ΔΟΣ και το σχήμα της σχεσιακής βάσης δεδομένων
ΠΤΗΣΗ Κωδικός Ώρα Αναχώρησης Αναχωρεί από 1 Μ Ώρα Άφιξης ΑΕΡΟΔΡΟΜΙΟ Πόλη Φθάνει σε ΑΕΡΟΔΡΟΜΙΟ Κωδικός Πόλη ΠΤΗΣΗ Ξ.κ. Ξ.κ. Κωδικός ΏραΑναχώρ. ΏραΆφιξης ΚωδΑεροδρομ.Αναχώρησης ΚωδΑεροδρομ.Άφιξης Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

25 Το στιγμιότυπο της βάσης δεδομένων
ΠΤΗΣΗ Κωδι- κός Ώρα Αναχώρησης Άφιξης Κωδ Αεροδρ 100 10:00 12:10 ΑΤΗ BER 101 14:00 16:00 ATH FRA 102 13:00 14:30 BBU 103 17:00 18:20 SOF 104 20:00 21:30 105 22:00 23:45 106 15:00 15:45 107 18:00 19:10 ΑΕΡΟΔΡΟΜΙΟ Κωδικός Πόλη ΑΤΗ Αθήνα BER Βερολίνο BBU Βουκουρέστι FRA Φρανκφούρτη SOF Σόφια Φρανκφούρτη FRA Αθήνα ATH Βουκουρέστι ΒΒU Βερολίνο BER Σοφία SOF Το στιγμιότυπο της βάσης δεδομένων Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

26 Παράδειγμα αναζήτησης προορισμών από το αεροδρόμιο ΑΤΗ
Ας υποθέσουμε ότι θέλουμε να βρούμε τους κωδικούς των αεροδρομίων στις οποίες φθάνουν πτήσεις που αναχωρούν από ο αεροδρόμιο με κωδικό ATH. Για το ερώτημα αυτό μπορούμε να χρησιμοποιήσουμε την εντολή SQL: SELECT ΚωδΑεροδρΑναχώρησης, ΚωδΑεροδρΆφιξης FROM ΠΤΗΣΕΙΣ WHERE ΚωδΑεροδρΑναχώρησης = 'ATH' Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

27 Το αποτέλεσμα της SQL εντολής
Κωδ Αεροδρ Αναχώρησης Άφιξης ATH BER FRA BBU SOF SELECT ΚωδΑεροδρΑναχώρησης, ΚωδΑεροδρΆφιξης FROM ΠΤΗΣΕΙΣ WHERE ΚωδΑεροδρΑναχώρησης = 'ATH' ΠΤΗΣΕΙΣ Κωδι- κός Ώρα Αναχώρησης Άφιξης Κωδ Αεροδρ 100 10:00 12:10 ΑΤΗ BER 101 14:00 16:00 ATH FRA 102 13:00 14:30 BBU 103 17:00 18:20 SOF 104 20:00 21:30 105 22:00 23:45 106 15:00 15:45 107 18:00 19:10 Φρανκφούρτη FRA Αθήνα ATH Βουκουρέστι ΒΒU Βερολίνο BER Σοφία SOF

28 Αναζήτηση προορισμών από Αθήνα με έναν ενδιάμεσο σταθμό
Θέλουμε να βρούμε τα αεροδρόμια στα οποία φθάνουν οι πτήσεις που ξεκινούν από το αεροδρόμιο ΑΤΗ κάνοντας μία ενδιάμεση πτήση αφού αναχωρήσουν από το αεροδρόμιο ΑΤΗ. Με βάση το δίκτυο των πτήσεων: ένας ενδιάμεσος σταθμός από Αθήνα είναι το Βερολίνο με καταληκτικούς προορισμούς τη Σόφια και το Βουκουρέστι: Φρανκφούρτη FRA Αθήνα ATH Βουκουρέστι ΒΒU Βερολίνο BER Σοφία SOF Φρανκφούρτη FRA Αθήνα ATH Βουκουρέστι ΒΒU Βερολίνο BER Σοφία SOF Η διαδρομή: ATH - BER - SOF Η διαδρομή ATH - BER - BBU Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

29 Ενώ ένας άλλος ενδιάμεσος σταθμός είναι η Φρανκφούρτη με καταληκτικούς προορισμούς το Βουκουρέστι και το Βερολίνο: Φρανκφούρτη FRA Αθήνα ATH Βουκουρέστι ΒΒU Βερολίνο BER Σοφία SOF Φρανκφούρτη FRA Αθήνα ATH Βουκουρέστι ΒΒU Βερολίνο BER Σοφία SOF Η διαδρομή: ATH - FRA- BBU Η διαδρομή ATH - FRA- BER Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

30 Εύρεση των διαδρομών με χρήση πινάκων (χωρίς χρήση SQL)
Η προσέγγιση που θα υιοθετήσουμε για να βρούμε τις διαδρομές αυτές με χρήση των πινάκων ΑΕΡΟΔΡΟΜΙΑ και ΠΤΗΣΕΙΣ χρησιμοποιεί τον πίνακα ΠΤΗΣΕΙΣ δύο φορές: Την πρώτη φορά που χρησιμοποιείται ο πίνακας ΠΤΗΣΕΙΣ θα αναφέρεται ως Π1 ενώ τη δεύτερη φορά θα αναφέρεται ως Π2. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

31 Χρήση των πινάκων Π1 και Π2
Ο πίνακας Π1 θα χρησιμοποιηθεί για να βρούμε μία πτήση από το αεροδρόμιο ΑΤΗ προς ένα ενδιάμεσο αεροδρόμιο (αυτή θα είναι η πρώτη από τις δύο πτήσεις) ενώ ο πίνακας Π2 θα μας βοηθήσει να βρούμε τη δεύτερη πτήση, δηλαδή μία πτήση από το ενδιάμεσο αεροδρόμιο που εντοπίσαμε προηγουμένως προς έναν τελικό προορισμό. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

32 Εντοπισμός ενδιάμεσων σταθμών με χρήση των πινάκων Π1, Π2
ΠΤΗΣΕΙΣ Π1 ΠΤΗΣΕΙΣ Π2 Κω- δι- κός Ώρα Αναχώ- ρησης Άφι- ξης Κωδ Αεροδρ Άφιξης 100 10:00 12:10 ΑΤΗ BER 101 14:00 16:00 ATH FRA 102 13:00 14:30 BBU 103 17:00 18:20 SOF 104 20:00 21:30 105 22:00 23:45 106 15:00 15:45 107 18:00 19:10 Κω- δι- κός Ώρα Αναχώ- ρησης Άφι- ξης Κωδ Αεροδρ Άφιξης 100 10:00 12:10 ΑΤΗ BER 101 14:00 16:00 ATH FRA 102 13:00 14:30 BBU 103 17:00 18:20 SOF 104 20:00 21:30 105 22:00 23:45 106 15:00 15:45 107 18:00 19:10 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

33 Η εντολή SQL για την εύρεση των πτήσεων από ΑΤΗ με ενδιάμεσο σταθμό
SELECT Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ as ΑΕΡΟΔΡΟΜΙΟ ΑΝΑΧΩΡΗΣΗΣ,  Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ AS ΕΝΔΙΑΜΕΣΟ_ΑΕΡΟΔΡΟΜΙΟ, Π2.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ AS ΑΕΡΟΔΡΟΜΙΟ_ΠΡΟΟΡΙΣΜΟΥ  FROM ΠΤΗΣΗ Π1, ΠΤΗΣΗ Π2  WHERE Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ = Π2.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ  AND Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ = 'ATH' Ακολουθεί η επεξήγηση της εντολής Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

34 Η γραμμή FROM - γραμμή  SELECT Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ as ΑΕΡΟΔΡΟΜΙΟ ΑΝΑΧΩΡΗΣΗΣ,  Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ AS ΕΝΔΙΑΜΕΣΟ_ΑΕΡΟΔΡΟΜΙΟ, Π2.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ AS ΑΕΡΟΔΡΟΜΙΟ_ΠΡΟΟΡΙΣΜΟΥ  FROM ΠΤΗΣΗ Π1, ΠΤΗΣΗ Π2  WHERE Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ = Π2.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ  AND Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ = 'ATH'   Η γραμμή FROM της εντολής δηλώνει ότι θα χρησιμοποιηθούν δύο αντίγραφα του πίνακα ΠΤΗΣΕΙΣ. Το ένα αντίγραφο του πίνακα θα αναφέρεται ως Π1 και το άλλο αντίγραφο θα αναφέρεται ως Π2 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

35 Η γραμμή WHERE – γραμμή 
SELECT Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ as ΑΕΡΟΔΡΟΜΙΟ ΑΝΑΧΩΡΗΣΗΣ,  Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ AS ΕΝΔΙΑΜΕΣΟ_ΑΕΡΟΔΡΟΜΙΟ, Π2.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ AS ΑΕΡΟΔΡΟΜΙΟ_ΠΡΟΟΡΙΣΜΟΥ  FROM ΠΤΗΣΗ Π1, ΠΤΗΣΗ Π2  WHERE Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ = Π2.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ  AND Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ = 'ATH'  ‚ Η ενότητα  της εντολής καθορίζει ότι τα δύο αντίγραφα Π1 και Π2 θα συνδέονται ως εξής: Ο κωδικός του αεροδρομίου άφιξης του Π1 θα πρέπει ο ίδιος με τον κωδικό του αεροδρομίου αναχώρησης του Π2. Με τον τρόπο αυτό διασφαλίζεται ότι η δεύτερη πτήση θα ξεκινάει από εκεί που καταλήγει η πρώτη πτήση. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

36 Η γραμμή WHERE – γραμμή 
SELECT Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ as ΑΕΡΟΔΡΟΜΙΟ ΑΝΑΧΩΡΗΣΗΣ,  Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ AS ΕΝΔΙΑΜΕΣΟ_ΑΕΡΟΔΡΟΜΙΟ, Π2.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ AS ΑΕΡΟΔΡΟΜΙΟ_ΠΡΟΟΡΙΣΜΟΥ  FROM ΠΤΗΣΗ Π1, ΠΤΗΣΗ Π2  WHERE Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ = Π2.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ  AND Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ = 'ATH'  ‚ Το σημείο  της εντολής περιορίζει την αναζήτηση μόνο στα αεροδρόμια των οποίων ο κωδικός του αεροδρομίου αναχώρησης του Π1 να είναι ΑΤΗ Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

37 Η γραμμή SELECT – γραμμή 
SELECT Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ as ΑΕΡΟΔΡΟΜΙΟ ΑΝΑΧΩΡΗΣΗΣ,  Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ AS ΕΝΔΙΑΜΕΣΟ_ΑΕΡΟΔΡΟΜΙΟ, Π2.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ AS ΑΕΡΟΔΡΟΜΙΟ_ΠΡΟΟΡΙΣΜΟΥ  FROM ΠΤΗΣΗ Π1, ΠΤΗΣΗ Π2  WHERE Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ = Π2.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ  AND Π1.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΝΑΧΩΡΗΣΗΣ = 'ATH' Η ενότητα SELECT  της εντολής καθορίζει τα δεδομένα που θα εμφανισθούν και τον τίτλο τους. Συγκεκριμένα εμφανίζονται ο κωδικός του αεροδρομίου αναχώρησης του Π1, ο κωδικός του αεροδρομίου άφιξης του Π1 και ο κωδικός του αεροδρομίου άφιξης του Π2. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

38 Το αποτέλεσμα της εντολής
SELECT Π1.ΚΩΔ_ΑΕΡΟΔΡ_ΑΝΑΧΩΡΗΣΗΣ AS ΑΕΡΟΔΡΟΜΙΟ ΑΝΑΧΩΡΗΣΗΣ, Π1.ΚΩΔ_ΑΕΡΟΔΡ_ΑΦΙΞΗΣ AS ΕΝΔΙΑΜΕΣΟ_ΑΕΡΟΔΡΟΜΙΟ, Π2.ΚΩΔ_ΑΕΡΟΔΡΟΜΙΟΥ_ΑΦΙΞΗΣ AS ΑΕΡΟΔΡΟΜΙΟ_ΠΡΟΟΡΙΣΜΟΥ FROM ΠΤΗΣΕΙΣ Π1, ΠΤΗΣΕΙΣ Π2 WHERE Π1.ΚΩΔ_ΑΕΡΟΔΡ_ΑΦΙΞΗΣ = Π2.ΚΩΔ_ΑΕΡΟΔΡ_ΑΝΑΧΩΡΗΣΗΣ AND Π1.ΚΩΔ_ΑΕΡΟΔΡ_ΑΝΑΧΩΡΗΣΗΣ = 'ATH' ΠΤΗΣΕΙΣ Το αποτέλεσμα της εντολής Κω- δι- κός Ώρα Αναχώ- ρησης Άφι- ξης Κωδ Αεροδρ Άφιξης 100 10:00 12:10 ΑΤΗ BER 101 14:00 16:00 ATH FRA 102 13:00 14:30 BBU 103 17:00 18:20 SOF 104 20:00 21:30 105 22:00 23:45 106 15:00 15:45 107 18:00 19:10 ΑΕΡΟΡΔΡΟΜΙΟ ΑΝΑΧΩΡΗΣΗΣ ΕΝΔΙΑΜΕΣΟ ΑΕΡΟΔΡΟΜΙΟ ΠΡΟΟΡΙΣΜΟΥ ATH BER SOF BBU FRA Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

39 Διαδικασίες Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

40 Διαδικασίες Μία διαδικασία (procedure) είναι ένα σύνολο εντολών SQL οι οποίες εκτελούνται σαν μία ενότητα. Κάθε διαδικασία: έχει ένα όνομα που το ορίζει ο χρήστης εκτελείται όταν το ζητήσει ο χρήστης με την εντολή CALL ακολουθούμενη από το όνομα της διαδικασία. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

41 Σημείωση Οι έννοιες και οι θεωρητικές προσεγγίσεις που παρουσιάζονται σε αυτήν και την επόμενη ενότητα είναι κοινές για όλα τα ΣΔΒΔ. Ωστόσο, το συντακτικό που χρησιμοποιείται εδώ για κατά παρουσίαση των εννοιών είναι αυτό που υιοθετεί η MySQL. Συνιστάται, οι χρήστες άλλων ΣΔΒΔ να ανατρέξουν στην τεκμηρίωση που προσφέρει το σύστημα που χρησιμοποιούν σχετικά το συντακτικό που υιοθετείται από αυτό. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

42 Παράδειγμα εκτέλεσης διαδικασίας
Ο πίνακας ΤΙΜΟΛΟΓΙΑ έχει δημιουργηθεί με την εντολή: CREATE TABLE τιμολόγια ( κωδικός CHAR(5), κωδικός_πελάτη INT(11), σύνολο DOUBLE, έκπτωση DOUBLE, τελικό_ποσό DOUBLE, ημερομηνία_έκδοσης DATE, PRIMARY KEY (κωδικός)) ΤΙΜΟΛΟΓΙΑ Κωδικός Κωδικός_πελάτη Σύνολο Έκπτωση Τελικό_ποσό Ημερομηνία_έκδοσης Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

43 Υπολογισμός Μέσου Όρου με εντολή SQL
SELECT AVG(τελικό_ποσό) FROM ΤΙΜΟΛΟΓΙΑ ΤΙΜΟΛΟΓΙΑ Κωδικός Κωδικός_πελάτη Σύνολο Έκπτωση Τελικό_ποσό Ημερομηνία_έκδοσης Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

44 Κλήση διαδικασίας με την εντολή CALL
Ας υποθέσουμε τώρα ότι έχουμε ήδη δημιουργήσει μία διαδικασία η οποία ονομάζεται MO_TELIKOY_POSOY και η οποία εμφανίζει τον μέσο όρο (ΜΟ) του πεδίου τελικό_ποσό. Εφόσον έχουμε διαθέσιμη την διαδικασία MO_TELIKOY_POSOY μπορούμε να την καλέσουμε με την εντολή CALL για να κάνει τον υπολογισμό του μέσου όρου, ως εξής: CALL MO_TELIKOY_POSOY ( ); Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

45 Κλήση διαδικασίας με την εντολή CALL
Στην πιο απλή μορφή της το συντακτικό της εντολής CALL με τη μορφή BNF είναι: CALL όνομα_ρουτίνας ( ) Όπως λοιπόν φαίνεται από την BNF μορφή, στην πιο απλή περίπτωση η κλήση μίας διαδικασίας γίνεται με την εντολή CALL και ακολουθεί: το όνομα της διαδικασίας Η αριστερή ( και τη δεξιά ) παρένθεση. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

46 Δημιουργία διαδικασίας
Η δημιουργία μίας διαδικασίας γίνεται με την εντολή CREATE PROCEDURE και ακολουθεί: το όνομα της διαδικασίας Η αριστερή ( και την δεξιά ) παρένθεση. Η λειτουργία της διαδικασίας: αρχίζει με την δεσμευμένη λέξη BEGIN και τελειώνει με την δεσμευμένη λέξη END. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

47 Παράδειγμα δημιουργίας διαδικασίας
Η διαδικασία MO_TELIKOY_POSOY δημιουργείται με το παρακάτω σύνολο εντολών: CREATE PROCEDURE MO_TELIKOY_POSOY ( )  BEGIN  SELECT AVG (τελικό_ποσό)  FROM ΤΙΜΟΛΟΓΙΑ END  Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

48 Επεξήγηση δημιουργίας διαδικασίας
CREATE PROCEDURE MO_TELIKOY_POSOY ( )  BEGIN  SELECT AVG (τελικό_ποσό)  FROM ΤΙΜΟΛΟΓΙΑ END  στο σημείο  ζητάμε να δημιουργηθεί μία διαδικασία με την ονομασία MO_TELIKOY_POSOY Η δεσμευμένη λέξη BEGIN  δείχνει το σημείο από το οποίο ξεκινάει να περιγράφεται η λειτουργία της διαδικασίας (η περιγραφή της λειτουργίας συνεχίζεται μέχρι το σημείο END ) και είναι η εξής: Να εμφανιστεί ο μέσος όρος του πεδίου 'τελικό_ποσό' από τον πίνακα ΤΙΜΟΛΟΓΙΑ . Η δεσμευμένη λέξη END  δείχνει ότι η λειτουργία της διαδικασίας ολοκληρώνεται στο σημείο αυτό Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

49 Παρατηρήσεις Πάντα μετά το όνομα της διαδικασίας πρέπει να υπάρχει η αριστερή παρένθεση. Στο συγκεκριμένο παράδειγμα αμέσως μετά την αριστερή παρένθεση ( ακολουθεί η δεξιά παρένθεση ). Πάντα μετά τη δεξιά παρένθεση ) υπάρχει η δεσμευμένη λέξη BEGIN η οποία σηματοδοτεί το σημείο στο οποίο αρχίζει η λειτουργία της διαδικασίας. Μετά τη δεσμευμένη λέξη BEGIN ακολουθεί μία ή περισσότερες εντολές SQL. Κάθε εντολή SQL τελειώνει με το ερωτηματικό (;) Η διαδικασία τελειώνει με τη δεσμευμένη λέξη END. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

50 Δεδομένα από τον χρήστη στην διαδικασία
Ο χρήστης έχει τη δυνατότητα όταν καλεί μία διαδικασία για εκτέλεση να γνωστοποιεί σε αυτήν ορισμένα δεδομένα που είναι απαραίτητα για τη λειτουργία της. Τα δεδομένα που γνωστοποιεί ο χρήστης στην διαδικασία δίνονται μέσα σε δύο παρενθέσεις. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

51 Παράδειγμα κλήσης διαδικασίας με δεδομένα που γνωστοποιεί ο χρήστης
Ας υποθέσουμε ότι χρειαζόμαστε μία διαδικασία με το όνομα MO_TELIKOY_POSOY_PELATH η οποία να εμφανίζει κάθε φορά που καλείται τον μέσο όρο του τελικού ποσού ενός πελάτη. Ο πελάτης για τον οποίο θα πρέπει κάθε φορά να υπολογίζεται ο μέσος όρος του τελικού ποσού, δεν θα είναι πάντα ο ίδιος, αλλά θα γνωστοποιείται στην διαδικασία από τον χρήστη. Αν, για παράδειγμα, θέλουμε τον μέσο όρο του τελικού ποσού για τον πελάτη με κωδικό 3 θα καλούμε την διαδικασία ως εξής: CALL MO_TELIKOY_POSOY_PELATH (3); Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

52 Δεδομένα εισόδου Τα δεδομένα που γνωστοποιεί ο χρήστης στην διαδικασία λέγονται δεδομένα εισόδου Τα δεδομένα εισόδου δηλώνονται κατά την δημιουργία της διαδικασίας μέσα σε δύο παρενθέσεις χρησιμοποιώντας τη δεσμευμένη λέξη ΙΝ (από τα αρχικά της λέξης input). Για κάθε δεδομένο εισόδου δηλώνεται το όνομά του και ο τύπος δεδομένων του. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

53 Παράδειγμα δήλωσης δεδομένων εισόδου
Η δημιουργία της διαδικασίας ΜΟ_ΤΕLIKOY_POSOY_PELATH είναι η παρακάτω: CREATE PROCEDURE MO_TELIKOY_POSOY_PELATH (IN CUSTOMER_ID INTEGER)  BEGIN SELECT AVG (τελικό_ποσό) FROM ΤΙΜΟΛΟΓΙΑ WHERE κωδικός_πελάτη = CUSTOMER_ID  END Η διαδικασία δέχεται από τον χρήστη ένα δεδομένο εισόδου: το CUSTOMER_ID που είναι ο κωδικός πελάτη προηγείται η δεσμευμένη λέξη ΙΝ  για να δηλώσουμε το γεγονός ότι το πεδίο που ακολουθεί είναι δεδομένο εισόδου, ακολουθεί ο τύπος δεδομένων του δεδομένου εισόδου (ΙΝΤEGER - ακέραιος). Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

54 Αριθμός δεδομένων εισόδου & εξόδου
Στα προηγούμενα παραδείγματα οι διαδικασίες που παρουσιάστηκαν περιείχαν μόνο την εντολή SELECT και είχαν ένα μόνο δεδομένο εισόδου. Ωστόσο, μία διαδικασία μπορεί να καλεί οποιαδήποτε εντολή SQL και να έχει πολλά δεδομένα εισόδου, όπως δείχνει το επόμενο παράδειγμα. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

55 Παράδειγμα κλήση διαδικασίας με δύο δεδομένα εισόδου
Ας υποθέσουμε ότι θέλουμε να εισάγουμε στον πίνακα ΤΙΜΟΛΟΓΙΑ την παρακάτω γραμμή: Για να εισάγουμε τη γραμμή αυτή στον πίνακα ΤΙΜΟΛΟΓΙΑ μπορούμε να χρησιμοποιήσουμε με την εντολή: INSERT INTO τιμολόγια VALUES ('Α1', 1, 0.0, 0.0, 0.0, '2014/8/20'); ΤΙΜΟΛΟΓΙΑ Κωδικός Κωδικός_πελάτη Σύνολο Έκπτωση Τελικό_ποσό Ημερομηνία_έκδοσης Α1 1 0.0 2014/8/20 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

56 Περιγραφή διαδικασίας με 2 δεδομένα εισόδου
Μπορούμε σε ένα βαθμό να αυτοματοποιήσουμε την εισαγωγή μίας νέας γραμμής στον πίνακα ΤΙΜΟΛΟΓΙΑ με τη δημιουργία μίας διαδικασίας με την ονομασία NEO_TIMOLOGIO η οποία: θα παίρνει από τον χρήστη τις τιμές για τα πεδία 'κωδικό_πελάτη' και 'κωδικός' θα παίρνει από το σύστημα διαχείρισης βάσεων δεδομένων την τρέχουσα ημερομηνία με την συνάρτηση CURRENT_DATE() Θα θέτει στα υπόλοιπα πεδία την τιμή 0 και θα εισάγει στον πίνακα ΤΙΜΟΛΟΓΙΑ μία νέα γραμμή με την εντολή INSERT. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

57 Κλήση διαδικασίας με δύο δεδομένα ειδόσου
Ας υποθέσουμε ότι έχουμε διαθέσιμη την διαδικασία NEO_TIMOLOGIO και θέλουμε να εισάγουμε μία νέα γραμμή στον πίνακα ΤΙΜΟΛΟΓΙΑ της οποίας: ο κωδικός θα έχει την τιμή Α1, ο πελάτη_πελάτη θα έχει την τιμή 1 και η ημερομηνία_έκδοσης θα έχει τιμή τη σημερινή ημερομηνία (τα υπόλοιπα πεδία όπως εξηγήθηκε παραπάνω θα είναι 0). Εφόσον έχουμε διαθέσιμη την διαδικασία ΝΕΟ_TIMOLOGIO, αντί να πληκτρολογήσουμε την Εντολή 7.4 θα καλέσουμε την διαδικασία ως εξής: CALL NEO_TIMOLOGIO (1, 'A1') Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

58 Σειρά των δεδομένων εισόδου
Όταν σε μία διαδικασία ο χρήστης γνωστοποιεί περισσότερα από ένα δεδομένα εισόδου, η σειρά με την οποία τα δεδομένα αυτά γνωστοποιούνται είναι σημαντική. Στο συγκεκριμένο παράδειγμα πρέπει πρώτα να δοθεί ο κωδικός_πελάτη και μετά ο κωδικός με ένα κόμμα (,) ενδιάμεσα. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

59 Παράδειγμα δημιουργίας διαδικασίας με δύο δεδομένα εισόδου
Η διαδικασία NEO_TIMOLOGIO δημιουργείται με την παρακάτω εντολή: CREATE PROCEDURE NEO_TIMOLOGIO (IN CUSTOMER_ID INTEGER, IN INVOICE_ID CHAR(5) )  BEGIN INSERT INTO τιμολόγια VALUES ( INVOICE_ID, CUSTOMER_ID, 0.0, 0.0, 0.0,  CURRENT_DATE() );  END  : Δηλώνονται τα δεδομένα εισόδου CUSTOMER_ID (κωδικός πελάτη) ως ακέραιος , INVOICE_ID (κωδικός του τιμολογίου) ως 5 χαρακτήρες  : η κυρίως εργασία της διαδικασίας είναι να εισάγει τα δεδομένα εισόδου, την τρέχουσα ημερομηνία και την τιμή 0.0 στα κατάλληλα πεδία Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

60 Αντιστοιχία δεδομένων εισόδου κατά τη δημιουργία και την κλήση διαδικασίας
Η σειρά με την οποία γνωστοποιεί ο χρήστης τα δεδομένα εισόδου κατά την κλήση της διαδικασίας πρέπει να είναι ίδια με της σειρά που έχουν δηλωθεί τα δεδομένα αυτά κατά τη δημιουργία της διαδικασίας. Παράδειγμα: Δημιουργία διαδικασίας CREATE PROCEDURE NEO_TIMOLOGIO (IN CUSTOMER_ID INTEGER, IN INVOICE_ID CHAR(5) ) Κλήση διαδικασίας CALL NEO_TIMOLOGIO (1, 'A1') Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

61 Τοπικές μεταβλητές Οι διαδικασίες έχουν τη δυνατότητα να αποθηκεύουν σε προσωρινά πεδία τις τιμές κάποιων ενδιάμεσων υπολογισμών που εκτελούν. Τα πεδία αυτά: ονομάζονται τοπικές μεταβλητές: δηλώνονται μέσα στο σώμα της διαδικασίας με την δεσμευμένη λέξη DECLARE η οποία ακολουθείται από το όνομα που δίνουμε στο πεδίο και τον τύπο δεδομένων του. παίρνουν μία συγκεκριμένη τιμή με την εντολή SELECT ... INTO Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

62 Παράδειγμα χρήσης τοπικής μεταβλητής
Θέλουμε να αναπτύξουμε μία διαδικασία η οποία βρίσκει τα τιμολόγια στα οποία η έκπτωση είναι μεγαλύτερη από το μέσο όρο (ΜΟ) της έκπτωσης όλων των τιμολογίων. CREATE PROCEDURE EKPTOSH_ANO_TOY_MO ( ) BEGIN DECLARE MO_EKPTOSHS DOUBLE;  SELECT AVG (έκπτωση) INTO MO_EKPTOSHS FROM ΤΙΜΟΛΟΓΙΑ;  SELECT κωδικός FROM ΤΙΜΟΛΟΓΙΑ WHERE έκπτωση > MO_EKPTOSHS ;  END : Δηλώνουμε την πρόθεσή μας να χρησιμοποιήσουμε ένα πεδίο το οποίο ονομάζουμε MO_EPTOSHS και είναι τύπου DOUBLE : Υπολογίζουμε τον μέσο όρο της έκπτωσης που έχουν τα τιμολόγια και δίνουμε την τιμή αυτή στο πεδίο MO_EKPTOSHS : Εμφανίζουμε τα τιμολόγια που έχουν έκπτωση μεγαλύτερη από τον MO_EKPTOSHS Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

63 Η εντολή IF...THEN...ENDIF Ορισμένες φορές οι εντολές που πρέπει να εκτελέσει μία διαδικασία χρειάζεται να διαφοροποιούνται ανάλογα με τις συνθήκες που επικρατούν κάθε φορά. Σε μία διαδικασία μπορούμε να ορίσουμε την υπο συνθήκη εκτέλεση ενός συνόλου εντολών με την εντολή IF συνθήκη ΤΗΕΝ εντολές ENDIF: Αν ισχύει η συνθήκη που ορίζεται μετά τη δεσμευμένη λέξη IF τότε εκτελούνται οι εντολές που βρίσκονται ανάμεσα στη δεσμευμένη λέξη THEN και τη δεσμευμένη λέξη END IF. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

64 Παράδειγμα υπό συνθήκη εκτέλεσης εντολών
Παράδειγμα υπό συνθήκη εκτέλεσης εντολών Μία εμπορική επιχείρηση η οποία πουλάει προϊόντα που διατηρεί στις αποθήκες της, προσφέρει σε κάθε πελάτη της ένα ποσοστό έκπτωσης το οποίο ξεκινάει από 2% με την έκδοση του πρώτου τιμολογίου του έτους που εκδίδεται για τον πελάτη. Η βάση δεδομένων που χρησιμοποιεί η επιχείρηση έχει δύο πίνακες: ΠΕΛΑΤΕΣ και ΤΙΜΟΛΟΓΙΑ: ΠΕΛΑΤΕΣ Κωδικός Όνομα Επώνυμο Συνολικές_αγορές Ποσοστό_έκπτωσης Ξ.Κ. ΤΙΜΟΛΟΓΙΑ Κωδικός Κωδικός_πελάτη Σύνολο Έκπτωση Τελικό_ποσό Ημερομηνία_έκδοσης Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

65 Διαδικασία για τον προσδιορισμό έκπτωσης πελάτη
CREATE PROCEDURE 1o_TIMOLOGIO_PELATH (IN CUSTOMER_ID INTEGER) DECLARE YR INTEGER; BEGIN SELECT YEAR(MAX(ημερομηνία_έκδοσης)) INTO YR  FROM ΤΙΜΟΛΟΓΙΑ WHERE κωδικός_πελάτη = CUSTOMER_ID  IF YEAR(CURDATE()) > YR THEN  ΠΕΛΑΤΕΣ.συνολικές_αγορές = 0;  ΠΕΛΑΤΕΣ.ποσοστό_έκπτωσης = 0.02;  END IF; END : Βρίσκουμε (για τον πελάτη με κωδικό CUSTOMER_ID λόγω της ) τη μεγαλύτερη (δηλαδή την πιο πρόσφατη) ημερομηνία_έκδοσης που υπάρχει στον πίνακα τιμολόγια και την καταχωρούμε στη μεταβλητή YR  Αν το τρέχον έτος είναι μεγαλύτερο από τη τιμή της μεταβλητή YR τότε: : μηδενίσουμε τις ετήσιες συνολικές αγορές του πελάτη και : αποδίδουμε στον πελάτη το ποσοστό έκπτωσης 2%.

66 Η εντολή IF...THEN...ELSE Προηγουμένως είδαμε την πιο απλή μορφή της εντολής IF Μία πιο σύνθετη μορφή της εντολής αυτής είναι IF ... THEN ... ELSE η οποία χρησιμοποιείται όταν θέλουμε να ελέγξουμε αν ισχύουν περισσότερες από μία συνθήκες. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

67 Παράδειγμα - πολλαπλές συνθήκες εκτέλεσης εντολών
Θα δημιουργήσουμε μία διαδικασία η οποία θα υπολογίζει το ποσοστό έκπτωσης ενός πελάτη, ανάλογα με το συνολικό ποσό των αγορών που έκανε ο πελάτης αυτός από την αρχή του έτους, σύμφωνα με τον παρακάτω πίνακα: Η διαδικασία που υλοποιεί αυτή την πολιτική εκπτώσεων φαίνεται στη συνέχεια: Συνολικό ποσό αγορών πελάτη από την αρχή του έτους Ποσοστό έκπτωσης Κάτω από € 2% Από € έως € (συμπεριλαμβανομένων) 5% Άνω των € 10% Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

68 DECLARE TOTAL_SALES FLOAT; SELECT σύνολικές_αγορών INTO TOTAL_SALES
CREATE PROCEDURE POSOSTO_EKPTOSHS_PELATH_EKDOSH2 (IN CUSTOMER_ID INTEGER) BEGIN  DECLARE TOTAL_SALES FLOAT; SELECT σύνολικές_αγορών INTO TOTAL_SALES FROM ΠΕΛΑΤΕΣ WHERE ΠΕΛΑΤΕΣ.κωδικός = CUSTOMER_ID;  IF TOTAL_SALES < 5000 THEN UPDATE ΠΕΛΑΤΕΣ SET ποσοστό_έκπτωσης = 0.02 WHERE ΠΕΛΑΤΕΣ.κωδικός = CUSTOMER_ID; ELSEIF TOTAL_SALES >= 5000 AND TOTAL_SALES <10000 THEN SET ποσοστό_έκπτωσης = 0.05  ELSE SET ποσοστό_έκπτωσης = 0.10 END IF; END Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

69 Δεδομένα εξόδου Στα προηγούμενα παραδείγματα, είδαμε με ποιό τρόπο ο χρήστης έχει τη δυνατότητα να γνωστοποιεί στην διαδικασία τιμές που ήταν απαραίτητες για τη λειτουργία της διαδικασίας. Κατά αντιστοιχία και η διαδικασία έχει δυνατότητα να γνωστοποιήσει στον χρήστη τιμές που έχει υπολογίσει κατά τη διάρκεια της εκτέλεσής της. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

70 Παράδειγμα δεδομένων εξόδου
Θα δημιουργήσουμε μία διαδικασία η οποία: Αν διαπιστώνει ότι έχει αλλάξει η χρονιά από τότε που εκδόθηκε το τελευταίο τιμολόγιο για έναν πελάτη θα θέτει ως τιμή μίας μεταβλητής την τιμή 1, Ενώ αν δεν έχει αλλάξει η χρονιά θα θέτει ως τιμή της μεταβλητής την τιμή 0. Η διαδικασία που θα αναπτύξουμε αποτελεί τροποποίηση της διαδικασίας PROCEDURE 1o_TIMOLOGIO_PELATH που αναπτύξαμε προηγουμένως. Η διαδικασία παρουσιάζεται στην επόμενη διαφάνεια. Με κανονικά γράμματα είναι τα σημεία της διαδικασίας PROCEDURE 1o_TIMOLOGIO_PELATH ενώ με έντονα γράμματα είναι τα σημεία που προστίθενται για τον υπολογισμό του δεδομένου εξόδου. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

71 CREATE PROCEDURE 1o_TIMOLOGIO_PELATH_EKDOSH2 (IN CUSTOMER_ID INTEGER, OUT PROTO BOOLEAN)  BEGIN SELECT YEAR(MAX(ημερομηνία_έκδοσης)) FROM ΤΙΜΟΛΟΓΙΑ WHERE κωδικός_πελάτη = CUSTOMER_ID; IF YEAR(CURDATE()) > YR THEN ΠΕΛΑΤΕΣ.συνολικές_αγορές = 0; ΠΕΛΑΤΕΣ.ποσοστό_έκπτωσης = 0.02; SELECT 1 INTO PROTO;  ELSE SELECT 0 INTO PROTO;  END IF; END : Δηλώνουμε ότι η διαδικασία θα γνωστοποιεί στον χρήστη το δεδομένο εξόδου PROTO που είναι τύπου BOOLEAN (παίρνει δηλαδή δύο μόνο δυνατές τιμές 0 ή 1). : Η διαδιασία έχει ήδη διαπιστώσει ότι ο χρόνος έχει αλλάξει και επομένως δίνει στο πεδίο PROTO την τιμή 1 ενώ : Η διαδικασία έχει διαπιστωθεί ότι δεν έχει αλλάξει ο χρόνος και το πεδίο PROTO παίρνει την τιμή 0. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

72 Εμφάνιση δεδομένων εξόδου
Για να δει ο χρήστης το αποτέλεσμα που έχει υπολογίσει η ρουτίνα σε μία μεταβλητή εξόδου: αρχικά καλεί την ρουτίνα με την εντολή CALL και στη συνέχεια εμφανίζει τα δεδομένα εξόδου με την εντολή SELECT. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

73 Παράδειγμα εμφάνισης της τιμής δεδομένων εξόδου
Στην περίπτωση της ρουτίνας 1o_TIMOLOGIO_PELATH_EKDOSH2 ο χρήστης καλεί την διαδικασία με τις εντολές: CALL PROCEDURE 1o_TIMOLOGIO_PELATH_EKDOSH2  : Εκτελείται η διαδικασία και το αποτέλεσμα αποθηκεύεται στη : με την εντολή αυτή ο χρήστης βλέπει την τιμή της Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

74 Κλήση διαδικασίας από άλλη διαδικακία
Κάθε διαδικασία μπορεί να χρησιμοποιηθεί όχι μόνο από κάποιον χρήστη αλλά και από κάποια άλλη διαδικασία. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

75 Παράδειγμα κλήσης διαδικασίας από άλλη διαδικασία
Θα δημιουργήσουμε τη διαδικασία με το όνομα YPOLOGISMOS_EKPTOSIS η οποία θα λειτουργεί σύμφωνα με τις παρακάτω προδιαγραφές: Προδιαγραφή 1: αρχικά θα ελέγχει αν έχει αλλάξει η χρονιά από την ημερομηνία κατά την οποία εκδόθηκε το τελευταίο τιμολόγιο για έναν πελάτη. Αν έχει αλλάξει η χρονιά τότε η διαδικασία θα θέτει στο ποσοστό έκπτωσης του πελάτη 2% και θα μηδενίζει το πεδίο συνολικές_αγορές Προδιαγραφή 2: Αν δεν έχει αλλάξει η χρονιά τότε θα ενημερώνει το ποσοστό έκπτωσης του πελάτη ανάλογα με τις συνολικές αγορές που έχει ο πελάτης και σύμφωνα με τον παρακάτω πίνακα : Συνολικό ποσό αγορών πελάτη από την αρχή του έτους Ποσοστό έκπτωσης Κάτω από € 2% Από € έως € (συμπεριλαμβανομένων) 5% Άνω των € 10% Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

76 Σχεδίαση διαδικασίας Όπως έχουμε δει:
η προδιαγραφή 1 υλοποιείται από την διαδικασία 1o_TIMOLOGIO_PELATH_EKDOSH2 ενώ η προδιαγραφή 2 από την POSOSTO_EKPTOSHS_PELATH_EKDOSH2. Επομένως μπορούμε να δημιουργήσουμε μία διαδικασία η οποία θα χρησιμοποιεί τις υπηρεσίες των δύο αυτών διαδικασιών όπως φαίνεται στη συνέχεια: Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

77 CREATE PROCEDURE YPOLOGISMOS_EKPTOSIS (IN CUSTOMER_ID INT) BEGIN
CALL 1o_TIMOLOGIO_PELATH_EKDOSH2 ; = 0 THEN CALL POSOSTO_EKPTOSHS_PELATH_EKDOSH2 (CUSTOMER_ID) ; ENDIF; END Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

78 Εναύσματα Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

79 Έναυσμα (trigger) Έναυσμα (trigger) είναι ένα σύνολο εντολών SQL που ορίζει ο χρήστης και εκτελούνται αυτόματα από το σύστημα διαχείρισης βάσεων δεδομένων όταν εκτελούνται οι SQL εντολές INSERT, DELETE, UPDATE. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

80 Χρήση των εναυσμάτων Τα εναύσματα χρησιμοποιούνται για να αυτοματοποιήσουμε υπολογισμούς που θέλουμε να εκτελεί στο σύστημα διαχείρισης βάσεων δεδομένων όταν συμβαίνουν γεγονότα που τροποποιούν το στιγμιότυπο της βάσης δεδομένων. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

81 Παράδειγμα χρήσης εναύσματος εισαγωγής
Μία μικρή εμπορική επιχείρηση χρησιμοποιεί μία σχεσιακή βάση δεδομένων στην οποία καταχωρούνται δεδομένα για τους πελάτες της, τα προϊόντα της και τα τιμολόγια που εκδίδει. Η βάση δεδομένων περιέχει και τους δύο πίνακες ΠΡΟΪΟΝΤΑ και ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ: ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_τιμολογίου Κωδικός_προϊόντος Ποσότοτηα Ξ.Κ. ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Απόθεμα Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

82 Επεξήγηση των πινάκων Ο πίνακας ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ αναπαριστάνει την ποσότητα στην οποία πουλήθηκε κάποιο προϊόν σε κάποιο τιμολόγιο: Όταν ένας πελάτης αγοράζει ένα προϊόν σε κάποια ποσότητα, εισάγεται μία νέα γραμμή στον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ. Η στήλη 'απόθεμα' του πίνακα ΠΡΟΪΟΝΤΑ δείχνει το πλήθος των προϊόντων που έχει διαθέσιμα στην αποθήκη της η επιχείρηση κάθε χρονική στιγμή. Γνωρίζουμε ότι όλα τα προϊόντα που εμπορεύεται η επιχείρηση έχουν ως μονάδα μέτρησης το 'τεμάχιο'. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

83 Περιγραφή του εναύσματος του παραδείγματος
Η βάση δεδομένων διαθέτει τον κατάλληλο μηχανισμό εναύσματος ώστε να διατηρεί επικαιροποιημένο το απόθεμα του προϊόντος, δηλαδή τον αριθμό των τεμαχίων που έχει διαθέσιμα για κάθε προϊόν η επιχείρηση στην αποθήκη της: Για παράδειγμα: όταν εισάγεται μία νέα γραμμή στον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ, το απόθεμα του προϊόντος μειώνεται αυτόματα κατά την ποσότητα του προϊόντος που αγοράζει ο πελάτης με τη νέα γραμμή. Η λογική του εναύσματος του παραδείγματος αυτού παρουσιάζεται στη συνέχεια: Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

84 Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1003 8 ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ
: Η νέα γραμμή εισάγεται στον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ : Ο χρήστης ζητάει να εισαχθεί στον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ η νέα γραμμή (Α1, 1003, 8) ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1000 5 1001 2 1002 7 1003 8 ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1000 5 1001 2 1002 7 : Η εισαγωγή της νέας γραμμής ενεργοποιεί το έναυσμα το οποίο αυτόματα μειώνει κατάλληλα το απόθεμα ΠΡΟΪΟΝΤΑ ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Απόθεμα 1000 Στυλό 0.75 150 1002 Μολύβι 1 200 1003 Μαρκαδόρος 1.3 120 Κωδικός Περιγραφή Τιμή Απόθεμα 1000 Στυλό 0.75 150 1002 Μολύβι 1 200 1003 Μαρκαδόρος 1.3 112 Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

85 Ο πίνακας NEW Όταν εισάγεται μία νέα εγγραφή σε έναν πίνακα, το σύστημα διαχείρισης βάσεων δεδομένων κρατάει ένα αντίγραφο της νέας αυτής εγγραφής σε έναν πίνακα του συστήματος που ονομάζεται NEW. Ο πίνακας NEW: δεν έχει κάποια συγκεκριμένη σταθερή δομή, αλλά κάθε φορά υιοθετεί την δομή του πίνακα στον οποίο γίνεται η εισαγωγή μίας νέας εγγραφής. έχει μία μόνο γραμμή η οποία είναι αντίγραφο της νέας γραμμής που προστέθηκε στον πίνακα. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

86 Παράδειγμα του πίνακα NEW
Όταν στο προηγούμενο παράδειγμα κάνουμε την εισαγωγή στον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ, το σύστημα διαχείρισης βάσεων δεδομένων διαμορφώνει τον πίνακα NEW έτσι ώστε να έχει την ίδια δομή με τον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ και τοποθετεί στον πίνακα NEW την εγγραφή που εισήγαγε στον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ: Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

87 NEW : Ενεργοποιείται το έναυσμα και δημιουργείται ο πίνακας NEW με δομή ίδια με τη δομή του πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ Τιμολογίου Προϊόντος Ποσότητα : Η νέα γραμμή εισάγεται: α) στον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΟΥ β) στον πίνακα NEW Η γραμμή που ζητείται να εισαχθεί στον πίνακα ΓΡΑΜΜΕΣ ΤΙΜΟΛΟΓΙΟΥ NEW Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1003 8 Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1003 8 ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ : Ο χρήστης ζητάει να εισαχθεί στον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ η νέα γραμμή (Α1, 1003, 8) ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1000 5 1001 2 1002 7 1003 8 ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1000 5 1001 2 1002 7 ΠΡΟΪΟΝΤΑ ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Απόθεμα 1000 Στυλό 0.75 150 1002 Μολύβι 1 200 1003 Μαρκαδόρος 1.3 120 Κωδικός Περιγραφή Τιμή Απόθεμα 1000 Στυλό 0.75 150 1002 Μολύβι 1 200 1003 Μαρκαδόρος 1.3 112

88 NEW : Ενεργοποιείται το έναυσμα και δημιουργείται ο πίνακας NEW με δομή ίδια με τη δομή του πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ Τιμολογίου Προϊόντος Ποσότητα : Μειώνεται το απόθεμα του προϊόντος με κωδικό NEW.Κωδικός_προϊόντος κατά την τιμή που υπάρχει στο πεδίο NEW. Ποσότητα Η γραμμή που ζητείται να εισαχθεί στον πίνακα ΓΡΑΜΜΕΣ ΤΙΜΟΛΟΓΙΟΥ NEW Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1003 8 Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1003 8 ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ : Ο χρήστης ζητάει να εισαχθεί στον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ η νέα γραμμή (Α1, 1003, 8) ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1000 5 1001 2 1002 7 1003 8 ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1000 5 1001 2 1002 7 ΠΡΟΪΟΝΤΑ ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Απόθεμα 1000 Στυλό 0.75 150 1002 Μολύβι 1 200 1003 Μαρκαδόρος 1.3 120 Κωδικός Περιγραφή Τιμή Απόθεμα 1000 Στυλό 0.75 150 1002 Μολύβι 1 200 1003 Μαρκαδόρος 1.3 112

89 Πρόσβαση στα δεδομένα του πίνακα NEW
Αναφορά σε κάποιο πεδίο του πίνακα NEW γίνεται με τον συνήθη τρόπο που ακολουθούμε για να προσδιορίσουμε ένα πεδίο ενός πίνακα δηλαδή με την σύνταξη NEW.όνομα_στήλης, όπως εξηγείται στο επόμενο παράδειγμα. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

90 Παράδειγμα αναφοράς σε πεδίο του πίνακα NEW.
ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_τιμολογίου Κωδικός_προϊόντος Ποσότητα Θεωρείστε ότι ο πίνακας ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ έχει συνδεθεί με ένα έναυσμα και έχει εισαχθεί στον πίνακα μία νέα εγγραφή. Τότε: ο πίνακας NEW έχει τη δομή του πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΟΥ και αναφερόμαστε στα πεδία με τις εκφράσεις: NEW.κωδικός_τιμολογίου, NEW.κωδικός_προϊόντος NEW.ποσότητα, Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

91 Σημείωση σχετικά με την πρόσβαση στον πίνακα NEW
Προσοχή: Πρόσβαση τον ειδικό πίνακα NEW έχουν μόνο οι εντολές SQL που καλούνται από κάποιο έναυσμα. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

92 Χρήση των δεδομένων του πίνακα NEW
Με βάση τα παραπάνω, λοιπόν, μπορούμε να συντάξουμε την παρακάτω εντολή η οποία:  ενημερώνει τον πίνακα ΠΡΟΪΌΝΤΑ  μειώνοτας το απόθεμα κατά την τιμή έχει το πεδίο ποσότητα του πίνακα NEW  μόνο για το προϊόν με κωδικό NEW.κωδικός_προϊόντος UPDATE ΠΡΟΪΟΝΤΑ  SET απόθεμα = απόθεμα – NEW.ποσότητα  WHERE κωδικός= NEW. κωδικός_προϊόντος;  Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

93 Δημιουργία εναύσματος εισαγωγής
Η δημιουργία εναύσματος γίνεται με την εντολή CREATE TRIGGER με την οποία ορίζουμε: το όνομα του εναύσματος τον χρόνο πυροδότησης του εναύσματος την εντολή η οποία θα πυροδοτεί το έναυσμα τον πίνακα ο οποίος είναι συνδεμένος με το έναυσμα Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

94 Εντολή πυροδότησης εναύσματος
Η εντολή που πυροδοτεί το έναυσμα μπορεί να είναι κάποια από τις SQL εντολές που τροποποιούν τα δεδομένα της βάσης δεδομένων - δηλαδή μία από τις εντολές: INSERT, DELETE ή UPDATE. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

95 Χρόνος πυροδότησης εναύσματος
Ο χρόνος εκτέλεσης του εναύσματος μπορεί να είναι πρίν την εκτέλεση μίας INSERT, DELETE ή UPDATE εντολής, οπότε χρησιμοποιούμε τη δεσμευμένη λέξη BEFORE ή μπορεί να είναι μετά την εκτέλεση μίας INSERT, DELETE ή UPDATE εντολής, οπότε χρησιμοποιούμε τη δεσμευμένη λέξη AFTER. Ο πίνακας που είναι συνδεμένος με το έναυσμα δηλώνεται με την δεσμευμένη λέξη ON. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

96 Πίνακας εναύσματος Ο πίνακας που είναι συνδεμένος με το έναυσμα δηλώνεται με την δεσμευμένη λέξη ON. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

97 Παράδειγμα υλοποίησης εναύσματος
Το παρακάτω έναυσμα μειώνει το απόθεμα ενός προϊόντος κατά την ποσότητα στην οποία εμφανίζεται το προϊόν αυτό σε μία νέα εγγραφή του πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ: CREATE TRIGGER AFTER_INSERT_ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ AFTER INSERT ON ΓΡΑΜΜΈΣΤΙΜΟΛΟΓΊΩΝ FOR EACH ROW BEGIN UPDATE ΠΡΟΪΟΝΤΑ SET απόθεμα = απόθεμα - NEW.ποσότητα WHERE κωδικός= NEW. κωδικός_προϊόντος; END Το έναυσμα εξηγείται στη συνέχεια: Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

98  : η οποία εισάγει δεδομένα στον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ.
CREATE TRIGGER AFTER_INSERT_ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ  AFTER INSERT  ON ΓΡΑΜΜΈΣΤΙΜΟΛΟΓΊΩΝ  FOR EACH ROW  BEGIN  UPDATE ΠΡΟΪΟΝΤΑ  SET απόθεμα = απόθεμα - NEW.ποσότητα  WHERE κωδικός= NEW. κωδικός_προϊόντος;  END   : Δημιουργούμε ένα έναυσμα και του δίνουμε το όνομα after_insert_γραμμέςτιμολογίων.  : Δηλώνουμε ότι ο χρόνος πυροδότησης του εναύσματος θα είναι μετά την εκτέλεση μίας εντολής insert  : η οποία εισάγει δεδομένα στον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ.  : για κάθε γραμμή που εισάγεται στον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ  : αρχίζουμε να περιγράφουμε το σύνολο των εντολών που θα πρέπει να εκτελείται με την πυροδότηση του εναύσματος. Το σύνολο των εντολών αρχίζει μετά τη δεσμευμένη λέξη BEGIN και τελειώνει με τη δεσμευμένη λέξη END .  : Στο συγκεκριμένο έναυσμα ενημερώνεται ο πίνακας ΠΡΟΪΟΝΤΑ  : μειώνοντας το πεδίο απόθεμα κατά την τιμή που υπάρχει στο πεδίο ποσότητα του πίνακα NEW : H μείωση αυτή γίνεται μόνο για το προϊόν που έχει κωδικό ίδιο με τον κωδικό_προϊόντος που εμφανίζεται στον πίνακα NEW : Τέλος του συνόλουο των εντολών του εναύσματος Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

99 Ο πίνακας OLD Όταν διαγράφεται μία εγγραφή από έναν πίνακα, το σύστημα διαχείρισης βάσεων δεδομένων δημιουργεί ένα αντίγραφο της διαγραμμένης εγγραφής σε έναν πίνακα του συστήματος που ονομάζεται OLD. Ο πίνακας OLD: Δεν έχει μία συγκεκριμένη σταθερή δομή, αλλά κάθε φορά υιοθετεί την δομή του πίνακα από τον οποίο γίνεται διαγραφή μίας εγγραφής. Έχει μία μόνο γραμμή η οποία είναι αντίγραφο της γραμμής που διαγράφηκε από τον πίνακα. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

100 Παράδειγμα του πίνακα OLD
ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_τιμολογίου Κωδικός_προϊόντος Ποσότοτηα Ξ.Κ. ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Απόθεμα Αν διαγράψουμε από τον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ μία εγγραφή, το σύστημα διαχείρισης βάσεων δεδομένων διαμορφώνει τον πίνακα OLD έτσι ώστε να έχει την ίδια δομή με τον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ και τοποθετεί στον πίνακα OLD την εγγραφή που διαγράφηκε από αυτόν Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

101 OLD : Ενεργοποιείται το έναυσμα και δημιουργείται ο πίνακας OLD με δομή ίδια με τη δομή του πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ Τιμολογίου Προϊόντος Ποσότητα : Η γραμμή : α) διαγράφεται από τον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΟΥ και β) εισάγεται στον πίνακα OLD Η γραμμή που ζητείται να διαγραφεί από τον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ OLD Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1001 2 Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1001 2 (β) ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ : Ο χρήστης ζητάει να διαγραφεί από τον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ η γραμμή (Α1, 1001, 2) ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1000 5 1002 7 ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ (α) Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1000 5 1001 2 1002 7 : Αυξάνεται το απόθεμα του προϊόντος με κωδικό OLD.Κωδικός_προϊόντος κατά την τιμή που υπάρχει στο πεδίο OLD. Ποσότητα ΠΡΟΪΟΝΤΑ ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Απόθεμα 1001 Στυλό 0.75 150 1002 Μολύβι 1 200 1003 Μαρκαδόρος 1.3 120 Κωδικός Περιγραφή Τιμή Απόθεμα 1001 Στυλό 0.75 152 1002 Μολύβι 1 200 1003 Μαρκαδόρος 1.3 112

102 OLD : Ενεργοποιείται το έναυσμα και δημιουργείται ο πίνακας OLD με δομή ίδια με τη δομή του πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ Τιμολογίου Προϊόντος Ποσότητα : Η γραμμή : α) διαγράφεται από τον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΟΥ και β) εισάγεται στον πίνακα OLD Η γραμμή που ζητείται να διαγραφεί από τον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ OLD Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1001 2 Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1001 2 (β) ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ : Ο χρήστης ζητάει να διαγραφεί από τον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ η γραμμή (Α1, 1001, 2) ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1000 5 1002 7 ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ (α) Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1000 5 1001 2 1002 7 : Αυξάνεται το απόθεμα του προϊόντος με κωδικό OLD.Κωδικός_προϊόντος κατά την τιμή που υπάρχει στο πεδίο OLD. Ποσότητα ΠΡΟΪΟΝΤΑ ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Απόθεμα 1001 Στυλό 0.75 150 1002 Μολύβι 1 200 1003 Μαρκαδόρος 1.3 120 Κωδικός Περιγραφή Τιμή Απόθεμα 1001 Στυλό 0.75 152 1002 Μολύβι 1 200 1003 Μαρκαδόρος 1.3 112

103 Πρόσβαση στα δεδομένα του πίνακα OLD
Αναφορά σε κάποιο πεδίο του πίνακα OLD γίνεται με τον συνήθη τρόπο που ακολουθούμε για να προσδιορίσουμε ένα πεδίο ενός πίνακα δηλαδή με την σύνταξη OLD.όνομα_στήλης, όπως εξηγείται στο επόμενο παράδειγμα. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

104 Παράδειγμα αναφοράς σε πεδίο του πίνακα OLD.
ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_τιμολογίου Κωδικός_προϊόντος Ποσότητα Θεωρείστε ότι ο πίνακας ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ έχει συνδεθεί με ένα έναυσμα και έχει εισαχθεί στον πίνακα μία νέα εγγραφή. Τότε: ο πίνακας OLD έχει τη δομή του πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΟΥ και αναφερόμαστε στα πεδία με τις εκφράσεις: OLD.κωδικός_τιμολογίου, OLD.κωδικός_προϊόντος OLD.ποσότητα, Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

105 Σημείωση σχετικά με την πρόσβαση στον πίνακα OLD
Προσοχή: Πρόσβαση τον ειδικό πίνακα OLD έχουν μόνο οι εντολές SQL που καλούνται από κάποιο έναυσμα. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

106 Χρήση των δεδομένων του πίνακα 0LD
Με βάση τα παραπάνω, λοιπόν, μπορούμε να συντάξουμε την παρακάτω εντολή UPDATE ΠΡΟΪΟΝΤΑ  SET απόθεμα = απόθεμα + OLD.ποσότητα  WHERE κωδικός= OLD. κωδικός_προϊόντος;  Η εντολή αυτή:  ενημερώνει τον πίνακα ΠΡΟΪΟΝΤΑ  αυξάνοντας το απόθεμα κατά την τιμή έχει το πεδίο ποσότητα του πίνακα OLD  μόνο για το προϊόν με κωδικό OLD.κωδικός_προϊόντος Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

107 Παράδειγμα εναύσματος διαγραφής
Το παρακάτω έναυσμα αυξάνει το απόθεμα του προϊόντος που έχει τον κωδικό_προϊόντος που φαίνεται στη διαγραμμένη εγγραφή κατά την τιμή που έχει το πεδίο ποσότητα της διαγραμμένης εγγραφής. : CREATE TRIGGER AFTER_DELETE_ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ AFTER DELETE ON ΓΡΑΜΜΈΣΤΙΜΟΛΟΓΊΩΝ FOR EACH ROW BEGIN UPDATE ΠΡΟΪΟΝΤΑ SET απόθεμα = απόθεμα + OLD.ποσότητα WHERE κωδικός= OLD. κωδικός_προϊόντος; END Το έναυσμα εξηγείται στη συνέχεια: Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

108  : η οποία διαγράφει δεδομένα από τον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ.
CREATE TRIGGER AFTER_DELETE_ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ AFTER DELETE ON ΓΡΑΜΜΈΣΤΙΜΟΛΟΓΊΩΝ FOR EACH ROW BEGIN UPDATE ΠΡΟΪΟΝΤΑ SET απόθεμα = απόθεμα + OLD.ποσότητα WHERE κωδικός= OLD. κωδικός_προϊόντος; END   : Δημιουργούμε ένα έναυσμα και του δίνουμε το όνομα after_delete_γραμμέςτιμολογίων.  : Δηλώνουμε ότι ο χρόνος πυροδότησης του εναύσματος θα είναι μετά την εκτέλεση μίας εντολής delete  : η οποία διαγράφει δεδομένα από τον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ.  : για κάθε γραμμή που διαγράφεται από τον πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ  : αρχίζουμε να περιγράφουμε το σύνολο των εντολών που θα πρέπει να εκτελείται με την πυροδότηση του εναύσματος. Το σύνολο των εντολών αρχίζει μετά τη δεσμευμένη λέξη BEGIN και τελειώνει με τη δεσμευμένη λέξη END .  : Στο συγκεκριμένο έναυσμα ενημερώνεται ο πίνακας ΠΡΟΪΟΝΤΑ  : αυξάνοντας το πεδίο απόθεμα κατά την τιμή που υπάρχει στο πεδίο ποσότητα του πίνακα OLD : η αύξηση αυτή γίνεται μόνο για το προϊόν που έχει κωδικό ίδιο με τον κωδικό_προϊόντος που εμφανίζεται στον πίνακα OLD : Τέλος του συνόλου των εντολών του εναύσματος

109 Οι πίνακες OLD και NEW κατά την ενημέρωση
Μία ενημέρωση (τροποποίηση) είναι ισοδύναμη με τη διαγραφή μίας εγγραφής που ακολουθείται από την εισαγωγή μίας εγγραφής. Δηλαδή όταν τροποποιούμε μία υπάρχουσα εγγραφή είναι σα: να διαγράφουμε την υπάρχουσα εγγραφή και ακολούθως να εισάγουμε μία νέα που έχει τις τιμές που θέλουμε. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

110 Παράδειγμα ισοδυναμίας της πράξης της ενημέρωσης
ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_τιμολογίου Κωδικός_προϊόντος Ποσότητα Α1 1001 2 Ας υποθέσουμε το παραπάνω στιγμιότυπο του πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Αν θέλουμε να αλλάξουμε την ποσότητα της μοναδικής εγγραφή του πίνακα από 2 σε 6 είναι σα να διαγράφουμε την εγγραφή (Α1, 1001, 2) από τον πίνακα και στη συνέχεια εισάγουμε στον πίνακα ΓΡΑΜΜΕΣΤΟΜΟΛΟΓΙΩΝ τη γραμμή (Α1, 1001, 6). Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

111 Έναυσμα ενημέρωσης Ένα έναυσμα ενημέρωσης χρησιμοποιεί και τους δύο πίνακες OLD και NEW: Στον πίνακα OLD αποθηκεύονται οι τιμές της εγγραφής που διαγράφεται ενώ Στον πίνακα NEW αποθηκεύονται οι τιμές της νέας εγγραφής που εισάγεται. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

112 : Η γραμμή που διαγράφεται εισάγεται στον πίνακα OLD OLD Κωδικός_
: Ενεργοποιείται το έναυσμα και δημιουργούνται οι πίνακες OLD και NEW με τη δομή του πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ : Η γραμμή που διαγράφεται εισάγεται στον πίνακα OLD OLD Κωδικός_ Τιμολογίου Προϊόντος Ποσότητα Α1 1001 2 Το αίτημα ισοδυναμεί με διαγραφή της β’ γραμμής του πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ αι εισαγωγή της γραμμής: : Η γραμμή που διαγράφεται εισάγεται στον πίνακα NEW Κωδικός_ τιμολογίου Προϊόντος Ποσότητα Α1 1001 6 εισαγωγή NEW Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1001 6 ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ : Ο χρήστης ζητάει να τροποποιηθεί στις ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ η β’ γραμμή σε: (Α1, 1001, 6) ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1000 5 1001 2 1002 7 Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1000 5 A1 1001 6 1002 7 διαγραφή ΠΡΟΪΟΝΤΑ ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Απόθεμα 1001 Στυλό 0.75 150 1002 Μολύβι 1 200 1003 Μαρκαδόρος 1.3 120 Κωδικός Περιγραφή Τιμή Απόθεμα 1001 Στυλό 0.75 146 1002 Μολύβι 1 200 1003 Μαρκαδόρος 1.3 112

113 OLD : Ενεργοποιείται το έναυσμα και δημιουργούνται οι πίνακες OLD και NEW με τη δομή του πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ Τιμολογίου Προϊόντος Ποσότητα Α1 1001 2 Το αίτημα ισοδυναμεί με διαγραφή της β’ γραμμής του πίνακα ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ αι εισαγωγή της γραμμής: NEW Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1001 6 Κωδικός_ τιμολογίου Προϊόντος Ποσότητα Α1 1001 6 εισαγωγή Ενημερώνεται (α) η β’ γραμμή του ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ και (β) το απόθεμα το οποίο αυξάνεται κατά OLD.Ποσότητα - NEW.Ποσότητα : Ο χρήστης ζητάει να τροποποιηθεί στις ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ η β’ γραμμή σε: (Α1, 1001, 6) ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1000 5 1001 2 1002 7 Κωδικός_ τιμολογίου προϊόντος Ποσότητα Α1 1000 5 A1 1001 6 1002 7 διαγραφή ΠΡΟΪΟΝΤΑ ΠΡΟΪΟΝΤΑ Κωδικός Περιγραφή Τιμή Απόθεμα 1001 Στυλό 0.75 150 1002 Μολύβι 1 200 1003 Μαρκαδόρος 1.3 120 Κωδικός Περιγραφή Τιμή Απόθεμα 1001 Στυλό 0.75 146 1002 Μολύβι 1 200 1003 Μαρκαδόρος 1.3 112

114 Παράδειγμα εναύσματος ενημέρωσης
CREATE TRIGGER AFTER_UPDATE_ΓΡΑΜΜΕΣΤΙΜΟΛΟΓΙΩΝ AFTER UPDATE ON ΓΡΑΜΜΈΣΤΙΜΟΛΟΓΊΩΝ FOR EACH ROW BEGIN UPDATE ΠΡΟΪΟΝΤΑ SET απόθεμα = απόθεμα + OLD.ποσότητα - NEW.ποσότητα WHERE κωδικός= OLD. κωδικός_προϊόντος; END Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

115 Πρακτική οδηγία για τα εναύσματα
Οποιοδήποτε όνομα μπορεί να δοθεί σε ένα έναυσμα. Καλό είναι ωστόσο, να υπάρχει μία συνέπεια στην ονοματοδοσία των εναυσμάτων. Συνιστάται το όνομα του εναύσματος να αποτελείται από: τον χρόνο πυροδότησης (AFTER/BEFORE) ακολουθούμενο από την εντολή πυροδότησης (INSERT/DELETE/UPDATE) και στη συνέχεια το όνομα του πίνακα με το οποίο συνδέεται το έναυσμα. Σύμφωνα με την πρακτική αυτή, ένα έναυσμα το οποίο θέλουμε να ενεργοποιείται μετά την εισαγωγή νέας εγγραφής στον πίνακα ΠΕΛΑΤΕΣ θα ονομάζεται after_insert_pelates. Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής

116 Εναύσματα και ορθότητα δεδομένων
Τα εναύσματα που είδαμε μέχρι τώρα είχαν ως σκοπό να εκτελέσουν κάποιους υπολογισμούς (π.χ. το συνολικό ποσό) όταν εκτελούνταν μία δραστηριότητα (π.χ. εισαγωγή μίας νέας γραμμής τιμολογίου). Ένας άλλος ρόλος των εναυσμάτων είναι να ελέγχουν την ορθότητα των δεδομένων πριν αυτά αποθηκευτούν στη βάση δεδομένων Σχεσιακές Βάσεις Δεδομένων Ευάγγελος Κεχρής


Κατέβασμα ppt "Σχεσιακεσ βασεισ δεδομενων"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google