Τι είναι το Nested Blocks Oracle;
Στο PL / SQL, κάθε μπλοκ μπορεί να τοποθετηθεί σε άλλο μπλοκ. Αναφέρονται ως ένθετο μπλοκ. Τα ένθετα μπλοκ είναι πολύ συνηθισμένα όταν θέλουμε να εκτελέσουμε τη συγκεκριμένη διαδικασία και ταυτόχρονα, ο κωδικός για αυτήν τη διαδικασία θα πρέπει να διατηρείται σε ξεχωριστό κοντέινερ (μπλοκ).
Η έννοια του ένθετου μπλοκ θα βοηθήσει τον προγραμματιστή να βελτιώσει την αναγνωσιμότητα με το διαχωρισμό των πολύπλοκων πραγμάτων σε κάθε μπλοκ και να χειριστεί την εξαίρεση για κάθε μπλοκ μέσα στο κύριο εξωτερικό μπλοκ.
Σε αυτό το σεμινάριο, θα μάθετε-
- Δομή ένθετου μπλοκ
- Πεδίο εφαρμογής σε ένθετο μπλοκ: μεταβλητό εύρος
Δομή ένθετου μπλοκ
Ένα μπλοκ μπορεί να τοποθετηθεί σε άλλο μπλοκ. Αυτό μπορεί να τοποθετηθεί είτε στο τμήμα εκτέλεσης είτε στο τμήμα χειρισμού εξαιρέσεων. Αυτά τα μπλοκ μπορούν επίσης να επισημανθούν. Ένα εξωτερικό μπλοκ μπορεί να περιέχει πολλά εσωτερικά μπλοκ. Κάθε εσωτερικό μπλοκ είναι και πάλι ένα μπλοκ PL / SQL, επομένως όλες οι ιδιότητες και τα χαρακτηριστικά του εσωτερικού μπλοκ θα είναι τα ίδια με το εξωτερικό μπλοκ. Η παρακάτω εικόνα δίνει την εικονική αναπαράσταση της δομής ένθετου μπλοκ. Το γονικό μπλοκ είναι το κύριο μπλοκ και το θυγατρικό μπλοκ είναι το ένθετο μπλοκ.
Παρακάτω είναι η σύνταξη για το ένθετο μπλοκ.
Σύνταξη Nested Block
<>DECLARE BEGIN < >DECLARE BEGIN .EXCEPTION END; EXCEPTION END;
- Η παραπάνω σύνταξη δείχνει το ένθετο μπλοκ που περιέχει συνολικά δύο μπλοκ.
- Αυτά τα μπλοκ φέρουν την ένδειξη «external_block» και «inner_block»
Πεδίο εφαρμογής σε ένθετο μπλοκ: μεταβλητό εύρος
Στο ένθετο μπλοκ, πρέπει κανείς να κατανοήσει το εύρος και την ορατότητα κάθε μπλοκ προτού τα χρησιμοποιήσει. Ιδιαίτερα στο εσωτερικό μπλοκ, τα στοιχεία τόσο από το εξωτερικό όσο και από το εσωτερικό μπλοκ θα είναι ορατά, επομένως είναι απαραίτητη η σωστή κατανόηση αυτού.
Παρακάτω τα σημεία θα συνοψίσουν περισσότερα σχετικά με τα πεδία σε ένθετα μπλοκ.
- Τα στοιχεία που δηλώνονται στο εξωτερικό μπλοκ και η τιμή που ορίζεται πριν από τον εσωτερικό ορισμό του μπλοκ είναι ορατά μέσα στο εσωτερικό μπλοκ.
- Τα στοιχεία που δηλώνονται στο εσωτερικό μπλοκ δεν είναι ορατά στο εξωτερικό μπλοκ. Είναι ορατά μόνο μέσα στο εσωτερικό μπλοκ.
- Το εξωτερικό μπλοκ και το εσωτερικό μπλοκ μπορούν να έχουν μια μεταβλητή με το ίδιο όνομα.
- Σε περίπτωση μεταβλητών με το ίδιο όνομα, το εσωτερικό μπλοκ από προεπιλογή, θα αναφέρεται στη μεταβλητή που δηλώνεται μόνο στο εσωτερικό μπλοκ.
- Εάν το εσωτερικό μπλοκ θέλει να παραπέμψει τη μεταβλητή εξωτερικού μπλοκ που έχει το ίδιο όνομα με αυτό του εσωτερικού μπλοκ, τότε το εξωτερικό μπλοκ θα πρέπει να ΕΙΝΑΙ ΕΠΙΣΗΜΑΝΣΗ και η μεταβλητή εξωτερικού μπλοκ μπορεί να αναφέρεται ως «
. »
Το παρακάτω παράδειγμα θα σας βοηθήσει να κατανοήσετε περισσότερα σχετικά με αυτά τα πεδία.
Παράδειγμα 1 : Σε αυτό το παράδειγμα, θα δούμε το εύρος των μεταβλητών στο εσωτερικό και το εξωτερικό μπλοκ. Επίσης, θα δούμε πώς να παραπέμπουμε τις μεταβλητές χρησιμοποιώντας μπλοκ ετικέτας.
<>DECLAREvarl VARCHAR2(30):='outer_block';var2 VARCHAR2(30):='value before inner block’;BEGIN< >DECLAREvarl VARCHAR2(30):='inner_block';BEGINdbms_output.put_line(varl), dbms_output.put_line(OUTER_BLOCKvar1);dbms_output.put_line(var2);END;var2:='value after inner block';END;/
Επεξήγηση κώδικα:
- Γραμμή κώδικα 1 : Επισήμανση του εξωτερικού μπλοκ ως "OUTER_BLOCK".
- Γραμμή κώδικα 3 : Δήλωση μιας μεταβλητής «var1» ως VARCHAR2 (30) με την αρχική τιμή του «εξωτερικού μπλοκ».
- Γραμμή κώδικα 4 : Δήλωση μιας μεταβλητής «var2» ως VARCHAR2 (30) με την αρχική τιμή της «τιμής πριν από το εσωτερικό μπλοκ».
- Γραμμή κώδικα 6: Επισήμανση του εσωτερικού μπλοκ ως "INNER_BLOCK"
- Γραμμή κωδικού 8: Δήλωση μιας μεταβλητής «var1» στο εσωτερικό μπλοκ ως VARCHAR2 (30) με την αρχική τιμή του «εσωτερικού μπλοκ».
- Γραμμή κώδικα 10: Εκτύπωση της τιμής του «var1». Δεδομένου ότι καμία ετικέτα δεν αναφέρεται από προεπιλογή, θα λάβει την τιμή από ένα εσωτερικό μπλοκ, εκτυπώνοντας έτσι το μήνυμα «inner_block».
- Γραμμή κώδικα 11: Εκτύπωση της τιμής της μεταβλητής εξωτερικού μπλοκ «var1». Επειδή το εσωτερικό μπλοκ έχει τη μεταβλητή με το ίδιο όνομα, πρέπει να αναφερθούμε στην εξωτερική ετικέτα μπλοκ. Εκτυπώνοντας έτσι το μήνυμα «εξωτερικό μπλοκ».
- Γραμμή κώδικα 12: Εκτύπωση της τιμής της μεταβλητής εξωτερικού μπλοκ «var2». Δεδομένου ότι δεν υπάρχει μεταβλητή με αυτό το όνομα στο εσωτερικό μπλοκ, από προεπιλογή, θα πάρει την τιμή από ένα εξωτερικό μπλοκ, εκτυπώνοντας έτσι το μήνυμα «τιμή πριν από το εσωτερικό μπλοκ»
- Η μεταβλητή «var2» στο εξωτερικό μπλοκ έχει αντιστοιχιστεί με την τιμή «τιμή μετά το εσωτερικό μπλοκ». Αλλά αυτή η ανάθεση έχει συμβεί μετά τον ορισμό ενός εσωτερικού μπλοκ. Ως εκ τούτου, αυτή η τιμή δεν υπάρχει στο εσωτερικό μπλοκ.
Παράδειγμα 2 : Σε αυτό το παράδειγμα, θα βρούμε τη διαφορά μεταξύ δύο αριθμών, ένας δηλώνεται στο εξωτερικό μπλοκ και άλλος στο εσωτερικό μπλοκ. Και οι δύο θα έχουν το ίδιο όνομα. Ας δούμε πώς η μπλοκ ετικέτα είναι χρήσιμη για την αναφορά αυτών των μεταβλητών.
<>DECLAREln_val NUMBER :=5;BEGIN< >DECLAREln_val NUMBER :=3;BEGINdbms_output.put_line(The difference between outer block and inner block variable is:'||' outer_block. ln_val-inner_block.ln_val);END;END;/
Επεξήγηση κώδικα:
- Γραμμή κώδικα 1 : Επισήμανση του εξωτερικού μπλοκ ως "OUTER_BLOCK".
- Γραμμή κώδικα 3 : Δήλωση μιας μεταβλητής «ln_val» ως ΑΡΙΘΜΟΣ με την αρχική τιμή του «5».
- Γραμμή κώδικα 5: Επισήμανση του εσωτερικού μπλοκ ως "INNER_BLOCK"
- Γραμμή κώδικα 7: Δήλωση μιας μεταβλητής «ln_val» στο εσωτερικό μπλοκ ως ΑΡΙΘΜΟΣ με την αρχική τιμή του «3».
- Γραμμή κώδικα 9: Εκτύπωση της διαφοράς στην τιμή του «ln_val» από το εξωτερικό και το εσωτερικό μπλοκ. Η μορφή "
. " χρησιμοποιείται για την αναφορά αυτών των μεταβλητών για την αποφυγή διενέξεων λόγω του ίδιου ονόματος μεταβλητής.
Περίληψη
Σε αυτό το σεμινάριο, μάθαμε πώς να δημιουργήσουμε ένα ένθετο μπλοκ και πώς να χειριστούμε το εύρος σε εσωτερικό μπλοκ και εξωτερικά μπλοκ. Έχουμε επίσης δει ένα παράδειγμα όπου οι μεταβλητές από το εσωτερικό και το εξωτερικό μπλοκ αναφέρονται στο εσωτερικό του μπλοκ.