Δήλωση ΠΕΡΙΠΤΩΣΗΣ σε Oracle PL/SQL με Παραδείγματα

⚡ Έξυπνη Σύνοψη

Η πρόταση CASE PL/SQL επιλέγει μία εναλλακτική από αρκετές με βάση έναν επιλογέα, όπως ακριβώς και η πρόταση IF-THEN-ELSIF, αλλά με μεγαλύτερη σαφήνεια. Μια απλή CASE ταιριάζει με μια τιμή επιλογέα, ενώ μια αναζητούμενη CASE αξιολογεί μια συνθήκη σε κάθε όρο WHEN και εκτελεί την πρώτη που είναι αληθής.

  • 🔀 Σκοπός: Η CASE επιλέγει ένα μπλοκ δράσης από πολλά, χρησιμοποιώντας έναν επιλογέα αντί για μια λογική αλυσίδα.
  • 🎯 Εκλέκτορας: Η έκφραση CASE αξιολογείται μία φορά και συγκρίνεται με κάθε τιμή WHEN.
  • 🔎 Αναζητήθηκε CASE: Τοποθετεί μια πλήρη συνθήκη σε κάθε όρο WHEN και εκτελεί την πρώτη που είναι αληθής.
  • 🧮 Οποιοσδήποτε τύπος: Ο επιλογέας μπορεί να είναι μια μεταβλητή, ένας αριθμός ή μια αριθμητική παράσταση.
  • 🛟 ΑΛΛΟΥ: Το προαιρετικό μπλοκ ELSE εκτελείται όταν δεν υπάρχει αντιστοιχία εναλλακτικής λύσης.
  • 🔚 ΤΕΛΟΣ ΠΕΡΙΠΤΩΣΗΣ: Μια υποχρεωτική END CASE κλείνει την πρόταση.
  • 🗄️ Φιλικό προς SQL: Σε αντίθεση με την IF, η CASE μπορεί επίσης να χρησιμοποιηθεί απευθείας μέσα σε εντολές SQL.

Δήλωση ΠΕΡΙΠΤΩΣΗΣ σε Oracle PL / SQL

Τι είναι μια δήλωση CASE;

Μια πρόταση CASE είναι παρόμοια με την πρόταση IF-THEN-ELSIF· επιλέγει μια εναλλακτική με βάση μια συνθήκη από τις διαθέσιμες επιλογές.

  • Μια πρόταση CASE χρησιμοποιεί έναν "επιλογέα" αντί για μια λογική έκφραση για να επιλέξει την ακολουθία.
  • Η τιμή της έκφρασης στην πρόταση CASE αντιμετωπίζεται ως επιλογέας.
  • Η έκφραση μπορεί να είναι οποιουδήποτε τύπου (αριθμητική, μεταβλητές, κ.λπ.).
  • Σε κάθε εναλλακτική λύση αντιστοιχίζεται μια συγκεκριμένη προκαθορισμένη τιμή (επιλογέας) και εκτελείται η εναλλακτική λύση της οποίας η τιμή επιλογέα ταιριάζει με την τιμή της υπό όρους έκφρασης.
  • Σε αντίθεση με το IF-THEN-ELSIF, η πρόταση CASE μπορεί επίσης να χρησιμοποιηθεί σε προτάσεις SQL.
  • Το μπλοκ ELSE σε μια εντολή CASE περιέχει την ακολουθία που θα εκτελεστεί όταν δεν έχει επιλεγεί καμία από τις εναλλακτικές λύσεις.

Σύνταξη

CASE (expression)
WHEN <value1> THEN action_block1;
WHEN <value2> THEN action_block2;
WHEN <value3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • Στην παραπάνω σύνταξη, η παράσταση επιστρέφει μια τιμή που θα μπορούσε να είναι οποιουδήποτε τύπου.
  • Κάθε πρόταση «WHEN» είναι μια εναλλακτική λύση που έχει ένα και ένα .
  • Επιλέγεται η ρήτρα 'WHEN' της οποίας η τιμή ταιριάζει με την έκφραση και η εκτελείται.
  • Το μπλοκ 'ELSE' είναι προαιρετικό και περιέχει το για εκτέλεση όταν δεν υπάρχει αντίστοιχη εναλλακτική λύση.
  • Το 'END' σηματοδοτεί το τέλος της πρότασης CASE και είναι υποχρεωτικό μέρος της CASE.

Παράδειγμα 1: Αριθμητικός Υπολογισμός Χρησιμοποιώντας CASE

Σε αυτό το παράδειγμα, κάνουμε έναν αριθμητικό υπολογισμό μεταξύ δύο αριθμών, του 55 και του 5.

DECLARE
a NUMBER := 55;
b NUMBER := 5;
arth_operation VARCHAR2(20) := 'MULTIPLY';
BEGIN
dbms_output.put_line('Program started.');
CASE (arth_operation)
WHEN 'ADD' THEN dbms_output.put_line('Addition of the numbers are: '|| a+b );
WHEN 'SUBTRACT' THEN dbms_output.put_line('Subtraction of the numbers are: '||a-b );
WHEN 'MULTIPLY' THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b );
WHEN 'DIVIDE' THEN dbms_output.put_line('Division of the numbers are:'|| a/b);
ELSE dbms_output.put_line('No operation action defined. Invalid operation');
END CASE;
dbms_output.put_line('Program completed.');
END;
/

Code εξήγηση

  • Code γραμμή 2: Δήλωση της μεταβλητής 'a' ως 'NUMBER' και αρχικοποίησή της με την τιμή '55'.
  • Code γραμμή 3: Δήλωση της μεταβλητής 'b' ως 'ΑΡΙΘΜΟΣ' και αρχικοποίησή της με την τιμή '5'.
  • Code Γραμμή 4: Δήλωση της μεταβλητής 'arth_operation' ως 'VARCHAR2' μεγέθους 20 και αρχικοποίησή της με την τιμή 'MULTIPLY'.
  • Code γραμμή 6: Εκτύπωση της δήλωσης «Το πρόγραμμα ξεκίνησε».
  • Code Γραμμή 7: Η συνάρτηση CASE ελέγχει την τιμή της παράστασης. Εδώ, η τιμή του 'arth_operation' είναι 'MULTIPLY', το οποίο αντιμετωπίζεται ως επιλογέας.
  • Code Γραμμή 10: Η ρήτρα WHEN με τιμή 'MULTIPLY' ταιριάζει με τον επιλογέα, επομένως ο ελεγκτής επιλέγει αυτό το μπλοκ ενέργειας και εκτυπώνει 'Πολλαπλασιασμός των αριθμών είναι: 275'.
  • Code γραμμή 13: Σηματοδοτεί το τέλος της πρότασης CASE.
  • Code γραμμή 14: Εκτύπωση της δήλωσης «Το πρόγραμμα ολοκληρώθηκε».

Code Παραγωγή

Program started.
Multiplication of the numbers are: 275
Program completed.

Δήλωση ΑΝΑΖΗΤΗΣΗΣ ΠΕΡΙΠΤΩΣΗΣ

Η αναζητούμενη πρόταση CASE είναι παρόμοια με την πρόταση CASE, αλλά αντί να χρησιμοποιεί έναν επιλογέα για να επιλέξει την εναλλακτική, η αναζητούμενη CASE έχει την συνθήκη που ορίζεται απευθείας στον όρο WHEN.

  • Η πρώτη πρόταση WHEN που ικανοποιεί τη συνθήκη εκτελείται και ο ελεγκτής παραλείπει τις υπόλοιπες εναλλακτικές λύσεις.

Σύνταξη

CASE
WHEN <expression1> THEN action_block1;
WHEN <expression2> THEN action_block2;
WHEN <expression3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • Στην παραπάνω σύνταξη, κάθε όρος WHEN έχει ξεχωριστό και .
  • Εκτελείται η ρήτρα WHEN για την οποία η έκφραση επιστρέφει TRUE.
  • Το μπλοκ 'ELSE' είναι προαιρετικό και περιέχει το να εκτελεστεί όταν καμία από τις εναλλακτικές λύσεις δεν ικανοποιείται.
  • Το 'END' σηματοδοτεί το τέλος της πρότασης CASE και είναι υποχρεωτικό μέρος της CASE.

Παράδειγμα 1: Αριθμητικός Υπολογισμός Χρησιμοποιώντας Αναζητούμενη Περίπτωση

Σε αυτό το παράδειγμα, κάνουμε έναν αριθμητικό υπολογισμό μεταξύ δύο αριθμών, του 55 και του 5.

DECLARE
a NUMBER := 55;
b NUMBER := 5;
arth_operation VARCHAR2(20) := 'DIVIDE';
BEGIN
dbms_output.put_line('Program started.');
CASE
WHEN arth_operation = 'ADD'
THEN dbms_output.put_line('Addition of the numbers are: '||a+b );
WHEN arth_operation = 'SUBTRACT'
THEN dbms_output.put_line('Subtraction of the numbers are: '|| a-b);
WHEN arth_operation = 'MULTIPLY'
THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b );
WHEN arth_operation = 'DIVIDE'
THEN dbms_output.put_line('Division of the numbers are: '|| a/b );
ELSE dbms_output.put_line('No operation action defined. Invalid operation');
END CASE;
dbms_output.put_line('Program completed.');
END;
/

Code εξήγηση

  • Code γραμμή 2: Δήλωση της μεταβλητής 'a' ως 'NUMBER' και αρχικοποίησή της με την τιμή '55'.
  • Code γραμμή 3: Δήλωση της μεταβλητής 'b' ως 'ΑΡΙΘΜΟΣ' και αρχικοποίησή της με την τιμή '5'.
  • Code Γραμμή 4: Δήλωση της μεταβλητής 'arth_operation' ως 'VARCHAR2' μεγέθους 20 και αρχικοποίησή της με την τιμή 'DIVIDE'.
  • Code γραμμή 6: Εκτύπωση της δήλωσης «Το πρόγραμμα ξεκίνησε».
  • Code γραμμή 7: Ξεκινά η αναζητούμενη πρόταση CASE. Οι όροι για ADD, SUBTRACΤα T και MULTIPLY παραλείπονται, καθώς οι συνθήκες τους δεν ταιριάζουν με την τιμή του 'arth_operation'.
  • Code γραμμή 14: Η έκφραση της πρότασης WHEN “arth_operation = 'DIVIDE'” ικανοποιείται και επιστρέφει TRUE.
  • Code γραμμή 15: Εκτελείται το μπλοκ ενεργειών της ρήτρας WHEN και εκτυπώνεται η φράση «Διαίρεση των αριθμών είναι: 11».
  • Code γραμμή 17: Σηματοδοτεί το τέλος της πρότασης CASE.
  • Code γραμμή 18: Εκτύπωση της δήλωσης «Το πρόγραμμα ολοκληρώθηκε».

Code Παραγωγή

Program started.
Division of the numbers are: 11
Program completed.

Σύγκριση περίπτωσης και αναζήτησε περίπτωση

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

Χαρακτηριστικά Περιγραφή Χρήση
ΜΕΛΕΤΕΣ ΠΕΡΙΠΤΩΣΗΣ Παρόμοιο με το ΑΝ-ΤΟΤΕ-ELSIF Δήλωση. Ένας «επιλογέας» χρησιμοποιείται για την επιλογή της εναλλακτικής λύσης αντί για μια λογική έκφραση. Χρησιμοποιείται για την επιλογή από διάφορες εναλλακτικές λύσεις χρησιμοποιώντας έναν επιλογέα.
ΑΝΑΖΗΤΗΣΗ ΥΠΟΘΕΣΗ Μια πρόταση CASE χωρίς πραγματικό επιλογέα. Αντίθετα, περιέχει τη συνθήκη (η οποία αξιολογείται ως TRUE ή FALSE) που επιλέγει την εναλλακτική λύση. Χρησιμοποιείται για την επιλογή από περισσότερες από δύο εναλλακτικές λύσεις, κυρίως με συνθήκες εύρους.

Συχνές Ερωτήσεις

Μια απλή συνάρτηση CASE συγκρίνει μια τιμή επιλογέα με κάθε τιμή WHEN. Μια CASE που αναζητείται δεν έχει επιλογέα και αξιολογεί μια πλήρη συνθήκη σε κάθε WHEN, επομένως χειρίζεται εύρη και σύνθετες δοκιμές.

Ναι. Μια έκφραση CASE μπορεί να εμφανιστεί σε μια ρήτρα SELECT, WHERE ή ORDER BY, η οποία αποτελεί βασικό πλεονέκτημα έναντι της IF-THEN-ELSIF, μιας κατασκευής που λειτουργεί μόνο μέσα σε μπλοκ PL/SQL.

Μια εντολή CASE ενεργοποιεί την εξαίρεση CASE_NOT_FOUND εάν δεν υπάρχει διακλάδωση που να ταιριάζει και δεν υπάρχει ELSE. Η προσθήκη μιας ενέργειας ELSE, ακόμη και μιας κενής ενέργειας NULL, αποφεύγει αυτό το σφάλμα χρόνου εκτέλεσης.

Ναι. Όταν τα κλαδιά συγκρίνουν μια έκφραση με σταθερές τιμές, η Τεχνητή Νοημοσύνη μπορεί να ξαναγράψει την αλυσίδα ως μια πιο καθαρή CASE (περίπτωση). Επαληθεύστε το αποτέλεσμα, καθώς μια CASE χωρίς ELSE (αλλιώς) συμπεριφέρεται διαφορετικά από μια ELSIF που λείπει.

Μια πρόταση CASE εκτελεί ένα μπλοκ ενέργειας ανά κλάδο και τελειώνει με END CASE. Μια έκφραση CASE επιστρέφει μια μεμονωμένη τιμή και τελειώνει με END, επομένως μπορεί να αντιστοιχιστεί σε μια μεταβλητή ή να χρησιμοποιηθεί σε SQL.

Συνοψίστε αυτήν την ανάρτηση με: