PL/SQL Variable Scope & Inner Outer Block: Nested Structure
Τι είναι τα Nested Blocks Oracle?
Στο PL/SQL, κάθε μπλοκ μπορεί να είναι ένθετο σε άλλο μπλοκ. Αναφέρονται ως ένθετα μπλοκ. Τα ένθετα μπλοκ είναι πολύ συνηθισμένα όταν θέλουμε να εκτελέσουμε τη συγκεκριμένη διαδικασία και ταυτόχρονα, ο κώδικας για αυτές τις διεργασίες θα πρέπει να φυλάσσεται σε ξεχωριστό κοντέινερ (μπλοκ).
Η έννοια του ένθετου μπλοκ θα βοηθήσει τον προγραμματιστή να βελτιώσει την αναγνωσιμότητα διαχωρίζοντας τα σύνθετα πράγματα σε κάθε μπλοκ και να χειριστεί την εξαίρεση για κάθε μπλοκ μέσα στο κύριο εξωτερικό μπλοκ.
Ένθετη δομή μπλοκ
Ένα μπλοκ μπορεί να είναι ένθετο σε ένα άλλο μπλοκ. Αυτό μπορεί να είναι ένθετο είτε στο τμήμα εκτέλεσης είτε στο χειρισμός εξαιρέσεων μέρος. Αυτά τα μπλοκ μπορούν επίσης να φέρουν ετικέτα. Ένα εξωτερικό μπλοκ μπορεί να περιέχει πολλά εσωτερικά μπλοκ. Κάθε εσωτερικό μπλοκ είναι για άλλη μια φορά α Μπλοκ PL/SQL, επομένως όλες οι ιδιότητες και τα χαρακτηριστικά του εσωτερικού μπλοκ θα είναι ίδια με του εξωτερικού μπλοκ. Η παρακάτω εικόνα δίνει την εικονογραφική αναπαράσταση της δομής ένθετων μπλοκ. Το γονικό μπλοκ είναι το κύριο μπλοκ και το θυγατρικό μπλοκ είναι το ένθετο μπλοκ.
Παρακάτω είναι η σύνταξη για το ένθετο μπλοκ.
Ένθετη σύνταξη μπλοκ
<<outer_block>> DECLARE <Declarative section> BEGIN <Execution part for outer block begins> <<inner block>> DECLARE <Declarative section> BEGIN <Execution part for inner block>. EXCEPTION <Exception handling part> END; <Execution part for outer block begins> EXCEPTION <Exception handling part> END;
- Η παραπάνω σύνταξη δείχνει το ένθετο μπλοκ που περιέχει συνολικά δύο μπλοκ.
- Αυτά τα μπλοκ επισημαίνονται ως "outer_block" και "inner_block"
Scopes in Nested Block: Variable Scope
Στο ένθετο μπλοκ, πρέπει κανείς να κατανοήσει το εύρος και την ορατότητα κάθε μπλοκ ξεκάθαρα πριν το χρησιμοποιήσει. Ιδιαίτερα στο εσωτερικό μπλοκ, τα στοιχεία τόσο από το εξωτερικό όσο και από το εσωτερικό μπλοκ θα είναι ορατά, επομένως είναι απαραίτητη η σωστή κατανόηση αυτού.
Τα παρακάτω σημεία θα συνοψίσουν περισσότερα σχετικά με τα πεδία σε ένθετα μπλοκ.
- Τα στοιχεία που δηλώνονται στο εξωτερικό μπλοκ και η τιμή που ορίζεται πριν από τον ορισμό του εσωτερικού μπλοκ είναι ορατά μέσα στο εσωτερικό μπλοκ.
- Τα στοιχεία που δηλώνονται στο εσωτερικό μπλοκ δεν είναι ορατά στο εξωτερικό μπλοκ. Είναι ορατά μόνο μέσα στο εσωτερικό μπλοκ.
- Το εξωτερικό μπλοκ και το εσωτερικό μπλοκ μπορεί να έχουν μια μεταβλητή με το ίδιο όνομα.
- Στην περίπτωση μεταβλητών με το ίδιο όνομα, το εσωτερικό μπλοκ από προεπιλογή, θα αναφέρεται στη μεταβλητή που δηλώνεται μόνο στο εσωτερικό μπλοκ.
- Εάν το εσωτερικό μπλοκ θέλει να παραπέμψει τη μεταβλητή του εξωτερικού μπλοκ που έχει το ίδιο όνομα με αυτό του εσωτερικού μπλοκ, τότε το εξωτερικό μπλοκ θα πρέπει να φέρει ΕΤΙΚΕΤΑ και η μεταβλητή του εξωτερικού μπλοκ μπορεί να αναφέρεται ως « . '
Το παρακάτω παράδειγμα θα σας βοηθήσει να κατανοήσετε περισσότερα σχετικά με αυτά τα πεδία.
Παράδειγμα 1: Σε αυτό το παράδειγμα, θα δούμε το εύρος των μεταβλητών στο εσωτερικό και το εξωτερικό μπλοκ. Επίσης, θα δούμε πώς να παραπέμπουμε τις μεταβλητές χρησιμοποιώντας την ετικέτα μπλοκ.
<<OUTER_BLOC>> DECLARE varl VARCHAR2(30):='outer_block'; var2 VARCHAR2(30):='value before inner block’; BEGIN <<NNER_BLOCK>> DECLARE varl VARCHAR2(30):='inner_block'; BEGIN dbms_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) με την αρχική τιμή "value before inner block".
- Κωδικός γραμμή 6: Επισήμανση του εσωτερικού μπλοκ ως "INNER_BLOCK"
- Κωδικός γραμμή 8: Δήλωση μιας μεταβλητής 'var1' στο εσωτερικό μπλοκ ως VARCHAR2 (30) με την αρχική τιμή "εσωτερικό μπλοκ".
- Κωδικός γραμμή 10: Εκτύπωση της τιμής του 'var1'. Εφόσον δεν αναφέρεται καμία ετικέτα από προεπιλογή, θα λάβει την τιμή από ένα εσωτερικό μπλοκ, επομένως θα εκτυπωθεί το μήνυμα 'inner_block'.
- Κωδικός γραμμή 11: Εκτύπωση της τιμής της μεταβλητής εξωτερικού μπλοκ 'var1'. Εφόσον το εσωτερικό μπλοκ έχει τη μεταβλητή με το ίδιο όνομα, πρέπει να αναφερθούμε στην ετικέτα του εξωτερικού μπλοκ. Έτσι εκτυπώνεται το μήνυμα «εξωτερικό μπλοκ».
- Κωδικός γραμμή 12: Εκτύπωση της τιμής της μεταβλητής εξωτερικού μπλοκ 'var2'. Δεδομένου ότι δεν υπάρχει μεταβλητή με αυτό το όνομα στο εσωτερικό μπλοκ, από προεπιλογή θα λάβει την τιμή από ένα εξωτερικό μπλοκ, επομένως θα εκτυπώσει το μήνυμα «τιμή πριν από το εσωτερικό μπλοκ».
- Η μεταβλητή 'var2' στο εξωτερικό μπλοκ έχει εκχωρηθεί με την τιμή 'value after inner block'. Αλλά αυτή η ανάθεση έχει συμβεί μετά τον ορισμό ενός εσωτερικού μπλοκ. Επομένως, αυτή η τιμή δεν υπάρχει στο εσωτερικό μπλοκ.
Παράδειγμα 2: Σε αυτό το παράδειγμα, θα βρούμε τη διαφορά μεταξύ δύο αριθμών, ένας δηλωμένος στο εξωτερικό μπλοκ και ένας άλλος στο εσωτερικό μπλοκ. Και οι δύο θα έχουν το ίδιο όνομα. Ας δούμε πώς η ετικέτα μπλοκ είναι χρήσιμη για την αναφορά αυτών των μεταβλητών.
<<OUTER_BLOC>> DECLARE ln_val NUMBER :=5; BEGIN <<INNERBLOC>> DECLARE ln_val NUMBER :=3; BEGIN dbms_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' ως NUMBER με αρχική τιμή "5".
- Κωδικός γραμμή 5: Επισήμανση του εσωτερικού μπλοκ ως "INNER_BLOCK"
- Κωδικός γραμμή 7: Δήλωση μιας μεταβλητής 'ln_val' στο εσωτερικό μπλοκ ως NUMBER με αρχική τιμή "3".
- Κωδικός γραμμή 9: Εκτύπωση της διαφοράς τιμής του 'ln_val' από το εξωτερικό και το εσωτερικό μπλοκ. Ο " . Η μορφή " χρησιμοποιείται για την αναφορά αυτών των μεταβλητών για την αποφυγή διενέξεων λόγω του ίδιου ονόματος μεταβλητής.
Σύνοψη
Σε αυτό το σεμινάριο, μάθαμε πώς να δημιουργήσουμε ένα ένθετο μπλοκ και πώς να χειριστούμε το πεδίο εφαρμογής σε εσωτερικό και εξωτερικό μπλοκ. Είδαμε επίσης ένα παράδειγμα όπου οι μεταβλητές από το εσωτερικό και το εξωτερικό μπλοκ αναφέρονται μέσα στο εσωτερικό μπλοκ.