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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

MySQL stored procedures

5. MΑΚΡΟΕΝΤΟΛΕΣ. Η δηµιουργία Μακροεντολής γίνεται µε δύο τρόπους :

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

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

ιαχείριση Πληροφοριών στο ιαδίκτυο

Εκφράσεις. Τύποι, Σταθερές & Μεταβλητές. Ορισµός Μεταβλητών

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

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

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

Αρχεία Ένα αρχείο αποτελείται από μία σειρά ομοειδών δεδομένων που ονομάζονται λογικές εγγραφές (logical record)

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

3. Σηµειώσεις Access. # Εισαγωγή ψηφίου ή κενού διαστήµατος. Επιτρέπονται τα ση-

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

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

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

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

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

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

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

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

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

ΑΠΟΘΗΚΕΥΜΕΝΕΣ ΔΙΑΔΙΚΑΣΙΕΣ

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

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

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

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

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

Γνωριµία µε τη Microsoft Access

Το Ηλεκτρονικό Ταχυδροµείο ( ) είναι ένα σύστηµα που δίνει την δυνατότητα στον χρήστη να ανταλλάξει µηνύµατα αλλά και αρχεία µε κάποιον άλλο

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

ALERTS ή EDA (Event Driven Actions)

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

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

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

Χρήση του Ηλεκτρονικού Ταχυδροµείου µεαποµακρυσµένη σύνδεση

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

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

ΜΑΗΣ ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

Γενικά. Change Reference

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

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

Αποτελέσματα προόδου

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

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

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 13/1/13, 22:00

Εφαρµογή Βusiness. ιαδικασίες Μετασχηµατισµών Παραστατικών

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

Σύντοµος Οδηγός της Qbasic. Πέρδος Αθανάσιος Καθηγητής Πληροφορικής

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

ΚΕΦΑΛΑΙΟ Web Services

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

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ ΤΡΙΤΗ 11 ΙΟΥΝΙΟΥ 2019 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal

Start/Programs/ Administrative Tools/DNS

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

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

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

Παράδειγμα Insert Update Delete Alter.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (2)

Κεφάλαιο 12 : ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

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

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

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

Η ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ Εντολές Επανάληψης REPEAT UNTIL, FOR, WHILE

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

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

Ηλεκτρονικές Υπηρεσίες: ηλώσεις Μαθηµάτων Συγγραµµάτων, Ηλεκτρονικό Ταχυδροµείο, Πιστοποιητικό Ασφάλειας

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

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

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) a= b= c= 3 read(d,e)

Η γλώσσα προγραμματισμού Strange

ΖΗΤΗΜΑ 1 Ο : (Μονάδες 3) Να χαρακτηριστούν οι παρακάτω προτάσεις ως σωστές ή εσφαλμένες :

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

επιµέλεια Θοδωρής Πιερράτος

ΚΕΦΑΛΑΙΟ 10 ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ (ή εντολές Ελέγχου και Επιλογής ή εντολές Επιλογής και Απόφασης)

Δομή Επανάληψης. Κεφάλαιο 7 Mike Trimos

Βάσεις Περιβαλλοντικών Δεδομένων

Πτυχιακή Εργασία. Σχεσιακές Βάσεις εδοµένων, η γλώσσα SQL και Αποθηκευµένες ιαδικασίες.

Transcript:

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

Περιεχόµενα Triggers-Ενηµέρωση δεδοµένων άλλων πινάκων... 1 Ασφάλεια... 2 Αλλαγή trigger... 3 ιαγραφή trigger... 3 Executable stored procedures... 4 Selectable stored procedures... 4 ηµιουργία stored procedure... 4 Στοιχεία κεφαλής... 4 Στοιχεία σώµατος... 5 Παραδείγµατα... 6

Ενηµέρωση δεδοµένων άλλων πινάκων Triggers Αν θέλουµε κατά την καταχώρηση ενός φοιτητή στον πίνακα students, τότε να καταχωρούνται αυτόµατα σαν βαθµολογίες του στον πίνακα grades µηδέν, σε ένα trigger που λειτουργεί για καταχώρηση και ενηµέρωση στοιχείων, τότε φτιάχνουµε την εξής trigger: CREATE TRIGGER STUDENTS_BIU0 FOR STUDENTS ACTIVE BEFORE INSERT OR UPDATE POSITION 0 declare variable mitroo integer; IF (INSERTING) then BEGIN mitroo=new.id; END insert into grades values (:mitroo, 111,0); end^ Παρατήρηση: Ο παραπάνω κώδικας δουλεύει σωστά όταν δηµιουργείται την trigger από το πρόγραµµα ib expert. ΠΡΟΣΟΧΗ: Βάζουµε : πριν από κάθε µεταβλητή όταν: Η µεταβλητή χρησιµοποιείται σε SQL ερώτηµα. Η µεταβλητή παίρνει τιµή από εντολή του τύπου [FOR] SELECT INTO. Εξήγηση της trigger: Το όνοµα της trigger είναι STUDENTS_BIU0, εφαρµόζεται στον πίνακα STUDENTS, ενεργοποιείται πριν την καταχώρηση και την ενηµέρωση του πίνακα. ηλώνουµε την µεταβλητή mitroo που είναι ακέραιος. Κύριο σώµα Αν κάνουµε καταχώρηση δεδοµένων τότε η µεταβλητή mitroo είναι ίση µε τον καινούριο αριθµό µητρώου του φοιτητή που θέλουµε να καταχωρήσουµε. Τέλος κύριου σώµατος. Καταχώρηση στον πίνακα grades της µεταβλητής µητρώο, τον κωδικό 111 και τον βαθµό µηδέν. Τέλος. 1

Για exceptions θα µιλήσουµε αργότερα απλώς πρέπει να τις χρησιµοποιήσουµε για ένα παράδειγµα. Exceptions είναι τα µηνύµατα σε περίπτωση που γίνουν κάποια λάθη στην βάση. Έστω ότι θέλουµε να εµφανίζουµε ένα µήνυµα όταν προσπαθούµε να καταχωρήσουµε έναν φοιτητή στην βάση µε αριθµό µητρώου που υπάρχει ήδη καταχωρηµένο. ηµιουργούµε ένα exception µε το µήνυµα: Ο αριθµός µητρώου χρησιµοποιείται ήδη. CREATE EXCEPTION ID_IS_IN_USE Ο αριθµός µητρώου χρησιµοποιείται ήδη ; Έπειτα προσαρµόζουµε την exception στην παραπάνω trigger: CREATE TRIGGER STUDENTS_BIU0 FOR STUDENTS ACTIVE BEFORE INSERT OR UPDATE POSITION 0 declare variable mitroo integer; if (inserting) then if (exists(select 1 from students where id=new.id)) then exception ID_IS_IN_USE; else mitroo=new.id; end insert into grades values (:mitroo, 111,0); end^ Η εξήγηση είναι ίδια όπως πριν µε την µόνη διαφορά ότι στο κύριο σώµα έχουµε µια εντολή SELECT που επιλέγουµε µόνο µια γραµµή αν υπάρχει φοιτητής µε τον αριθµό µητρώου που προσπαθούµε να καταχωρήσουµε και αν υπάρχει, τότε εµφανίζεται το µήνυµα Ο αριθµός µητρώου χρησιµοποιείται ήδη και φυσικά τερµατίζει η trigger. Ασφάλεια Αν θέλουµε να ορίσουµε µόνο τον χρήστη John να καταχωρεί και να κάνει διαγραφή δεδοµένων από τον πίνακα students, τότε: ηµιουργούµε την exception CREATE EXCEPTION NO_AUTHORITY εν έχετε δικαιοδοσία ; Έπειτα φτιάχνουµε την trigger CREATE TRIGGER STUDENTS_BID3 FOR STUDENTS 2

ACTIVE BEFORE INSERT OR DELETE POSITION 3 if (current_user<>'john') then exception no_authority; end^ Επεξήγηση: Το όνοµα της trigger είναι STUDENTS_BID3, εφαρµόζεται στον πίνακα STUDENTS, ενεργοποιείται πριν την καταχώρηση και την διαγραφή από τον πίνακα. Κύριο σώµα Αν ο χρήστης που είναι συνδεµένος δεν είναι ο John τότε εµφανίζεται το µήνυµα εν έχετε δικαιοδοσία Τέλος. Αλλαγή trigger Για να αλλάξουµε το περιεχόµενο µιας trigger, δίνουµε την εντολή: ALTER TRIGGER όνοµα_trigger και το περιεχόµενό της. ιαγραφή trigger DROP TRIGGER όνοµα_trigger; 3

Stored Procedures Μια αποθηκευµένη διαδικασία (stored procedure) είναι ένα πρόγραµµα γραµµένο σε PSQL και αποθηκευµένο σαν εκτελέσιµος κώδικας. Όταν µεταφραστεί µπορούµε να τον εκτελέσουµε από µια εφαρµογή ή από άλλο PSQL πρόγραµµα χρησιµοποιώντας EXECUTE PROCEDURE ή SELECT αναλόγως πως έχει δηλωθεί. Οι αποθηκευµένες διαδικασίες δέχονται παραµέτρους εισόδου από εφαρµογές σαν στοιχεία και επιστρέφουν ένα σύνολο τιµών σαν αποτέλεσµα. Executable stored procedures Οι διαδικασίες που καλούνται µε EXECUTE PROCEDURE µπορούν να επιστρέψουν επιλεκτικά µια γραµµή. Χρησιµοποιούνται συνήθως για διαδικασίες εισαγωγής, ενηµέρωσης και διαγραφής δεδοµένων. Selectable stored procedures Αυτές οι διαδικασίες επιστρέφουν αποτελέσµατα πολλών γραµµών τα οποία εµφανίζονται µε SELECT από τον εικονικό πίνακα. ηµιουργία stored procedure Σύνταξη εντολής: CREATE PROCEDURE όνοµα [(λίστα παράµετρων εισόδου)] [RETURNS (λίστα στοιχείων εξόδου)] <σώµα διαδικασίας> <σώµα διαδικασίας>= [DECLARE [VARIABLE] var data-type; BEGIN Εντολές END Στοιχεία κεφαλής Στην κεφαλή συµπληρώνουµε: Το όνοµα της αποθηκευµένης διαδικασίας που είναι µοναδικό για κάθε βάση Λίστα παράµετρε εισόδου αν υπάρχει µαζί µε τον τύπο δεδοµένων τους. 4

CREATE PROCEDURE test (number1 integer, start_date date) Το όνοµα κάθε στοιχείου πρέπει να είναι µοναδικό σε κάθε αποθηκευµένη διαδικασία. Η λίστα εξόδου αποτελείται από τα ονόµατα των στοιχείων µε τον τύπο δεδοµένων τους µετά από την εντολή RETURNS. CREATE PROCEDURE test (number1 integer, start_date date) RETURNS (number2 integer, name varchar(20)) Η λέξη που απαιτείται πριν το κύριος σώµα της αποθηκευµένης διαδικασίας. Στοιχεία σώµατος ηλώνουµε όλες τις τοπικές µεταβλητές. DECLARE VARIABLE number3 INTEGER DEFAULT 0; Ο κύριος κώδικας γράφεται µεταξύ του BEGIN και END. Μεταξύ του BEGIN και END µπορούµε να έχουµε: 1. Εντολές που να αναθέτουν τιµές στις τοπικές µεταβλητές. 2. SELECT εντολές για να βρούµε τιµές από κάποιες στηλές και να καταχωρηθούν σε κάποιες µεταβλητές. 3. Βρόγχους όπως FOR SELECT.DO και WHILE DO. 4. IF THEN ELSE. 5. EXECUTE PROCEDURE για να καλέσουµε άλλες procedures. 6. EXCEPTIONS. 7. WHEN εντολή για το χειρισµό συγκεκριµένων λαθών 8. POST_EVEN εντολή για την προσθήκη µιας υπενθύµισης ενός γεγονότος. 9. SUSPEND για να σταµατήσει η διαδικασία και να επιστραφούν οι τιµές. 5

Όταν δηµιουργούµε µια stored procedure στο ib expert για να την εκτελέσετε πιέστε µε το ποντίκι µε το δεξί πλήκτρο πάνω στην διαδικασία και επιλέξτε Run Procedure. Παράδειγµα Έστω ότι θέλουµε, να πληκτρολογούµε τον αριθµό µητρώου ενός φοιτητή και να εµφανίζεται ένα κείµενο µε τον αριθµό των µαθηµάτων που έχει περάσει. ηµιουργούµε 4 exceptions για τα µηνύµατα από 0 µαθήµατα ως 3. CREATE EXCEPTION 0_LESSONS Έχει περάσει 0 µαθήµατα ; CREATE EXCEPTION 1_LESSONS Έχει περάσει 1 µάθηµα ; CREATE EXCEPTION 2_LESSONS Έχει περάσει 2 µαθήµατα ; CREATE EXCEPTION 3_LESSONS Έχει περάσει 3 µαθήµατα ; Η διαδικασία είναι η ακόλουθη: CREATE PROCEDURE NEW_PROCEDURE ( ID1 INTEGER) DECLARE VARIABLE lessons INTEGER; SELECT COUNT(GRAD) FROM grades2 WHERE ID=:id1 AND GRAD>=5 INTO :lessons; if (lessons=0) then exception 0_LESSONS; if (lessons=1) then exception 1_LESSONS; if (lessons=2) then exception 2_LESSONS; if (lessons=3) then exception 3_LESSONS; suspend; end 6

Επεξήγηση: Αρχικά δηµιουργούµε τα µηνύµατα που εµφανίζονται αναλόγως τον αριθµό µαθηµάτων που έχουν περάσει οι φοιτητές. Έπειτα δηµιουργούµε την stored procedure µε το όνοµα NEW_PROCEDURE και δηλώνουµε ως µεταβλητές εισόδου την ID1 που είναι ακέραιος. ηλώνουµε την µεταβλητή lessons που είναι και αυτή ακέραιος. Κύριο σώµα Εντολή SELECT η οποία βρίσκει τον αριθµό των µαθηµάτων για ένα συγκεκριµένο αριθµό µητρώου για τα οποία έχει βαθµό από 5 και άνω και τον αποθηκεύει τον αριθµό στην µεταβλητή lessons και στην συνέχεια ελέγχουµε αναλόγως µε τον αριθµό των µαθηµάτων που έχει περάσει ο φοιτητής να βγαίνει το κατάλληλο µάθηµα. Με την εντολή suspend σταµατάει η διαδικασία και επιστρέφονται οι τιµές. Τέλος. Παράδειγµα Έστω ότι θέλουµε να πληκτρολογούµε τον αριθµό µητρώου του φοιτητή. και να εµφανίζεται η βαθµολογία του σε κάθε µάθηµα. ηµιουργούµε την αποθηκευµένη διαδικασία: CREATE PROCEDURE bathmoi ( IDN INTEGER) RETURNS ( mathimata INTEGER, bathmoi INTEGER) FOR SELECT code,grade FROM grades where ID=:idn INTO :mathimata, :bathmoi DO SUSPEND; End Επεξήγηση: ηµιουργούµε µια stored procedure µε το όνοµα bathmoi, µεταβλητή εισόδου IDN ακέραιος και µεταβλητές που επιστρέφονται από την διαδικασία οιι mathimata, bathmoi που είναι ακέραιες και οι δύο. 7

Κύριο σώµα Εντολή SELECT που επαναλαµβάνεται και επιλέγει τον κωδικό του µαθήµατος και τον βαθµό αντίστοιχα από τον πίνακα µε τις βαθµολογίες για συγκεκριµένο αριθµό µητρώου και τα αποθηκεύει στις µεταβλητές mathimata, bathmoi DO (κάνει) Suspend και επιστρέφονται οι τιµές κάθε φορά που γίνεται loop. Τέλος. Εµφάνιση των βαθµών σε µια συµβολοσειρά CREATE PROCEDURE BATH ( QW VARCHAR(40), ER VARCHAR(40)) RETURNS ( LINE VARCHAR(1000)) DECLARE VARIABLE ONE_LINE SMALLINT; DECLARE VARIABLE STOP_ME SMALLINT; LINE=''; STOP_ME=1; FOR EXECUTE statement 'SELECT ' QW ' FROM ' ER INTO:ONE_LINE DO BEGIN IF(STOP_ME>2) THEN SUSPEND; EXIT; IF(ONE_LINE IS NOT NULL) THEN LINE=LINE ONE_LINE ''; STOP_ME=STOP_ME+1; END suspend; end Επεξήγηση: ηµιουργούµε διαδικασία µε το όνοµα BATH.και δηλώνουµε ως µεταβλητές εισόδου τις QW και ER που είναι συµβολοσειρές µεταβλητού µήκους 40 χαρακτήρων. Η διαδικασία επιστρέφει την µεταβλητή LINE που είναι συµβολοσειρά µεταβλητού µήκους 1000 χαρακτήρων. ηλώνουµε τις µεταβλητές ONE_LINE και STOP_ME σαν µικρός ακέραιος. 8

Κύριο σώµα Θέτουµε αρχικές τιµές στο LINE την κενή συµβολοσειρά και στην STOP_ME το 1. Αρχίζει ένας βρόγχος που επαναλαµβάνει την εντολή SELECT και αποθηκεύει αυτό που βρίσκει στην µεταβλητή ONE_LINE. Επαναλαµβάνεται η διαδικασία: Έλεγχος αν η τιµή της STOP_ME είναι µεγαλύτερη της 2, τότε Επιστρέφει τα αποτελέσµατα και σταµατάει την διαδικασία. Αν η µεταβλητή ONE_LINE δεν είναι κενή, τότε Θέτουµε την LINE ίση µε την ένωση της µεταβλητής LINE και ONE_LINE και αυξάνουµε την STOP_ME κατά ένα. Τέλος κύριου σώµατος. Επιστροφή αποτελεσµάτων. Τέλος. 9