Oracle PL/SQL IF THEN ELSE Δήλωση: ELSIF, NESTED-IF
Τι είναι οι δηλώσεις λήψης αποφάσεων;
Οι δηλώσεις λήψης αποφάσεων είναι αυτές που θα αποφασίσουν τον έλεγχο ροής του SQL δηλώσεις με βάση τις προϋποθέσεις. Παρέχει στον προγραμματιστή καλύτερο έλεγχο για την αποτροπή της εκτέλεσης ενός συγκεκριμένου κώδικα (διάγραμμα 1) ή την επιλογή ενός επιθυμητού κώδικα βάσει της συνθήκης (διάγραμμα 2). Παρακάτω είναι η εικονογραφική αναπαράσταση της «Δήλωσης Λήψης Απόφασης».

Τύποι δηλώσεων λήψης αποφάσεων:
Oracle παρέχει τους ακόλουθους τύπους δηλώσεων λήψης αποφάσεων.
- ΕΑΝ
- ΑΝ-ΤΟΤΕ-ΑΛΛΟ
- ΑΝ-ΤΟΤΕ-ELSIF
- NESTED-IF
- ΜΕΛΕΤΕΣ ΠΕΡΙΠΤΩΣΗΣ
- ΑΝΑΖΗΤΗΣΗ ΥΠΟΘΕΣΗ
Δήλωση ΑΝ-ΤΟΤΕ
Η πρόταση IF-THEN χρησιμοποιείται κυρίως για την εκτέλεση μιας συγκεκριμένης ενότητας κωδικών μόνο όταν η συνθήκη ικανοποιείται.
Η συνθήκη πρέπει να υποχωρήσει Boolean (Σωστό/Λάθος). Είναι μια βασική δήλωση υπό όρους που θα επιτρέψει στο ORACLE να εκτελέσει/παρακάμψει ένα συγκεκριμένο κομμάτι κώδικα με βάση τις προκαθορισμένες συνθήκες.
Σύνταξη για δηλώσεις IF THEN:
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_block> END if;
- Στην παραπάνω σύνταξη, η λέξη-κλειδί "ΑΝ" θα ακολουθείται από μια συνθήκη που θα αξιολογηθεί σε "TRUE"/"FALSE".
- Ο έλεγχος θα εκτελέσει το μόνο αν επιστρέψει η συνθήκη .
- Στην περίπτωση της συνθήκης αξιολογείται σε τότε, η SQL θα παρακάμψει το , και θα ξεκινήσει να εκτελεί τον κώδικα δίπλα στο μπλοκ "END IF".
Σημείωση: Κάθε φορά που η συνθήκη αξιολογείται σε "NULL", τότε η SQL θα αντιμετωπίζει το "NULL" ως "FALSE".
Παράδειγμα 1: Σε αυτό το παράδειγμα, πρόκειται να εκτυπώσουμε ένα μήνυμα όταν ο αριθμός είναι μεγαλύτερος από 100. Για αυτό, θα εκτελέσουμε τον ακόλουθο κώδικα
Για να εκτυπώσετε ένα μήνυμα όταν ένας αριθμός έχει τιμή μεγαλύτερη από 100, εκτελούμε τον παρακάτω κώδικα.
DECLARE
a NUMBER :=10;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > 100 ) THEN
dbms_output.put_line('a is greater than 100');
END IF;
dbms_output.put_line(‘Program completed.');
END;
/
Επεξήγηση κώδικα:
- Γραμμή κώδικα 2: Δήλωση της μεταβλητής 'a' ως τύπου δεδομένων 'NUMBER' και αρχικοποίηση της με τιμή '10'.
- Γραμμή κώδικα 4: Εκτύπωση της δήλωσης «Το πρόγραμμα ξεκίνησε».
- Γραμμή κώδικα 5: Έλεγχος της συνθήκης, εάν η μεταβλητή 'a' είναι μεγαλύτερη από '100'.
- Κωδικός γραμμής 6: Εάν το 'a' είναι μεγαλύτερο από '100', τότε θα εκτυπωθεί το "a είναι μεγαλύτερο από 100". Εάν το 'a' είναι μικρότερο ή ίσο με 100, τότε η συνθήκη αποτυγχάνει, επομένως η παραπάνω δήλωση εκτύπωσης αγνοείται.
- Κωδικός γραμμής 8: Εκτύπωση της δήλωσης «Το πρόγραμμα ολοκληρώθηκε».
Έξοδος κώδικα:
Program started. Program completed.
Παράδειγμα 2: Σε αυτό το παράδειγμα, πρόκειται να εκτυπώσουμε ένα μήνυμα εάν ένα δεδομένο αλφάβητο υπάρχει στα αγγλικά φωνήεντα (A, E, I, O, U).
Για να εκτυπώσετε ένα μήνυμα όταν ο χαρακτήρας που δίνεται είναι Vowel, εκτελούμε τον παρακάτω κώδικα.
DECLARE
a CHAR(1) :=’u’;
BEGIN
IF UPPER(a) in ('A’,'E','I','0','U' ) THEN
dbms_output.put_line(‘The character is in English Vowels');
END IF;
END;
/
Επεξήγηση κώδικα:
- Κωδικός γραμμή 2: Δήλωση της μεταβλητής 'a' ως 'CHAR' τύπου δεδομένων μεγέθους '1' και αρχικοποίησή της με την τιμή 'u'.
- Κωδικός γραμμή 4: Έλεγχος της συνθήκης, εάν η μεταβλητή 'a' υπάρχει στη λίστα ('A','E','I','O','U').
- Η τιμή του 'a' έχει μετατραπεί σε κεφαλαία πριν από τη σύγκριση για να γίνει η σύγκριση χωρίς διάκριση πεζών-κεφαλαίων.
- Κωδικός γραμμή 5: Εάν το 'a' υπάρχει στη λίστα, τότε θα εκτυπωθεί η δήλωση "Ο χαρακτήρας είναι στα αγγλικά φωνήεντα". Εάν η συνθήκη αποτύχει, τότε αυτό το πρόγραμμα δεν θα δώσει καμία έξοδο, καθώς εκτός του μπλοκ IF-THEN δεν έχουμε εκδώσει καμία δήλωση εκτύπωσης.
Έξοδος κώδικα:
The character is in English Vowels
Δήλωση ΑΝ-ΤΟΤΕ-ΑΛΛΟ
- Η πρόταση IF-THEN-ELSE χρησιμοποιείται κυρίως για την επιλογή μεταξύ δύο εναλλακτικών με βάση τη συνθήκη.
- Παρακάτω είναι η συντακτική αναπαράσταση της πρότασης IF-THEN-ELSE.
Σύνταξη για δηλώσεις IF-THEN-ALSE:
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_blockl> ELSE -execute if the condition failed (returns FALSE) <action_block2> END if;
- Στην παραπάνω σύνταξη, η λέξη-κλειδί "ΑΝ" θα ακολουθείται από μια συνθήκη που θα αξιολογηθεί σε "TRUE"/"FALSE".
- Ο έλεγχος θα εκτελέσει το μόνο αν επιστρέψει η συνθήκη .
- Σε περίπτωση κατάστασης αξιολογείται σε τότε θα εκτελεστεί η SQL .
- Σε κάθε περίπτωση, θα εκτελεστεί ένα από τα δύο μπλοκ ενεργειών.
Σημείωση: Κάθε φορά που η συνθήκη αξιολογείται σε 'NULL', τότε η SQL θα αντιμετωπίζει το 'NULL' ως 'FALSE'.
Παράδειγμα 1: Σε αυτό το παράδειγμα, πρόκειται να εκτυπώσουμε μήνυμα εάν ο δεδομένος αριθμός είναι μονός ή ζυγός.
DECLARE
a NUMBER:=11;
BEGIN
dbms_output.put_line (‘Program started');
IF( mod(a,2)=0) THEN
dbms_output.put_line('a is even number' );
ELSE
dbms_output.put_line('a is odd number1);
END IF;
dbms_output.put_line (‘Program completed.’);
END;
/
Επεξήγηση κώδικα:
- Γραμμή κώδικα 2: Δήλωση της μεταβλητής 'a' ως τύπου δεδομένων 'NUMBER' και αρχικοποίηση της με τιμή '11'.
- Γραμμή κώδικα 4: Εκτύπωση της δήλωσης «Το πρόγραμμα ξεκίνησε».
- Γραμμή κώδικα 5: Έλεγχος της συνθήκης, εάν το μέτρο της μεταβλητής 'a' κατά '2' είναι 0.
- Κωδικός γραμμής 6: Εάν '0', τότε θα εκτυπωθεί το "a είναι ζυγός αριθμός".
- Γραμμή κώδικα 7: Εάν η τιμή του συντελεστή δεν είναι ίση με '0', τότε η συνθήκη επιστρέφει , έτσι θα εκτυπωθεί το μήνυμα "a είναι μονός αριθμός".
- Κωδικός γραμμής 10: Εκτύπωση της δήλωσης "Το πρόγραμμα ολοκληρώθηκε"
Έξοδος κώδικα:
Program started. a is odd number Program completed.
Δήλωση IF-THEN-ELSIF
- Η δήλωση IF-THEN-ELSIF χρησιμοποιείται κυρίως όταν πρέπει να επιλεγεί μία εναλλακτική από ένα σύνολο εναλλακτικών, όπου κάθε εναλλακτική έχει τις δικές της προϋποθέσεις που πρέπει να πληρούνται.
- Οι πρώτες προϋποθέσεις που επιστρέφουν θα εκτελεστεί και οι υπόλοιπες συνθήκες θα παραβλεφθούν.
- Η δήλωση IF-THEN-ELSIF μπορεί να περιέχει το μπλοκ "ALSE" σε αυτήν. Αυτό το μπλοκ "ELSE" θα εκτελεστεί εάν καμία από τις προϋποθέσεις δεν πληρούται.
Σημείωση: Το μπλοκ ELSE είναι προαιρετικό σε αυτήν την υπό όρους δήλωση. Εάν δεν υπάρχει μπλοκ ELSE και δεν ικανοποιείται καμία από τις προϋποθέσεις, τότε ο ελεγκτής θα παρακάμψει όλο το μπλοκ ενεργειών και θα ξεκινήσει να εκτελεί το υπόλοιπο τμήμα του κώδικα.
Σύνταξη για δηλώσεις IF-THEN-ELSIF:
IF <conditionl: returns Boolean> THEN -executed only if the condition returns TRUE < action_blockl> ELSIF <condition2 returns Boolean> < action_block2> ELSIF <condition3:returns Boolean> < action_block3> ELSE —optional <action_block_else> END if;
- Στην παραπάνω σύνταξη, το στοιχείο ελέγχου θα εκτελέσει το μόνο αν επιστρέψει η συνθήκη 1 .
- Εάν η συνθήκη 1 δεν ικανοποιείται, τότε ο ελεγκτής θα ελέγξει για τη συνθήκη 2.
- Ο ελεγκτής θα εξέλθει από τη δήλωση IF στις ακόλουθες δύο περιπτώσεις.
- Όταν ο ελεγκτής βρήκε οποιαδήποτε συνθήκη που επιστρέφει . Σε αυτήν την περίπτωση, το αντίστοιχο action_block θα εκτελεστεί και ο ελεγκτής θα βγει από αυτό το μπλοκ δήλωσης IF και θα ξεκινήσει να εκτελεί τον υπόλοιπο κώδικα.
- Όταν δεν ικανοποιείται καμία από τις προϋποθέσεις, ο τότε ελεγκτής θα εκτελέσει το μπλοκ ELSE εάν υπάρχει και, στη συνέχεια, θα εξέλθει από τη δήλωση IF.
Σημείωση: Κάθε φορά που η συνθήκη αξιολογείται σε 'NULL', τότε η SQL θα αντιμετωπίζει το 'NULL' ως 'FALSE'.
Παράδειγμα 1: Χωρίς μπλοκ ΑΛΛΟ
Σε αυτό το παράδειγμα, θα εκτυπώσουμε τον βαθμό με βάση τους δοσμένους βαθμούς χωρίς συνθήκη αλλού (σημαδέψτε >= 70 Βαθμός Α, σημειώστε >=40 και σημειώστε<70 Βαθμός Β, βαθμολογήστε >=35 και σημειώστε<40 Βαθμός Γ).
DECLARE mark NUMBER :=55; BEGIN dbms_output.put_line(‘Program started.’ ); IF( mark >= 70) THEN dbms_output.put_line(‘Grade A’); ELSIF(mark >= 40 AND mark < 70) THEN dbms_output.put_line(‘Grade B'); ELSIF(mark >=35 AND mark < 40) THEN dbms_output.put_line(‘Grade C’); END IF; dbms_output.put_line(‘Program completed.’); END; /
Επεξήγηση κώδικα:
- Γραμμή κώδικα 2: Δήλωση της μεταβλητής 'mark' ως τύπου δεδομένων 'NUMBER' και αρχικοποίηση της με τιμή '55'.
- Γραμμή κώδικα 4: Εκτύπωση της δήλωσης «Το πρόγραμμα ξεκίνησε».
- Γραμμή κωδικού 5: Έλεγχος της συνθήκης 1, εάν το 'σημάδι' είναι μεγαλύτερο ή ίσο με 70.
- Γραμμή κώδικα 7: Εφόσον η συνθήκη1 απέτυχε, τότε ελέγχεται η συνθήκη2 '70>σημάδι>=40′.
- Γραμμή κώδικα 8: Επιστρέφει η συνθήκη2 , επομένως θα εκτυπωθεί το μήνυμα 'Βαθμός Β'.
- Κωδικός γραμμής 12: Εκτύπωση της δήλωσης «Το πρόγραμμα ολοκληρώθηκε».
- Σε αυτήν την περίπτωση, η συνθήκη 3 «σήμανση < 35» θα παραλειφθεί, καθώς ο ελεγκτής βρήκε μία συνθήκη που επιστρέφει πριν από την προϋπόθεση 3.
Έξοδος κώδικα:
Program started. Grade B Program completed.
Παράδειγμα 2: Με μπλοκ ALSE
Σε αυτό το παράδειγμα, πρόκειται να εκτυπώσουμε τον βαθμό με βάση τους βαθμούς που δίνονται με την συνθήκη else (σημαδέψτε >= 70 Βαθμός Α, σημειώστε >=40 και σημειώστε<70 Βαθμός Β, βαθμολογήστε >=35 και σημειώστε<40 Βαθμός Γ, αλλιώς «Χωρίς βαθμό»).
DECLARE mark NUMBER :=25; BEGIN dbms_output.put_line(‘Program started.’ ); IF( mark >= 70) THEN dbms_output.put_line(‘Grade A’); ELSIF(mark >= 40 AND mark < 70) THEN dbms_output.put_line(‘Grade B'); ELSIF(mark >=35 AND mark < 40) THEN dbms_output.put_line(‘Grade C); ELSE dbms_output.put_line(‘No Grade’); END IF; dbms_output.put_line(‘Program completed.' ); END; /
Επεξήγηση κώδικα:
- Γραμμή κώδικα 2: Δήλωση της μεταβλητής 'mark' ως τύπου δεδομένων 'NUMBER' και αρχικοποίηση της με τιμή '25'.
- Γραμμή κώδικα 4: Εκτύπωση της δήλωσης «Το πρόγραμμα ξεκίνησε».
- Κωδικός γραμμής 5: Έλεγχος της συνθήκης 1, εάν το 'σημάδι' είναι μεγαλύτερο ή ίσο με 70.
- Γραμμή κώδικα 7: Εφόσον η συνθήκη1 απέτυχε, τότε ελέγχεται η συνθήκη2 '70>σημάδι>=40′.
- Γραμμή κώδικα 8: Εφόσον η συνθήκη2 απέτυχε, τότε ελέγχεται η συνθήκη3 '40>σημάδι>=35′.
- Γραμμή κώδικα 11: Εφόσον όλες οι συνθήκες απέτυχαν, ο έλεγχος θα ελέγξει τώρα για την παρουσία του μπλοκ ELSE και θα εκτυπώσει το μήνυμα 'No Grade' από το μπλοκ ELSE.
- Κωδικός γραμμής 14: Εκτύπωση της δήλωσης «Το πρόγραμμα ολοκληρώθηκε».
Έξοδος κώδικα:
Program started. No Grade Program completed.
Δήλωση NESTED-IF
- Η δήλωση NESTED-IF επιτρέπει βασικά στους προγραμματιστές να τοποθετήσουν μία ή περισσότερες συνθήκες 'IF' μέσα σε μια άλλη συνθήκη 'IF' εκτός από τις κανονικές δηλώσεις.
- Κάθε συνθήκη «IF» θα πρέπει να έχει μια ξεχωριστή δήλωση «END IF» που σηματοδοτεί το τέλος του εύρους αυτής της συγκεκριμένης .
- Η δήλωση "IF" θα θεωρήσει την πλησιέστερη δήλωση "END IF" ως τελικό σημείο για τη συγκεκριμένη συνθήκη.
- Η εικονογραφική αναπαράσταση για το NESTED-IF φαίνεται παρακάτω στο διάγραμμα.
IF <conditionl: returns Boolean> THEN —executed only if the condition returns TRUE <action block1 starts> IF <condition2: returns Boolean> THEN <action_block2> END IF; —END IF corresponds to condition2 <action_blockl ends> END IF; —END IF corresponds to condition1
Επεξήγηση σύνταξης:
- Στην παραπάνω σύνταξη, το εξωτερικό IF περιέχει μια ακόμη δήλωση IF στο μπλοκ ενεργειών του.
- Η συνθήκη 1 επιστρέφει , τότε ο έλεγχος θα εκτελεστεί και ελέγχει την κατάσταση1.
- Εάν επιστρέψει και η συνθήκη 2 , έπειτα θα εκτελεστεί επίσης.
- Σε περίπτωση συνθήκης2 αξιολογείται σε τότε, η SQL θα παρακάμψει το .
Εδώ θα δούμε ένα παράδειγμα Nested If –
Παράδειγμα Ένθετης-Αν πρόταση: Μέγιστος αριθμός τριών
Σε αυτό το παράδειγμα, πρόκειται να εκτυπώσουμε τον μεγαλύτερο από τους τρεις αριθμούς χρησιμοποιώντας την εντολή Nested-If. Οι αριθμοί θα εκχωρηθούν στο τμήμα δήλωσης, όπως μπορείτε να δείτε στον παρακάτω κωδικό, π.χ. Number= 10,15 και 20 και ο μέγιστος αριθμός θα ληφθεί χρησιμοποιώντας ένθετες δηλώσεις εάν.
DECLARE
a NUMBER :=10;
b NUMBER :=15;
c NUMBER :=20;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > b)THEN
/*Nested-if l */
dbms_output.put_line(’Checking Nested-IF 1');
IF( a > c ) THEN
dbms_output.put_line(‘A is greatest’);
ELSE
dbms_output.put_line(‘C is greatest’);
END IF;
ELSE
/*Nested-if2 */
dbms_output.put_line('Checking Nested-IF 2' );
IF( b > c ) THEN
dbms_output.put_line(’B is greatest' );
ELSE
dbms_output.put_line(’C is greatest' );
END IF;
END IF;
dbms_output.put_line(‘Program completed.’ );
END;
/
Επεξήγηση κώδικα:
- Γραμμή κώδικα 2: Δήλωση της μεταβλητής 'a' ως τύπου δεδομένων 'NUMBER' και αρχικοποίηση της με τιμή '10'.
- Γραμμή κώδικα 3: Δήλωση της μεταβλητής 'b' ως τύπου δεδομένων 'NUMBER' και αρχικοποίηση της με τιμή '15'.
- Γραμμή κώδικα 4: Δήλωση της μεταβλητής 'c' ως τύπου δεδομένων 'NUMBER' και αρχικοποίηση της με τιμή '20'.
- Κωδικός γραμμής 6: Εκτύπωση της δήλωσης «Το πρόγραμμα ξεκίνησε» (γραμμή 6).
- Γραμμή κώδικα 7: Έλεγχος της συνθήκης 1, εάν το 'a' είναι μεγαλύτερο από το 'b' (γραμμή 7).
- Γραμμή κώδικα 10: Εάν το 'a' είναι μεγαλύτερο από το 'b, τότε η συνθήκη στο 'ενθετο-αν 1' θα ελέγξει εάν το 'a' είναι μεγαλύτερο από το 'c' (γραμμή 10).
- Κωδικός γραμμής 13: Εάν και πάλι το 'a' είναι μεγαλύτερο, τότε θα εκτυπωθεί το μήνυμα 'A είναι το μεγαλύτερο' (γραμμή 11). Διαφορετικά, εάν η συνθήκη 2 αποτύχει, τότε θα εκτυπωθεί το «C is the greatest» (γραμμή 13).
- Γραμμή κώδικα 18: Σε περίπτωση που η συνθήκη 1 επιστρέψει false, τότε η συνθήκη στο 'ενθετο-αν 2' θα ελέγξει εάν το 'b' είναι μεγαλύτερο από το 'c' (γραμμή 18).
- Γραμμή κώδικα 21: Εάν το 'b' είναι μεγαλύτερο από το 'c', τότε θα εκτυπωθεί το μήνυμα 'B είναι το μεγαλύτερο' (γραμμή 19), διαφορετικά εάν η συνθήκη 2 αποτύχει, τότε θα εκτυπωθεί το 'C είναι το μέγιστο' (γραμμή 21).
- Κωδικός γραμμή 24: Εκτύπωση της δήλωσης «Το πρόγραμμα ολοκληρώθηκε» (γραμμή 24).
Έξοδος κώδικα:
Program started. Checking Nested-IF 2 C is greatest Program completed.
Περίληψη
Σε αυτό το κεφάλαιο, μάθαμε τις διαφορετικές δηλώσεις λήψης αποφάσεων, τη σύνταξη και τα παραδείγματά τους. Ο παρακάτω πίνακας παρέχει τη σύνοψη των διαφόρων δηλώσεων υπό όρους που έχουμε συζητήσει.
| ΤΥΠΟΣ | ΠΕΡΙΓΡΑΦΉ | ΧΡΗΣΗ |
|---|---|---|
| ΕΑΝ | Ελέγχει για μια Boolean συνθήκη, εάν θα εκτελεστεί TRUE κώδικας στο μπλοκ "THEN". | Για παράλειψη,/εκτέλεση συγκεκριμένου κώδικα βάσει της συνθήκης. |
| ΑΝ-ΤΟΤΕ-ΑΛΛΟ | Ελέγχει για μια συνθήκη Boole, εάν θα εκτελεστεί TRUE κώδικας στο μπλοκ 'THEN', εάν εκτελεστεί ψευδής κώδικας στο μπλοκ 'ELSE'. | Το πιο κατάλληλο σε κατάσταση "ΑΥΤΟ-Ή-ΕΚΕΙΝ". |
| ΑΝ-ΤΟΤΕ-ELSIF | Ελέγχει για μια συνθήκη Boolean με διαδοχική σειρά. Το πρώτο μπλοκ της ακολουθίας που επιστρέφει την TRUE συνθήκη θα εκτελεστεί. Εάν καμία από τις συνθήκες της ακολουθίας δεν είναι TRUE, τότε εκτελείται ο κώδικας στο μπλοκ 'ELSE'. | Χρησιμοποιείται για την επιλογή από περισσότερες από δύο εναλλακτικές ως επί το πλείστον. |
| NESTED-IF | Επιτρέπει μία ή περισσότερες δηλώσεις IF-THEN ή IF-THEN-ELSIF μέσα σε μια άλλη πρόταση IF-THEN ή IF-THEN-ELSIF. | Χρησιμοποιείται κυρίως σε κατάσταση ένθετης κατάστασης. |


