Oracle PL / SQL ΕΑΝ ΑΛΛΗ Δήλωση: ELSIF, NESTED-IF

Πίνακας περιεχομένων:

Anonim

Τι είναι οι δηλώσεις λήψης αποφάσεων;

Οι δηλώσεις λήψης αποφάσεων είναι εκείνοι που θα αποφασίσουν τον έλεγχο ροής των δηλώσεων SQL με βάση τις συνθήκες. Δίνει στον προγραμματιστή καλύτερο έλεγχο της αποτροπής εκτέλεσης ενός συγκεκριμένου κώδικα (διάγραμμα 1) ή της επιλογής ενός επιθυμητού κώδικα βάσει της συνθήκης (διάγραμμα 2). Ακολουθεί η εικονική αναπαράσταση της «Δήλωσης Λήψης Αποφάσεων».

Διάγραμμα δήλωσης λήψης αποφάσεων

Τύποι δηλώσεων λήψης αποφάσεων:

Η Oracle παρέχει τους ακόλουθους τύπους δηλώσεων λήψης αποφάσεων.

  • ΑΝ ΤΟΤΕ
  • ΕΑΝ-ΑΛΛΟ
  • ΕΑΝ-ΤΟ ΕΛΣΙΦ
  • NESTED-IF
  • ΥΠΟΘΕΣΗ
  • ΑΝΑΖΗΤΗΣΗ ΠΕΡΙΠΤΩΣΗ

Σε αυτό το σεμινάριο, θα μάθετε-

  • Εισαγωγή στις δηλώσεις λήψης αποφάσεων
  • Δήλωση IF-THEN
  • Δήλωση IF-THEN-ELSE
  • Δήλωση IF-THEN-ELSIF
  • Δήλωση NESTED-IF

Δήλωση IF-THEN

Η δήλωση IF-THEN χρησιμοποιείται κυρίως για την εκτέλεση μιας συγκεκριμένης ενότητας κωδικών μόνο όταν ικανοποιείται η συνθήκη.

Η συνθήκη πρέπει να αποδίδει Boolean (True / False). Είναι μια βασική δήλωση υπό όρους που θα επιτρέψει στο ORACLE να εκτελέσει / παραλείψει ένα συγκεκριμένο κομμάτι κώδικα βάσει των προκαθορισμένων συνθηκών.

Σύνταξη για δηλώσεις IF THEN:

IF THEN-executed only if the condition returns TRUEEND if;
  • Στην παραπάνω σύνταξη, η λέξη-κλειδί «IF» θα ακολουθηθεί από μια συνθήκη που θα αξιολογηθεί ως «TRUE» / «FALSE».
  • Το στοιχείο ελέγχου θα εκτελέσει το μόνο εάν η συνθήκη επιστρέψει .
  • Σε περίπτωση που η συνθήκη αξιολογηθεί σε τότε, η SQL θα παραλείψει το και θα ξεκινήσει την εκτέλεση του κώδικα δίπλα στο μπλοκ "END IF".

Σημείωση: Όποτε η συνθήκη αξιολογείται σε "NULL", τότε η SQL θα αντιμετωπίζει το "NULL" ως "FALSE".

Παράδειγμα 1 : Σε αυτό το παράδειγμα, θα εκτυπώσουμε ένα μήνυμα όταν ο αριθμός είναι μεγαλύτερος από 100. Για αυτό, θα εκτελέσουμε τον ακόλουθο κώδικα

Για να εκτυπώσετε ένα μήνυμα όταν ένας αριθμός έχει τιμή μεγαλύτερη από 100, εκτελούμε τον ακόλουθο κώδικα.

DECLAREa NUMBER :=10;BEGINdbms_output.put_line(‘Program started.' );IF( a> 100 ) THENdbms_output.put_line('a is greater than 100');END IF;dbms_output.put_line(‘Program completed.');END;/

Επεξήγηση κώδικα:

  • Γραμμή κώδικα 2: Δήλωση της μεταβλητής «a» ως τύπου δεδομένων «ΑΡΙΘΜΟΣ» και αρχικοποίησή της με την τιμή «10».
  • Γραμμή κώδικα 4: Εκτύπωση της δήλωσης "Το πρόγραμμα ξεκίνησε".
  • Γραμμή κώδικα 5: Έλεγχος της κατάστασης, εάν η μεταβλητή «a» είναι μεγαλύτερη από «100».
  • Γραμμή κώδικα 6: Εάν το "a" είναι μεγαλύτερο από το "100", τότε θα εκτυπωθεί το "a είναι μεγαλύτερο από 100". Εάν το "a" είναι μικρότερο από ή ίσο με 100, τότε η συνθήκη αποτυγχάνει, επομένως η παραπάνω δήλωση εκτύπωσης αγνοείται.
  • Γραμμή κωδικού 8: Εκτύπωση της δήλωσης "Το πρόγραμμα ολοκληρώθηκε".

Έξοδος κώδικα:

Program started.Program completed. 

Παράδειγμα 2: Σε αυτό το παράδειγμα, θα εκτυπώσουμε ένα μήνυμα εάν υπάρχει ένα δεδομένο αλφάβητο στα αγγλικά φωνήεντα (A, E, I, O, U).

Για να εκτυπώσετε ένα μήνυμα όταν ο δεδομένος χαρακτήρας είναι φωνήεν, εκτελούμε τον ακόλουθο κώδικα.

DECLAREa CHAR(1) :=’u’;BEGINIF UPPER(a) in ('A’,'E','I','0','U' ) THENdbms_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-ELSE.

Σύνταξη για δηλώσεις IF-THEN-ELSE:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • Στην παραπάνω σύνταξη, η λέξη-κλειδί «IF» θα ακολουθηθεί από μια συνθήκη που θα αξιολογηθεί ως «TRUE» / «FALSE».
  • Το στοιχείο ελέγχου θα εκτελέσει το μόνο εάν η συνθήκη επιστρέψει .
  • Σε περίπτωση που η συνθήκη αξιολογηθεί σε τότε, η SQL θα εκτελέσει το .
  • Σε κάθε περίπτωση, θα εκτελεστεί ένα από τα δύο μπλοκ δράσης.

Σημείωση: Όποτε η συνθήκη αξιολογείται ως «NULL», τότε η SQL θα αντιμετωπίζει το «NULL» ως «FALSE».

Παράδειγμα 1 : Σε αυτό το παράδειγμα, θα εκτυπώσουμε μήνυμα εάν ο συγκεκριμένος αριθμός είναι μονός ή ζυγός.

DECLAREa NUMBER:=11;BEGINdbms_output.put_line (‘Program started');IF( mod(a,2)=0) THENdbms_output.put_line('a is even number' );ELSEdbms_output.put_line('a is odd number1);END IF;dbms_output.put_line (‘Program completed.’);END;/

Επεξήγηση κώδικα:

  • Γραμμή κώδικα 2: Δήλωση της μεταβλητής «a» ως τύπου δεδομένων «ΑΡΙΘΜΟΣ» και αρχικοποίησή της με την τιμή «11».
  • Γραμμή κώδικα 4: Εκτύπωση της δήλωσης "Το πρόγραμμα ξεκίνησε".
  • Γραμμή κώδικα 5: Έλεγχος της κατάστασης, εάν ο συντελεστής της μεταβλητής «a» από το «2» είναι 0.
  • Γραμμή κωδικού 6: Εάν '0', τότε θα εκτυπωθεί το "a is even number".
  • Γραμμή κώδικα 7: Εάν η τιμή συντελεστή δεν είναι ίση με '0', τότε η συνθήκη επιστρέφει , οπότε θα εκτυπωθεί το μήνυμα "a is odd number".
  • Γραμμή κώδικα 10: Εκτύπωση της δήλωσης "Το πρόγραμμα ολοκληρώθηκε"

Έξοδος κώδικα:

Program started.a is odd numberProgram completed. 

Δήλωση IF-THEN-ELSIF

  • Η δήλωση IF-THEN-ELSIF χρησιμοποιείται κυρίως όταν μια εναλλακτική πρέπει να επιλέγεται από ένα σύνολο εναλλακτικών, όπου κάθε εναλλακτική έχει τους δικούς της όρους που πρέπει να ικανοποιούνται.
  • Οι πρώτες συνθήκες που επιστρέφουν θα εκτελεστούν και οι υπόλοιπες συνθήκες θα παραλειφθούν.
  • Η δήλωση IF-THEN-ELSIF ενδέχεται να περιέχει μπλοκ "ELSE". Αυτό το μπλοκ «ELSE» θα εκτελεστεί εάν δεν πληρούται καμία από τις προϋποθέσεις.

Σημείωση : Το μπλοκ ELSE είναι προαιρετικό σε αυτήν τη δήλωση υπό όρους. Εάν δεν υπάρχει μπλοκ ELSE και καμία από τις προϋποθέσεις δεν ικανοποιείται, τότε ο ελεγκτής θα παραλείψει όλο το μπλοκ δράσης και θα ξεκινήσει να εκτελεί το υπόλοιπο μέρος του κώδικα.

Σύνταξη για δηλώσεις IF-THEN-ELSIF:

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • Στην παραπάνω σύνταξη, το στοιχείο ελέγχου θα εκτελέσει το μόνο εάν η συνθήκη1 επιστρέψει .
  • Εάν η συνθήκη 1 δεν ικανοποιείται, τότε ο ελεγκτής θα ελέγξει την κατάσταση2.
  • Ο ελεγκτής θα βγεί από τη δήλωση IF στις ακόλουθες δύο περιπτώσεις.
    • Όταν ο ελεγκτής βρήκε οποιαδήποτε συνθήκη που επιστρέφει . Σε αυτήν την περίπτωση, το αντίστοιχο action_block θα εκτελεστεί και ο ελεγκτής θα τερματίσει αυτό το μπλοκ IF-statement και θα αρχίσει να εκτελεί τον υπόλοιπο κώδικα.
    • Όταν δεν πληρούται καμία από τις προϋποθέσεις, ο τότε ελεγκτής θα εκτελέσει το μπλοκ ELSE εάν υπάρχει, τότε θα βγεί από τη δήλωση IF.

Σημείωση: Όποτε η συνθήκη αξιολογείται ως «NULL», τότε η SQL θα αντιμετωπίζει το «NULL» ως «FALSE».

Παράδειγμα 1: Χωρίς μπλοκ ELSE

Σε αυτό το παράδειγμα, πρόκειται να εκτυπώσουμε τον βαθμό βάσει των δεδομένων σημείων χωρίς άλλη συνθήκη (mark> = 70 Grade A, mark> = 40 και mark <70 Grade B, mark> = 35 και mark <40 Grade C).

DECLAREmark NUMBER :=55;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C’);END IF;dbms_output.put_line(‘Program completed.’);END;/

Επεξήγηση κώδικα:

  • Γραμμή κώδικα 2: Δήλωση της μεταβλητής «mark» ως τύπου δεδομένων «ΑΡΙΘΜΟΣ» και αρχικοποίησή της με την τιμή «55».
  • Γραμμή κώδικα 4: Εκτύπωση της δήλωσης "Το πρόγραμμα ξεκίνησε".
  • Γραμμή κωδικού 5: Έλεγχος της συνθήκης1, εάν το «σήμα» είναι μεγαλύτερο ή ίσο 70.
  • Γραμμή κώδικα 7: Εφόσον η συνθήκη1 απέτυχε, τότε ελέγχεται η συνθήκη2 '70> σήμα> = 40 '.
  • Γραμμή κωδικού 8: Το condtition2 επιστρέφει , επομένως θα εκτυπωθεί το μήνυμα «Βαθμός Β».
  • Γραμμή κώδικα 12: Εκτύπωση της δήλωσης "Το πρόγραμμα ολοκληρώθηκε".
  • Σε αυτήν την περίπτωση, η συνθήκη3 'mark <35' θα παραλειφθεί, καθώς ο ελεγκτής βρήκε μία συνθήκη που επιστρέφει πριν από την συνθήκη3.

Έξοδος κώδικα:

Program started.Grade BProgram completed.

Παράδειγμα 2 : Με μπλοκ ELSE

Σε αυτό το παράδειγμα, θα εκτυπώσουμε τον βαθμό με βάση τα δεδομένα σημάδια με άλλη συνθήκη (mark> = 70 Grade A, mark> = 40 και mark <70 Grade B, mark> = 35 και mark <40 Grade C, else «Χωρίς βαθμό»).

DECLAREmark NUMBER :=25;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C);ELSEdbms_output.put_line(‘No Grade’);END IF;dbms_output.put_line(‘Program completed.' );END;/

Επεξήγηση κώδικα:

  • Γραμμή κώδικα 2: Δήλωση της μεταβλητής «mark» ως τύπου δεδομένων «ΑΡΙΘΜΟΣ» και αρχικοποίησή της με την τιμή «25».
  • Γραμμή κώδικα 4: Εκτύπωση της δήλωσης "Το πρόγραμμα ξεκίνησε".
  • Γραμμή κωδικού 5: Έλεγχος της συνθήκης 1, εάν το «σήμα» είναι μεγαλύτερο ή ίσο 70.
  • Γραμμή κώδικα 7: Εφόσον η συνθήκη1 απέτυχε, τότε ελέγχεται η συνθήκη2 '70> σήμα> = 40 '.
  • Γραμμή κώδικα 8: Δεδομένου ότι η συνθήκη2 απέτυχε, τότε ελέγχεται η συνθήκη3 '40> σήμα> = 35 '.
  • Γραμμή κωδικού 11: Δεδομένου ότι όλες οι συνθήκες έχουν αποτύχει, ο έλεγχος θα ελέγξει τώρα για την παρουσία μπλοκ ELSE και θα εκτυπώσει το μήνυμα «No Grade» από το μπλοκ ELSE.
  • Γραμμή κώδικα 14: Εκτύπωση της δήλωσης "Το πρόγραμμα ολοκληρώθηκε".

Έξοδος κώδικα:

Program started.No GradeProgram completed.

Δήλωση NESTED-IF

  • Η δήλωση NESTED-IF επιτρέπεται βασικά στους προγραμματιστές να τοποθετήσουν μία ή περισσότερες συνθήκες "IF" σε μια άλλη συνθήκη συνθήκης "IF" εκτός από τις κανονικές δηλώσεις.
  • Κάθε συνθήκη «IF» θα πρέπει να έχει μια ξεχωριστή δήλωση «ΤΕΛΟΣ IF» που σηματοδοτεί το τέλος του πεδίου εφαρμογής του συγκεκριμένου
  • Η δήλωση «IF» θα θεωρήσει την πλησιέστερη δήλωση «ΤΕΛΟΣ IF» ως τελικό σημείο για τη συγκεκριμένη κατάσταση.
  • Η εικονική αναπαράσταση για το NESTED-IF φαίνεται παρακάτω
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END IF; -END IF corresponds to condition1
Επεξήγηση σύνταξης:
  • Στην παραπάνω σύνταξη, το εξωτερικό IF περιέχει μία ακόμη δήλωση IF στο μπλοκ ενεργειών.
  • Η συνθήκη1 επιστρέφει , τότε ο έλεγχος θα εκτελεί το και ελέγχει τη συνθήκη2.
  • Εάν η συνθήκη2 επιστρέψει επίσης , τότε θα εκτελεστεί και το .
  • Σε περίπτωση που η συνθήκη2 αξιολογηθεί σε τότε, η SQL θα παραλείψει το .

Εδώ θα δούμε ένα παράδειγμα του Nested If -

Παράδειγμα Nested- If Statement: Μεγαλύτερο από τρία νούμερα

Σε αυτό το παράδειγμα, θα εκτυπώσουμε τον μεγαλύτερο αριθμό τριών αριθμών χρησιμοποιώντας τη δήλωση Nested-If. Οι αριθμοί θα εκχωρηθούν στο τμήμα δήλωσης, όπως μπορείτε να δείτε στον παρακάτω κώδικα, δηλαδή Αριθμός = 10,15 και 20 και ο μέγιστος αριθμός θα ληφθεί χρησιμοποιώντας δηλώσεις ένθετου-αν.

DECLAREa NUMBER :=10;b NUMBER :=15;c NUMBER :=20;BEGINdbms_output.put_line(‘Program started.' );IF( a> b)THEN/*Nested-if l */dbms_output.put_line(’Checking Nested-IF 1');IF( a> c ) THENdbms_output.put_line(‘A is greatest’);ELSEdbms_output.put_line(‘C is greatest’);END IF;ELSE/*Nested-if2 */dbms_output.put_line('Checking Nested-IF 2' );IF( b> c ) THENdbms_output.put_line(’B is greatest' );ELSEdbms_output.put_line(’C is greatest' );END IF;END IF;dbms_output.put_line(‘Program completed.’ );END;/

Επεξήγηση κώδικα:

  • Γραμμή κώδικα 2: Δήλωση της μεταβλητής «a» ως τύπου δεδομένων «ΑΡΙΘΜΟΣ» και αρχικοποίησή της με την τιμή «10».
  • Γραμμή κώδικα 3: Δήλωση της μεταβλητής «b» ως τύπου δεδομένων «ΑΡΙΘΜΟΣ» και αρχικοποίησή της με την τιμή «15».
  • Γραμμή κώδικα 4: Δήλωση της μεταβλητής «c» ως τύπου δεδομένων «ΑΡΙΘΜΟΣ» και αρχικοποίησή της με την τιμή «20».
  • Γραμμή κωδικού 6: Εκτύπωση της δήλωσης "Έναρξη προγράμματος" (γραμμή 6).
  • Γραμμή κώδικα 7: Έλεγχος της συνθήκης1, εάν το «a» είναι μεγαλύτερο από το «b» (γραμμή 7).
  • Γραμμή κωδικού 10: Εάν το "a" είναι μεγαλύτερο από το "b, τότε η συνθήκη στο" nested-if 1 "θα ελέγξει αν το" a "είναι μεγαλύτερο από το" c "(γραμμή 10).
  • Γραμμή κωδικού 13: Εάν εξακολουθεί να είναι "a" μεγαλύτερο, τότε θα εκτυπωθεί το μήνυμα "A is great" (γραμμή 11). Διαφορετικά, εάν η συνθήκη 2 αποτύχει, τότε θα εκτυπωθεί το "C is great" (γραμμή 13).
  • Γραμμή κωδικού 18: Στην περίπτωση που η συνθήκη1 επιστρέφει λανθασμένη, τότε η συνθήκη στο 'nested-if 2' θα ελέγξει αν το 'b' είναι μεγαλύτερο από το 'c' (γραμμή 18).
  • Γραμμή κωδικού 21: Εάν το "b" είναι μεγαλύτερο από το "c", τότε θα εκτυπωθεί το μήνυμα "B is great" (γραμμή 19), αλλιώς εάν η συνθήκη2 αποτύχει, τότε θα εκτυπωθεί το "C is great" (γραμμή 21).
  • Γραμμή κωδικού 24: Εκτύπωση της δήλωσης "Το πρόγραμμα ολοκληρώθηκε" (γραμμή 24).

Παραγωγή κωδικού:

Program started.Checking Nested-IF 2C is greatestProgram completed.

Περίληψη

Σε αυτό το κεφάλαιο, μάθαμε τις διαφορετικές δηλώσεις λήψης αποφάσεων και τη σύνταξη και τα παραδείγματα τους. Στον παρακάτω πίνακα παρουσιάζεται η περίληψη των διαφόρων υπό όρους δηλώσεων που έχουμε συζητήσει.

ΤΥΠΟΣ

ΠΕΡΙΓΡΑΦΗ

ΧΡΗΣΗ

ΑΝ ΤΟΤΕ

Ελέγχει μια συνθήκη Boolean, εάν θα εκτελεστεί ΑΛΗΘΟΣ κωδικός στο μπλοκ "THEN".

Για παράλειψη / εκτέλεση συγκεκριμένου κώδικα βάσει της συνθήκης.

ΕΑΝ-ΑΛΛΟ

Ελέγχει για μια συνθήκη Boolean, εάν θα εκτελεστεί ΑΛΗΘΟΣ κωδικός στο μπλοκ "THEN", εάν εκτελεστεί ψευδής κωδικός στο μπλοκ "ELSE".

Πιο κατάλληλο σε κατάσταση «ΑΥΤΟ-Ή-ΟΤΙ».

ΕΑΝ-ΤΟ ΕΛΣΙΦ

Ελέγχει μια συνθήκη Boolean σε διαδοχική σειρά. Θα εκτελεστεί το πρώτο μπλοκ στην ακολουθία που επιστρέφει TRUE συνθήκη. Εάν καμία από τις συνθήκες της ακολουθίας δεν είναι Αληθινή, τότε εκτελείται κωδικός στο μπλοκ «ΕΛΣΕ».

Χρησιμοποιείται κυρίως για να επιλέξει περισσότερες από δύο εναλλακτικές.

NESTED-IF

Επιτρέπει μία ή περισσότερες δηλώσεις IF-THEN ή IF-THEN-ELSIF σε άλλη δήλωση IF-THEN ή IF-THEN-ELSIF.

Χρησιμοποιείται κυρίως σε κατάσταση ένθεσης.