Τι είναι το CURSOR στο PL / SQL;
Ο δρομέας είναι δείκτης σε αυτήν την περιοχή περιβάλλοντος. Η Oracle δημιουργεί περιοχή περιβάλλοντος για την επεξεργασία μιας δήλωσης SQL που περιέχει όλες τις πληροφορίες σχετικά με τη δήλωση.
Το PL / SQL επιτρέπει στον προγραμματιστή να ελέγχει την περιοχή περιβάλλοντος μέσω του δρομέα. Ένας δρομέας κρατά τις σειρές που επιστρέφονται από τη δήλωση SQL. Το σύνολο γραμμών που κρατά ο δρομέας αναφέρεται ως ενεργό σύνολο. Αυτοί οι δρομείς μπορούν επίσης να ονομάζονται έτσι ώστε να μπορούν να αναφέρονται από άλλο μέρος του κώδικα.
Σε αυτό το σεμινάριο θα μάθετε-
- Σιωπηρός δρομέας
- Ρητός δρομέας
- Χαρακτηριστικά του δρομέα
- Για δήλωση δρομέα βρόχου
Ο δρομέας είναι δύο τύπων.
- Σιωπηρός δρομέας
- Ρητός δρομέας
Σιωπηρός δρομέας
Κάθε φορά που πραγματοποιούνται λειτουργίες DML στη βάση δεδομένων, δημιουργείται ένας σιωπηρός δρομέας που κρατά τις σειρές που επηρεάζονται, στη συγκεκριμένη λειτουργία. Αυτοί οι δρομείς δεν μπορούν να ονομάζονται και, ως εκ τούτου, δεν μπορούν να ελεγχθούν ή να παραπεμφθούν από άλλο μέρος του κώδικα. Μπορούμε να αναφερθούμε μόνο στον πιο πρόσφατο δρομέα μέσω των χαρακτηριστικών του δρομέα.
Ρητός δρομέας
Επιτρέπεται στους προγραμματιστές να δημιουργήσουν μια ονομαστική περιοχή περιβάλλοντος για να εκτελέσουν τις λειτουργίες DML τους για να αποκτήσουν μεγαλύτερο έλεγχο σε αυτήν. Ο ρητός δρομέας πρέπει να οριστεί στην ενότητα δήλωσης του μπλοκ PL / SQL και δημιουργείται για τη δήλωση «SELECT» που πρέπει να χρησιμοποιηθεί στον κώδικα.
Ακολουθούν βήματα που σχετίζονται με την εργασία με ρητούς δρομείς.
- Δήλωση του δρομέα
Η δήλωση του δρομέα σημαίνει απλώς τη δημιουργία μιας ονομασμένης περιοχής περιβάλλοντος για τη δήλωση «SELECT» που ορίζεται στο τμήμα δήλωσης. Το όνομα αυτής της περιοχής περιβάλλοντος είναι ίδιο με το όνομα του δρομέα.
- Άνοιγμα δρομέα
Το άνοιγμα του δρομέα θα δώσει εντολή στο PL / SQL να εκχωρήσει τη μνήμη για αυτόν τον δρομέα. Θα κάνει τον κέρσορα έτοιμο να πάρει τις εγγραφές.
- Λήψη δεδομένων από τον Δρομέα
Σε αυτήν τη διαδικασία, εκτελείται η δήλωση «SELECT» και οι σειρές που λαμβάνονται αποθηκεύονται στην εκχωρημένη μνήμη. Αυτά ονομάζονται τώρα ως ενεργά σύνολα. Η ανάκτηση δεδομένων από τον κέρσορα είναι μια δραστηριότητα σε επίπεδο εγγραφής που σημαίνει ότι μπορούμε να έχουμε πρόσβαση στα δεδομένα με τρόπο εγγραφής ανά εγγραφή.
Κάθε δήλωση ανάκτησης θα πάρει ένα ενεργό σύνολο και διατηρεί τις πληροφορίες αυτής της συγκεκριμένης εγγραφής. Αυτή η δήλωση είναι ίδια με τη δήλωση «SELECT» που ανακτά την εγγραφή και εκχωρεί στη μεταβλητή στον όρο «INTO», αλλά δεν θα ρίξει εξαιρέσεις.
- Κλείσιμο του δρομέα
Μόλις ανακτηθεί όλη η εγγραφή τώρα, πρέπει να κλείσουμε τον κέρσορα έτσι ώστε η μνήμη που έχει εκχωρηθεί σε αυτήν την περιοχή περιβάλλοντος να απελευθερωθεί.
Σύνταξη:
DECLARECURSORIS
- Στην παραπάνω σύνταξη, το τμήμα δήλωσης περιέχει τη δήλωση του δρομέα και τη μεταβλητή του δρομέα στην οποία θα εκχωρηθούν τα ανακτημένα δεδομένα.
- Ο δρομέας δημιουργείται για τη δήλωση «SELECT» που δίνεται στη δήλωση δρομέα.
- Στο τμήμα εκτέλεσης, ο δηλωμένος δρομέας ανοίγει, ανακτά και κλείνει.
Χαρακτηριστικά του δρομέα
Τόσο ο έμμεσος δρομέας όσο και ο ρητός δρομέας έχουν συγκεκριμένα χαρακτηριστικά στα οποία μπορείτε να έχετε πρόσβαση. Αυτά τα χαρακτηριστικά παρέχουν περισσότερες πληροφορίες σχετικά με τις λειτουργίες του δρομέα. Ακολουθούν τα διαφορετικά χαρακτηριστικά του δρομέα και η χρήση τους.
Χαρακτηριστικό δρομέα | Περιγραφή |
%ΒΡΕΘΗΚΑΝ | Επιστρέφει το αποτέλεσμα Boolean 'TRUE' εάν η πιο πρόσφατη λειτουργία ανάκτησης απέκτησε με επιτυχία μια εγγραφή, αλλιώς θα επιστρέψει FALSE. |
%ΔΕΝ ΒΡΕΘΗΚΕ | Αυτό λειτουργεί αντίθετα με το% FOUND, θα επιστρέψει 'TRUE' εάν η πιο πρόσφατη λειτουργία ανάκτησης δεν μπόρεσε να πάρει οποιαδήποτε εγγραφή. |
%ΕΙΝΑΙ ΑΝΟΙΧΤΟ | Επιστρέφει το Boolean αποτέλεσμα 'TRUE' εάν ο δεδομένος δρομέας έχει ήδη ανοίξει, αλλιώς επιστρέφει 'FALSE' |
% ROWCOUNT | Επιστρέφει την αριθμητική τιμή. Δίνει τον πραγματικό αριθμό των εγγραφών που επηρεάστηκαν από τη δραστηριότητα DML. |
Παράδειγμα 1 : Σε αυτό το παράδειγμα, θα δούμε πώς να δηλώνουμε, να ανοίγουμε, να παίρνουμε και να κλείνουμε τον ρητό δρομέα.
Θα προβάλλουμε όλο το όνομα του υπαλλήλου από τον πίνακα emp χρησιμοποιώντας έναν κέρσορα. Θα χρησιμοποιήσουμε επίσης το χαρακτηριστικό κέρσορα για να ρυθμίσουμε το βρόχο ώστε να πάρει όλη την εγγραφή από τον κέρσορα.
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;lv_emp_name emp.emp_name%type;BEGINOPEN guru99_det;LOOPFETCH guru99_det INTO lv_emp_name;IF guru99_det%NOTFOUNDTHENEXIT;END IF;Dbms_output.put_line(‘Employee Fetched:‘||lv_emp_name);END LOOP;Dbms_output.put_line(‘Total rows fetched is‘||guru99_det%R0WCOUNT);CLOSE guru99_det;END:/
Παραγωγή
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYYTotal rows fetched is 3
Επεξήγηση κώδικα:
- Γραμμή κώδικα 2 : Δήλωση του δρομέα guru99_det για δήλωση «SELECT emp_name FROM emp».
- Γραμμή κώδικα 3 : Δήλωση μεταβλητής lv_emp_name.
- Γραμμή κώδικα 5 : Άνοιγμα του δρομέα guru99_det.
- Γραμμή κώδικα 6: Ρύθμιση της δήλωσης Βασικού βρόχου για ανάκτηση όλων των εγγραφών στον πίνακα «emp».
- Γραμμή κώδικα 7: Ανακτά τα δεδομένα guru99_det και αντιστοιχίστε την τιμή στο όνομα_v_emp_name.
- Γραμμή κώδικα 9: Χρησιμοποιώντας το χαρακτηριστικό του δρομέα '% NOTFOUND' για να διαπιστώσουμε αν έχει γίνει ανάκτηση όλων των εγγραφών του δρομέα. Εάν ληφθεί τότε θα επιστρέψει «TRUE» και ο έλεγχος θα βγει από τον βρόχο, αλλιώς το στοιχείο ελέγχου θα συνεχίσει να ανακτά τα δεδομένα από το δρομέα και θα εκτυπώσει τα δεδομένα.
- Γραμμή κωδικού 11: Συνθήκη ΕΞΟΔΟΥ για τη δήλωση βρόχου.
- Γραμμή κώδικα 12: Εκτυπώστε το ανακτηθέν όνομα υπαλλήλου.
- Γραμμή κώδικα 14: Χρησιμοποιώντας το χαρακτηριστικό κέρσορα '% ROWCOUNT' για να βρεις τον συνολικό αριθμό εγγραφών που επηρεάστηκαν / ανακτήθηκαν στον κέρσορα.
- Γραμμή κώδικα 15: Μετά την έξοδο από το βρόχο ο δρομέας είναι κλειστός και η μνήμη που εκχωρείται απελευθερώνεται.
Για δήλωση δρομέα βρόχου
Η δήλωση "FOR LOOP" μπορεί να χρησιμοποιηθεί για εργασία με δρομείς. Μπορούμε να δώσουμε το όνομα του δρομέα αντί του ορίου εύρους στη δήλωση βρόχου FOR, έτσι ώστε ο βρόχος να λειτουργεί από την πρώτη εγγραφή του δρομέα έως την τελευταία εγγραφή του δρομέα. Η μεταβλητή του δρομέα, το άνοιγμα του δρομέα, η ανάκτηση και το κλείσιμο του δρομέα θα γίνει σιωπηρά από το βρόχο FOR.
Σύνταξη:
DECLARECURSORIS
- Στην παραπάνω σύνταξη, το τμήμα δήλωσης περιέχει τη δήλωση του δρομέα.
- Ο δρομέας δημιουργείται για τη δήλωση «SELECT» που δίνεται στη δήλωση δρομέα.
- Στο τμήμα εκτέλεσης, ο δηλωμένος δρομέας έχει ρυθμιστεί στο βρόχο FOR και η μεταβλητή βρόχου «I» θα συμπεριφέρεται ως μεταβλητή δρομέα σε αυτήν την περίπτωση.
Παράδειγμα 1 : Σε αυτό το παράδειγμα, θα προβάλλουμε όλο το όνομα του υπαλλήλου από τον πίνακα emp χρησιμοποιώντας έναν βρόχο κέρσορα-ΓΙΑ.
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;BEGINFOR lv_emp_name IN guru99_detLOOPDbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);END LOOP;END;/
Παραγωγή
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY
Επεξήγηση κώδικα:
- Γραμμή κώδικα 2 : Δήλωση του δρομέα guru99_det για δήλωση «SELECT emp_name FROM emp».
- Γραμμή κώδικα 4 : Κατασκευή του βρόχου «FOR» για τον κέρσορα με τη μεταβλητή βρόχου lv_emp_name.
- Γραμμή κώδικα 5: Εκτύπωση του ονόματος εργαζομένου σε κάθε επανάληψη του βρόχου.
- Γραμμή κώδικα 8: Έξοδος από το βρόχο
Σημείωση: Στο βρόχο Cursor-FOR, τα χαρακτηριστικά του δρομέα δεν μπορούν να χρησιμοποιηθούν αφού το άνοιγμα, η ανάκτηση και το κλείσιμο του δρομέα γίνεται σιωπηρά από το βρόχο FOR.