Oracle PL/SQL LOOP με Παράδειγμα
Τι είναι οι βρόχοι;
Το Loops επιτρέπει σε ένα συγκεκριμένο μέρος του κώδικα σε ένα πρόγραμμα να εκτελεστεί για τον επιθυμητό αριθμό φορών.
Σε αυτό το σεμινάριο, θα δούμε την έννοια του βρόχου σε PL/SQL και τη ροή του ελέγχου σε βρόχους.
Εισαγωγή στην έννοια των βρόχων
Η έννοια των βρόχων παρέχει το ακόλουθο πλεονέκτημα στην κωδικοποίηση.
- Επαναχρησιμοποίηση κώδικα
- Μειωμένο μέγεθος κώδικα
- Εύκολη ροή ελέγχου
- Μειωμένη πολυπλοκότητα
Το παρακάτω διάγραμμα δείχνει την έννοια του βρόχου με εικονογραφικό τρόπο
Στο παραπάνω διάγραμμα, θα ελεγχθεί η συνθήκη βρόχου και εφόσον ικανοποιείται η συνθήκη βρόχου, θα εκτελεστεί το μπλοκ εκτέλεσης.
Σε κάθε επανάληψη, η μεταβλητή μετρητή βρόχου που πραγματικά αποφασίζει τη συνθήκη βρόχου θα πρέπει να τροποποιηθεί για να κάνει το στοιχείο ελέγχου να βγαίνει από τον βρόχο. Σε ορισμένες περιπτώσεις, αυτή η μεταβλητή μετρητή βρόχου είναι τελεστής αύξησης/μείωσης για μια προκαθορισμένη μέτρηση και σε ορισμένες περιπτώσεις, είναι μια συνθήκη αναζήτησης που συνεχίζει να εκτελεί το μπλοκ μέχρι να το ικανοποιήσει.
Δηλώσεις ελέγχου βρόχου
Πριν μάθετε την έννοια των βρόχων, είναι υποχρεωτικό να μάθετε για δηλώσεις ελέγχου βρόχου. Οι δηλώσεις ελέγχου βρόχου είναι αυτές που ελέγχουν πραγματικά τη ροή της εκτέλεσης μέσα στον βρόχο. Παρακάτω είναι η λεπτομερής περιγραφή σχετικά με τις δηλώσεις ελέγχου βρόχου.
ΣΥΝΕΧΕΙΑ
Αυτή η λέξη-κλειδί στέλνει μια οδηγία στη μηχανή PL/SQL ότι κάθε φορά που η μηχανή PL/SQL συναντά αυτήν τη λέξη-κλειδί μέσα στον βρόχο, τότε θα παραλείψει τον υπόλοιπο κώδικα στο μπλοκ εκτέλεσης του κώδικα και η επόμενη επανάληψη θα ξεκινήσει αμέσως. Αυτό θα χρησιμοποιηθεί κυρίως εάν ο κώδικας μέσα στον βρόχο θέλει να παραλειφθεί για ορισμένες τιμές επανάληψης.
ΕΞΟΔΟΣ / ΕΞΟΔΟΣ ΟΤΑΝ
Αυτή η λέξη-κλειδί στέλνει μια οδηγία στη μηχανή PL/SQL ότι όποτε η μηχανή PL/SQL συναντήσει αυτήν τη λέξη-κλειδί, τότε θα εξέλθει αμέσως από τον τρέχοντα βρόχο. Εάν ο κινητήρας PL/SQL συναντήσει την EXIT σε ένθετο βρόχο, τότε θα βγει από τον βρόχο στον οποίο έχει οριστεί, δηλαδή σε ένθετους βρόχους, δίνοντας EXIT στον εσωτερικό βρόχο θα βγει μόνο ο έλεγχος από τον εσωτερικό βρόχο αλλά όχι από τον εξωτερικό βρόχο. Το 'EXIT WHEN' ακολουθείται από μια έκφραση που δίνει ένα Boolean αποτέλεσμα. Εάν το αποτέλεσμα είναι TRUE, τότε το στοιχείο ελέγχου θα EXIT.
GOTO
Αυτή η δήλωση θα μεταφέρει τον έλεγχο στη δήλωση με την ετικέτα ("GOTO ;"). Αυτό έχει τους ακόλουθους περιορισμούς
- Η μεταφορά του ελέγχου μπορεί να γίνει μόνο εντός των υποπρογραμμάτων.
- Η μεταφορά του ελέγχου δεν μπορεί να γίνει από το τμήμα χειρισμού εξαιρέσεων στο τμήμα εκτέλεσης
Η χρήση αυτής της δήλωσης δεν συνιστάται εκτός εάν δεν υπάρχουν άλλες εναλλακτικές λύσεις, καθώς η ιχνηλασιμότητα του κωδικού ελέγχου θα είναι πολύ δύσκολη στο πρόγραμμα λόγω της μεταφοράς του ελέγχου από το ένα μέρος στο άλλο.
Τύποι βρόχου σε PL/SQL
PL / SQL παρέχει τους ακόλουθους τρεις τύπους βρόχων
- Βασική δήλωση βρόχου
- Για δήλωση βρόχου
- Δήλωση βρόχου while
Βασική δήλωση βρόχου
Αυτή η δήλωση βρόχου είναι η απλούστερη δομή βρόχου στο PL/SQL. Το μπλοκ εκτέλεσης ξεκινά με τη λέξη-κλειδί «LOOP» και τελειώνει με τη λέξη-κλειδί «END LOOP».
Η συνθήκη εξόδου θα πρέπει να δοθεί μέσα σε αυτό το μπλοκ εκτέλεσης, έτσι ώστε ο έλεγχος να εξέρχεται από τον βρόχο.
Χρειάζεται η λέξη-κλειδί EXIT να δοθεί ρητά στο τμήμα εκτέλεσης για έξοδο από τον βρόχο.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Επεξήγηση σύνταξης:
- Στην παραπάνω σύνταξη, η λέξη κλειδί 'LOOP' σηματοδοτεί την αρχή του βρόχου και το 'END LOOP' το τέλος του βρόχου.
- Το μπλοκ εκτέλεσης περιέχει όλο τον κώδικα που πρέπει να εκτελεστεί, συμπεριλαμβανομένης της συνθήκης EXIT.
- Το τμήμα εκτέλεσης μπορεί να περιέχει οποιαδήποτε δήλωση εκτέλεσης.
Σημείωση: Η βασική δήλωση βρόχου χωρίς λέξη-κλειδί ΕΞΟΔΟΣ θα είναι ένας ΑΠΕΙΡΟΣ ΒΡΟΧΟΣ που δεν θα σταματήσει ποτέ.
Παράδειγμα 1: Σε αυτό το παράδειγμα, πρόκειται να εκτυπώσουμε τον αριθμό από το 1 έως το 5 χρησιμοποιώντας τη βασική δήλωση βρόχου. Για αυτό, θα εκτελέσουμε τον παρακάτω κώδικα.
DECLARE a NUMBER:=1; BEGIN dbms_output.put_line('Program started.'); LOOP dbms_output.put_line(a); a:=a+1; EXIT WHEN a>5; END LOOP; dbms_output.put_line('Program completed'); END: /
Επεξήγηση κώδικα:
- Κωδικός γραμμή 2: Δήλωση της μεταβλητής 'a' ως τύπου δεδομένων 'NUMBER' και αρχικοποίηση της με τιμή '1'.
- Κωδικός γραμμή 4: Εκτύπωση της δήλωσης «Το πρόγραμμα ξεκίνησε».
- Κωδικός γραμμή 5: Η λέξη-κλειδί 'LOOP' σηματοδοτεί την αρχή του βρόχου.
- Κωδικός γραμμή 6: Εκτυπώνει την τιμή του 'a'.
- Κωδικός γραμμή 7: Αυξάνει την τιμή του 'a' κατά +1.
- Κωδικός γραμμή 8: Ελέγχει εάν η τιμή του 'a' είναι μεγαλύτερη από 5.
- Κωδικός γραμμή 9: Η λέξη-κλειδί 'END LOOP' σηματοδοτεί το τέλος του μπλοκ εκτέλεσης.
- Ο κώδικας από τη γραμμή 6 έως τη γραμμή 8 θα συνεχίσει να εκτελείται έως ότου το 'a' φτάσει την τιμή 6, καθώς η συνθήκη θα επιστρέψει TRUE και το στοιχείο ελέγχου θα EXIT από τον βρόχο.
- Κωδικός γραμμή 10: Εκτύπωση της δήλωσης «Το πρόγραμμα ολοκληρώθηκε»
Επισήμανση βρόχων
Στο PL/SQL, οι βρόχοι μπορούν να επισημανθούν. Η ετικέτα πρέπει να περικλείεται μεταξύ "<<" και ">>". Η επισήμανση των βρόχων, ιδιαίτερα σε ένθετους κώδικες βρόχου θα δώσει μεγαλύτερη αναγνωσιμότητα. Η ετικέτα μπορεί να δοθεί στην εντολή EXIT για έξοδο από τον συγκεκριμένο βρόχο. Χρησιμοποιώντας ετικέτα, ο έλεγχος μπορεί να γίνει για την απευθείας έξοδο από τον εξωτερικό βρόχο των ένθετων βρόχων από οπουδήποτε μέσα στους βρόχους, δίνοντας την εντολή εξόδου ακολουθούμενη από ετικέτα εξωτερικού βρόχου.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <executi_block_ends> END LOOP;
Επεξήγηση σύνταξης:
- Στην παραπάνω σύνταξη, ο βρόχος έξω έχει έναν ακόμη βρόχο μέσα του.
- Το «< >' και '< >' είναι οι ετικέτες αυτών των βρόχων.
Παράδειγμα 1: Σε αυτό το παράδειγμα, πρόκειται να εκτυπώσουμε τον αριθμό που ξεκινά από το 1 χρησιμοποιώντας τη δήλωση Βασικού βρόχου. Κάθε αριθμός θα εκτυπωθεί τόσες φορές όση η τιμή του. Το ανώτατο όριο της σειράς καθορίζεται στο τμήμα δήλωσης προγράμματος. Ας μάθουμε πώς μπορούμε να χρησιμοποιήσουμε την έννοια της ετικέτας για να το πετύχουμε αυτό. Για αυτό, θα εκτελέσουμε τον παρακάτω κώδικα
DECLARE a NUMBER:=0; b NUMBER; upper-limit NUMBER :=4; BEGIN dbms_output.put_line(‘Program started.' ); «outerloop» LOOP a:=a+1; b:=l; «inner loop» LOOP EXIT outer_loop WHEN a > upper_limit; dbms_output.put_line(a); b:=b+l; EXIT inner_loop WHEN b>a; END LOOP; END LOOP; dbms_output.put_line('Program completed.'); END; /
Επεξήγηση κώδικα:
- Κωδικός γραμμή 2-3: Δήλωση της μεταβλητής 'a' και 'b' ως τύπου δεδομένων 'NUMBER'.
- Κωδικός γραμμή 4: Δήλωση της μεταβλητής 'upper_limit' ως τύπου δεδομένων 'NUMBER' με τιμή '4'
- Κωδικός γραμμή 6: Εκτύπωση της δήλωσης «Το πρόγραμμα ξεκίνησε».
- Κωδικός γραμμή 7: Ο εξωτερικός βρόχος έχει επισημανθεί ως "outer_loop"
- Κωδικός γραμμή 9: Η τιμή του 'a' αυξάνεται κατά 1.
- Κωδικός γραμμή 11: Ο εσωτερικός βρόχος έχει χαρακτηριστεί ως "inner_loop".
- Κωδικός γραμμή 13: Συνθήκη EXIT που ελέγχει εάν η τιμή "a" είναι υψηλότερη από την τιμή "upper_limit". Αν όχι, τότε θα πάει πιο μακριά, αλλιώς βγαίνει απευθείας από τον εξωτερικό βρόχο.
- Κωδικός γραμμή 14: Εκτύπωση της τιμής του 'b'.
- Κωδικός γραμμή 15: Αυξάνει την τιμή του 'b' κατά +1.
- Κωδικός γραμμή 16: Συνθήκη EXIT που ελέγχει εάν η τιμή του 'b' είναι μεγαλύτερη από το 'a'. Αν ναι, τότε θα βγει από τον έλεγχο από τον εσωτερικό βρόχο.
- Κωδικός γραμμή 14: Εκτύπωση της δήλωσης «Το πρόγραμμα ολοκληρώθηκε»
Σύνοψη
Βρόχος | Βασικός βρόχος |
Κριτήρια ΕΞΟΔΟΥ | Έξοδος όταν συναντήσετε τη λέξη-κλειδί 'EXIT' στο τμήμα εκτέλεσης |
Χρήση | Καλό για χρήση όταν η έξοδος δεν βασίζεται σε κάποια συγκεκριμένη συνθήκη. |