Βάσεις Δεδομένων ΙΙ Ενότητα 6: Τεχνολογία PL/SQL - cursors Χ. Σκουρλάς

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Τέλος Ενότητας.
Advertisements

Βασικές αρχές ευρετηρίασης
Η ανοσοαποτύπωση ως επιβεβαιωτική μέθοδος
Τριφασικά συμμετρικά δίκτυα σε συνδεσμολογία Υ (1/2)
Αυτοματοποιημένη ευρετηρίαση
Διαμόρφωση πεδίων Περιγραφικά πεδία Διαχειριστικά πεδία Δομικά πεδία.
Διάνοιξη πόρων Με ακτινοβολούμενη θερμότητα. Θερμαινόμενα σίδερα.
Έλεγχος Ροής με την Εντολή Επανάληψης FOR 1/9
Καμπυλότητα Φακού P c
Βάσεις Δεδομένων II (Θ) Ενότητα 6: Τεχνολογία PL/SQL - cursors Χ. Σκουρλάς Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας Το.
Σχεδίαση Ολοκληρωμένων Κυκλωμάτων
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αρδευτική Μηχανική Εργαστήριο 3: Τεχνολογία Διανεμητών Μικροάρδευσης Καθηγητής Παναγιώτης Βύρλας Σχολή Τεχνολόγων.
Τεχνολογία οφθαλμικών φακών Ι (Ε) Ενότητα 5: Έγχρωμοι φακοί Θεμιστοκλής Γιαλελής, Οπτικός, MSc, PhD candidate ΕΔΙΠ του τμήματος Οπτικής και Οπτομετρίας.
Eιδικά θέματα βάσεων χωρικών δεδομένων και θεωρία συστημάτων
Κανόνες Ασφαλείας Εργοταξίων
ΟΙΚΟΝΟΜΙΚΑ ΤΟΥ ΕΛΕΓΧΟΥ ΤΗΣ ΡΥΠΑΝΣΗΣ
Άλλες μορφές νευρώσεων
Διαχείριση παραγωγής εντύπων 1/2
Επικοινωνιακός Προγραμματισμός Ι
Άσκηση 8 (1 από 3) Προβολές 1. Να επιλέξετε ένα θέμα βασισμένο σε κάποια παράγραφο / υποπαράγραφο του κεφαλαίου 6 των σημειώσεων και να κάνετε μια εργασία.
Τεχνολογία οφθαλμικών φακών Ι (Ε)
Υπολογιστική Γεωμετρία και Εφαρμογές στις ΒΧΔ
Παρουσίαση ναυπηγικών γραμμών 1/3
Φιλοσοφία της Ιστορίας και του Πολιτισμού
Ταυτότητα και περίγραμμα μαθήματος
Δίκτυα Υπολογιστών ΙΙ (Ε)
Άσκηση 7 (1 από 5) Υπολογισμοί μηκών τόξων σφαίρας. Το έτος 2035 μ.Χ., μετά από πυρηνική καταστροφή και λόγω του φαινομένου του θερμοκηπίου, που πήρε εκρηκτικές.
ΠΡΟΤΥΠΟ ΕΛΟΤ EN ISO 3251 Ζύγιση μάζας υγρού μελανιού (m1 g)
Φυσικοθεραπεία σε ειδικές πληθυσμιακές μονάδες (Ε)
Ενότητα 13 Αξιολόγηση μαθήματος και διδάσκοντος από την εφαρμογή της Μονάδας Ολικής Ποιότητας (ΜΟΔΙΠ) του ΤΕΙ Αθήνας Αξιολόγηση του μαθήματος Αξιολόγηση.
Περιγραφή Ενότητας Σκοπός του μαθήματος είναι η παρουσίαση δηλώσεων SQL που περιλαμβάνουν EXIST, ANY, ALL. Χ. Σκουρλάς.
Άσκηση 9 (1 από 2) Ανακαλύψτε στο χάρτη σας μερικά χαρτογραφικά αντικείμενα που να ανήκουν στις παρακάτω κατηγορίες : φυσικά, τεχνητές κατασκευές, αφηρημένα.
Φιλοσοφία της Ιστορίας και του Πολιτισμού
Ο Πλάτων και ο Αριστοτέλης για την ψυχή
ΕΦΑΡΜΟΣΜΕΝΗ ΗΘΙΚΗ Ενότητα 9 (PART A): Σχέση Ηθικής και Δικαιοσύνης
Τοπολογικές σχέσεις 1/3 Βρείτε και περιγράψτε τις τοπολογικές σχέσεις σύμφωνα με τους (Pantazis, Donnay 1996) για τα παρακάτω γεω-γραφικά αντικείμενα:
Επιλογή φλέβας για λήψη φλεβικού αίματος 1/7
Επικοινωνιακός Προγραμματισμός Ι
Εικαστικές συνθέσεις - Χρώμα στο χώρο
Γενική και Μαθηματική Χαρτογραφία (Ε)
Οργάνωση και Διοίκηση Πρωτοβάθμιας (Θ)
Εισαγωγή στις εικαστικές τέχνες
Λιθογραφία – Όφσετ (Θ) Ενότητα 8.2: Εκτυπωτική Διαδικασία Μηχανής
Επικοινωνιακός Προγραμματισμός Ι
Ενότητα 9: Συστήματα Υγείας στην Ευρώπη: Σουηδία
Διδακτική της Πληροφορικής
Τηλεοπτική και Ραδιοφωνική Παραγωγή
Αισθητική Σώματος Ι (Ε)
Αισθητική Σώματος Ι (Ε)
Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας
Ειδικά θέματα βάσεων χωρικών δεδομένων και θεωρία συστημάτων -E
Γενική και Μαθηματική Χαρτογραφία (Ε)
Αισθητική Σώματος Ι (Ε)
Μυθος και Τελετουργία στην Αρχαία Ελλάδα
Το Εικονογραφημένο Βιβλίο στην Προσχολική Εκπαίδευση
Ενότητα 8: Συστήματα Υγείας στην Ευρώπη: Γαλλία
Βασικές κλινικές δεξιότητες (Ε)
Eιδικά θέματα βάσεων χωρικών δεδομένων και θεωρία συστημάτων -Θ
Συστήματα Θεματικής Πρόσβασης (Θ)
Ψυχιατρική Ενότητα 7: Συνέχεια σταδίων
Γενικὴ Ἐκκλησιαστικὴ Ἱστορία Α´
Κοσμητολογία ΙΙ (Θ) Ενότητα 3: Kρέμες (γ’ μέρος)
Ανοσολογία (Ε) Ενότητα 3: Αιμοσυγκόλληση Πέτρος Καρκαλούσος
Γενική και Μαθηματική Χαρτογραφία (Ε)
Οργανική Χημεία (Ε) Ενότητα 2: Προσδιορισμός σημείου τήξης
Ενότητα 1: ……………….. Όνομα Επώνυμο Τμήμα __
Αισθητική ηλεκτροθεραπεία σώματος
Ενότητα 6: Δονήσεις Γεωργία Πέττα Τμήμα Φυσικοθεραπείας
Αισθητική ηλεκτροθεραπεία σώματος
Επικοινωνιακός Προγραμματισμός Ι
Μεταγράφημα παρουσίασης:

Βάσεις Δεδομένων ΙΙ Ενότητα 6: Τεχνολογία PL/SQL - cursors Χ. Σκουρλάς Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας Βάσεις Δεδομένων ΙΙ Ενότητα 6: Τεχνολογία PL/SQL - cursors Χ. Σκουρλάς Τμήμα Μηχανικών Πληροφορικής ΤΕ Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

Τεχνολογία PL/SQL - cursors Στόχος / Σκοπός: Να βοηθήσει τους σπουδαστές να μάθουν να κατασκευάζουν και να χρησιμοποιούν cursors σε περιβάλλον PL/SQL σύμφωνα με τις ανάγκες των εφαρμογών βάσεων δεδομένων.

Παράδειγμα προγράμματος που χρησιμοποιεί Cursor Το πρόγραμμα βρίσκει όλους τους υπαλλήλους με μηνιαία αμοιβή μεγαλύτερη των 2000 ευρώ και ενημερώνει σχετικά τον πίνακα scoTop. Δημιουργούμε τον πίνακα της βάσης. CREATE TABLE scoEMP(EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2), PRIMARY KEY(EMPNO)); Εισάγουμε τα στοιχεία του πίνακα. Για να λειτουργήσει το πρόγραμμά μας πρέπει αρχικά να δημιουργήσουμε τον πίνακα scoTop: CREATE TABLE scoTop(msg VARCHAR2(20), sal NUMBER(6), ename CHAR(10));

SELECT * FROM scoEMP EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7369 SMITH CLERK 7902 17/12/80 800 - 20 7499 ALLEN SALESMAN 7698 20/02/81 1600 300 30 7521 WARD 22/02/81 1250 500 7566 JONES MANAGER 7839 02/04/81 2975 7654 MARTIN 28/10/81 1400 BLAKE 01/05/81 2850 7782 CLARK 09/06/81 2450 10 7788 SCOTT ANALYST 19/04/87 3000 KING PRESIDENT 17/11/81 5000 7844 TURNER 08/10/81 1500 7876 ADAMS 23/05/87 1100 7900 JAMES 03/12/81 950 FORD 7934 MILLER 23/01/82 1300 7999 BATES 23/01/04 15 rows selected. 0,12 seconds

Πρόγραμμα με cursor DECLARE CURSOR scoCursor IS SELECT sal, ename FROM scoEmp; scoRec scoCursor%ROWTYPE; BEGIN OPEN scoCursor; LOOP FETCH scoCursor INTO scoRec; EXIT WHEN Scocursor%NOTFOUND; IF scoRec.sal > 2000 THEN INSERT INTO SCOTop VALUES(’σύνολο=’, scoRec.sal, scoRec.ename) END IF; END LOOP; CLOSE scoCursor; END;

Πρόγραμμα με cursor MSG SAL ΕΝΑΜΕ σύνολο= 2975 JONES σύνολο= 2850 BLAKE σύνολο= 2450 CLARK σύνολο= 3000 SCOTT σύνολο= 5000 KING FORD DECLARE CURSOR scoCursor IS SELECT sal, ename FROM scoEmp; scoRec scoCursor%ROWTYPE; BEGIN OPEN scoCursor; LOOP FETCH scoCursor INTO scoRec; EXIT WHEN scoCursor%NOTFOUND; IF scoRec.sal > 2000 THEN INSERT INTO scoTop VALUES(*συνολο=* , scoRec.sal, scoRec.ename) END IF; END LOOP; CLOSE scoCursor; END;

Η δήλωση του cursor γίνεται με την εντολή: DECLARE CURSOR scoCursor IS SELECT sal, ename FROM scoEmp; Η δήλωση του scoRec γίνεται με την εντολή: scoRec scoCursor%ROWTYPE; Η μορφή της εγγραφής «ταιριάζει» με τον cursor αφού χρησιμοποιήσαμε τον τύπο ROWTYPE. CURSOR scoCursor IS SELECT sal, ename FROM scoEmp; scoRec scoCursor%ROWTYPE; BEGIN OPEN scoCursor; LOOP FETCH scoCursor INTO scoRec; EXIT WHEN scoCursor%NOTFOUND; IF scoRec.sal > 2000 THEN INSERT INTO scoTop VALUES(*συνολο=* , scoRec.sal, scoRec.ename) END IF; END LOOP; CLOSE scoCursor; END;

OPEN scoCursor; - Άνοιγμα Cursor Να ποιό είναι το περιεχόμενό του: (cursor) scoCursor ΕΝΑΜΕ SAL SMITH 800 ALLEN 1600 WARD 1250 JONES 2975 MARTIN BLAKE 2850 CLARK 2450 SCOTT 3000 KING 5000 TURNER 1500 ADAMS 1100 JAMES 950 FORD MILLER 1300 BATES DECLARE CURSOR scoCursor IS SELECT sal, ename FROM scoEmp; scoRec scoCursor%ROWTYPE; BEGIN OPEN scoCursor; LOOP FETCH scoCursor INTO scoRec; EXIT WHEN scoCursor%NOTFOUND; IF scoRec.sal > 2000 THEN INSERT INTO scoTop VALUES('σύνολο=', scoRec.sal, scoRec.ename) END IF; END LOOP; CLOSE scoCursor; END;

Τώρα θέλουμε να περάσουμε με τη σειρά όλες τις γραμμές αυτές στην εγγραφή ScoRec που ορίσαμε: DECLARE CURSOR scoCursor IS SELECT sal, ename FROM scoEmp; scoRec scoCursor%ROWTYPE; BEGIN OPEN scoCursor; LOOP FETCH scoCursor INTO scoRec; EXIT WHEN scoCursor%NOTFOUND; IF scoRec.sal > 2000 THEN INSERT INTO scoTop VALUES('σύνολο=', scoRec.sal, scoRec.ename) END IF; END LOOP; CLOSE scoCursor; END;

FETCH scoCursor INTO scoRec; DECLARE CURSOR scoCursor IS SELECT sal, ename FROM scoEmp; scoRec scoCursor%ROWTYPE; BEGIN OPEN scoCursor; LOOP FETCH scoCursor INTO scoRec; EXIT WHEN scoCursor%NOTFOUND; IF scoRec.sal > 2000 THEN INSERT INTO scoTop VALUES('σύνολο=', scoRec.sal, scoRec.ename) END IF; END LOOP; CLOSE scoCursor; END; ENAME SAL SMITH 800 ALLEN 1600 BATES 1300 scoRec ENAME SAL SMITH 800

DECLARE CURSOR scoCursor IS SELECT sal, ename FROM scoEmp; scoRec scoCursor%ROWTYPE; BEGIN OPEN scoCursor; LOOP FETCH scoCursor INTO scoRec; EXIT WHEN scoCursor%NOTFOUND; IF scoRec.sal > 2000 THEN INSERT INTO scoTop VALUES('σύνολο=', scoRec.sal, scoRec.ename) END IF; END LOOP; CLOSE scoCursor; END; Mε τον παρακάτω βρόγχο μπορούμε να περάσουμε όλες τις γραμμές των αποτελεσμάτων διαδοχικά στην εγγραφή: LOOP FETCH scoRec INTO scoRec; EXIT WHEN scoCursor%NOTFOUND;

DECLARE CURSOR scoCursor IS SELECT sal, ename FROM scoEmp; scoRec scoCursor%ROWTYPE; BEGIN OPEN scoCursor; LOOP FETCH scoCursor INTO scoRec; EXIT WHEN scoCursor%NOTFOUND; IF scoRec.sal > 2000 THEN INSERT INTO scoTop VALUES('σύνολο=', scoRec.sal, scoRec.ename) END IF; END LOOP; CLOSE scoCursor; END; Μέσα στον βρόγχο και για κάθε γραμμή του cursor εξετάζουμε το μισθό sal και αν είναι μεγαλύτερος των 2000 ευρώ τότε καταχωρούμε όνομα και αμοιβή υπαλλήλου στον πίνακα scoTop: IF scoRec.sal > 2000 THEN INSERT INTO scoTop VALUES(‘σύνολο=':scoRec.sal:scoRec.ename): DBMS OUTPUT.PUT_LINE(scoRec.sal ||’ ’|| scoRec.ename); END IF:

%NOTFOUND LOOP FETCH scoCursor INTO scoRec; EXIT WHEN scoCursor%NOTFOUND ; other statements eg, IF ... THEN... END IF; END LOOP; %FOUND IF scoCursor%FOUND THEN other statements ELSE EXIT; END IF;

%ROWCOUNT LOOP FETCH scoCursor INTO scoRec; IF scoCursor%ROWCOUNT <= v_num_rec -1 THEN /* where v_num_rec -1 is the number of the rows */ /* Στην ενότητα DECLARE δηλώνεται η μεταβλητή */ /* πχ. v_num_rec NUMBER(3)*/ other statements ELSE EXIT; END IF; END LOOP; WHILE condition other statements;

WHILE scoCursor%ROWCOUNT < v_num_rec -1 LOOP END LOOP; 6) v_counter := 1; FOR v_counterIN l..v_num_rec LOOP FETCH scoCursor INTO scoRec; v_counter := v_counter + 1; END LOOP; WHILE scoCursor%FOUND FETCH ...

Τέλος Ενότητας

Σημειώματα

Σημείωμα Αναφοράς Copyright Τεχνολογικό Εκπαιδευτικό Ίδρυμα Αθήνας, Χρήστος Σκουρλάς 2014. Χρήστος Σκουρλάς. «Βάσεις Δεδομένων ΙΙ. Ενότητα 6: Τεχνολογία PL/SQL - cursors». Έκδοση: 1.0. Αθήνα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: ocp.teiath.gr.

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί.

Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς το Σημείωμα Αδειοδότησης τη δήλωση Διατήρησης Σημειωμάτων το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους.

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.