Oracle Δρομέας PL/SQL: Implicit, Explicit, For Loop με Παράδειγμα

Τι είναι το CURSOR στο PL/SQL;

Ένας δρομέας είναι ένας δείκτης σε αυτήν την περιοχή περιβάλλοντος. Oracle δημιουργεί μια περιοχή περιβάλλοντος για την επεξεργασία μιας δήλωσης SQL που περιέχει όλες τις πληροφορίες σχετικά με τη δήλωση.

Το PL/SQL επιτρέπει στον προγραμματιστή να ελέγχει την περιοχή περιβάλλοντος μέσω του δρομέα. Ένας δρομέας κρατά τις σειρές που επιστρέφονται από την πρόταση SQL. Το σύνολο των γραμμών που διατηρεί ο δρομέας αναφέρεται ως ενεργό σύνολο. Αυτοί οι δρομείς μπορούν επίσης να ονομαστούν έτσι ώστε να μπορούν να αναφέρονται από άλλη θέση του κώδικα.

Ο κέρσορας είναι δύο τύπων.

  • Σιωπηρός Δρομέας
  • Σαφής Δρομέας

Σιωπηρός Δρομέας

Κάθε φορά που πραγματοποιούνται λειτουργίες DML στη βάση δεδομένων, δημιουργείται ένας σιωπηρός δρομέας που κρατά τις σειρές που επηρεάζονται, στη συγκεκριμένη λειτουργία. Αυτοί οι δρομείς δεν μπορούν να ονομαστούν και, ως εκ τούτου, δεν μπορούν να ελεγχθούν ή να παραπεμφθούν από άλλη θέση του κώδικα. Μπορούμε να αναφερθούμε μόνο στον πιο πρόσφατο δρομέα μέσω των χαρακτηριστικών του δρομέα.

Σαφής Δρομέας

Επιτρέπεται στους προγραμματιστές να δημιουργήσουν ονομασμένη περιοχή περιβάλλοντος για να εκτελέσουν τις λειτουργίες DML τους για να αποκτήσουν περισσότερο έλεγχο σε αυτήν. Ο ρητός κέρσορας θα πρέπει να οριστεί στην ενότητα δήλωση του Μπλοκ PL/SQL, και δημιουργείται για τη δήλωση 'SELECT' που πρέπει να χρησιμοποιηθεί στον κώδικα.

Ακολουθούν τα βήματα που αφορούν την εργασία με ρητούς δρομείς.

  • Δήλωση του δρομέα Η δήλωση του δρομέα σημαίνει απλώς τη δημιουργία μιας ονομαζόμενης περιοχής περιβάλλοντος για τη δήλωση 'SELECT' που ορίζεται στο τμήμα δήλωσης. Το όνομα αυτής της περιοχής περιβάλλοντος είναι ίδιο με το όνομα του δρομέα.
  • Άνοιγμα δρομέαΑνοίγοντας τον κέρσορα θα δοθούν οδηγίες στο PL / SQL για να εκχωρήσετε τη μνήμη για αυτόν τον κέρσορα. Θα κάνει τον κέρσορα έτοιμο να πάρει τις εγγραφές.
  • Ανάκτηση δεδομένων από τον δρομέαΣε αυτή τη διαδικασία, εκτελείται η δήλωση 'SELECT' και οι σειρές που ανακτήθηκαν αποθηκεύονται στην εκχωρημένη μνήμη. Αυτά ονομάζονται πλέον ενεργά σύνολα. Η ανάκτηση δεδομένων από τον κέρσορα είναι μια δραστηριότητα σε επίπεδο εγγραφής που σημαίνει ότι μπορούμε να έχουμε πρόσβαση στα δεδομένα με τρόπο εγγραφή προς εγγραφή. Κάθε δήλωση ανάκτησης θα φέρει ένα ενεργό σύνολο και περιέχει τις πληροφορίες της συγκεκριμένης εγγραφής. Αυτή η δήλωση είναι ίδια με τη δήλωση "SELECT" που ανακτά την εγγραφή και εκχωρεί στη μεταβλητή στον όρο "INTO", αλλά δεν θα δημιουργήσει εξαιρέσεις.
  • Κλείσιμο του δρομέαΜόλις ληφθεί όλη η εγγραφή τώρα, πρέπει να κλείσουμε τον κέρσορα έτσι ώστε να απελευθερωθεί η μνήμη που έχει εκχωρηθεί σε αυτήν την περιοχή περιβάλλοντος.

Σύνταξη

DECLARE
CURSOR <cursor_name> IS <SELECT statement^>
<cursor_variable declaration>
BEGIN
OPEN <cursor_name>;
FETCH <cursor_name> INTO <cursor_variable>;
.
.
CLOSE <cursor_name>;
END;
  • Στην παραπάνω σύνταξη, το μέρος της δήλωσης περιέχει τη δήλωση του δρομέα και τη μεταβλητή δρομέα στην οποία θα εκχωρηθούν τα δεδομένα που ανακτήθηκαν.
  • Ο κέρσορας δημιουργείται για τη δήλωση 'SELECT' που δίνεται στη δήλωση του δρομέα.
  • Στο μέρος εκτέλεσης, ο δηλωμένος δρομέας ανοίγει, συλλέγεται και κλείνει.

Χαρακτηριστικά δρομέα

Τόσο ο σιωπηρός δρομέας όσο και ο ρητός δρομέας έχουν ορισμένα χαρακτηριστικά στα οποία είναι δυνατή η πρόσβαση. Αυτά τα χαρακτηριστικά παρέχουν περισσότερες πληροφορίες σχετικά με τις λειτουργίες του δρομέα. Παρακάτω είναι τα διαφορετικά χαρακτηριστικά του δρομέα και η χρήση τους.

Χαρακτηριστικό δρομέα Περιγραφή
%ΒΡΕΘΗΚΑΝ Επιστρέφει το Boolean αποτέλεσμα "TRUE" εάν η πιο πρόσφατη λειτουργία ανάκτησης έλαβε μια εγγραφή με επιτυχία, διαφορετικά θα επιστρέψει FALSE.
%ΔΕΝ ΒΡΕΘΗΚΕ Αυτό λειτουργεί αντίθετα από το %FOUND και θα επιστρέψει "TRUE" εάν η πιο πρόσφατη λειτουργία ανάκτησης δεν μπορούσε να ανακτήσει καμία εγγραφή.
%ΕΙΝΑΙ ΑΝΟΙΧΤΟ Επιστρέφει το Boolean αποτέλεσμα "TRUE" εάν ο συγκεκριμένος δρομέας είναι ήδη ανοιχτός, διαφορετικά επιστρέφει "FALSE"
% rowCount Επιστρέφει την αριθμητική τιμή. Δίνει τον πραγματικό αριθμό των εγγραφών που επηρεάστηκαν από τη δραστηριότητα DML.

Παράδειγμα ρητού δρομέα:

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

Θα προβάλουμε όλο το όνομα του υπαλλήλου από τον πίνακα emp χρησιμοποιώντας έναν δρομέα. Θα χρησιμοποιήσουμε επίσης το χαρακτηριστικό δρομέα για να ρυθμίσουμε τον βρόχο ώστε να λαμβάνει όλη την εγγραφή από τον κέρσορα.

Oracle Δρομέας PL/SQL

DECLARE
CURSOR guru99_det IS SELECT emp_name FROM emp;
lv_emp_name emp.emp_name%type;

BEGIN
OPEN guru99_det;

LOOP
FETCH guru99_det INTO lv_emp_name;
IF guru99_det%NOTFOUND
THEN
EXIT;
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:BBB
Employee Fetched:XXX
Employee Fetched:YYY 
Total rows fetched is 3

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

  • Κωδικός γραμμή 2: Δήλωση του δρομέα guru99_det για την πρόταση 'SELECT emp_name FROM emp'.
  • Κωδικός γραμμή 3: Δήλωση μεταβλητής lv_emp_name.
  • Κωδικός γραμμή 5: Άνοιγμα του δρομέα guru99_det.
  • Κωδικός γραμμή 6: Ρύθμιση της δήλωσης Βασικού βρόχου για ανάκτηση όλων των εγγραφών στον πίνακα "emp".
  • Κωδικός γραμμή 7: Ανακτά τα δεδομένα guru99_det και εκχωρεί την τιμή στο lv_emp_name.
  • Κωδικός γραμμή 9: Χρησιμοποιώντας το χαρακτηριστικό του δρομέα '%NOTFOUND' για να βρείτε αν έχει ληφθεί όλη η εγγραφή στον κέρσορα. Εάν ληφθεί, τότε θα επιστρέψει "TRUE" και το στοιχείο ελέγχου θα βγει από τον βρόχο, διαφορετικά το στοιχείο ελέγχου θα συνεχίσει να λαμβάνει τα δεδομένα από τον κέρσορα και να εκτυπώνει τα δεδομένα.
  • Κωδικός γραμμή 11: Συνθήκη EXIT για την πρόταση βρόχου.
  • Κωδικός γραμμή 12: Εκτυπώστε το όνομα υπαλλήλου που ανακτήθηκε.
  • Κωδικός γραμμή 14: Χρησιμοποιώντας το χαρακτηριστικό δρομέα '%ROWCOUNT' για να βρείτε τον συνολικό αριθμό των εγγραφών που επηρεάστηκαν/ανακτήθηκαν στον κέρσορα.
  • Κωδικός γραμμή 15: Μετά την έξοδο από τον βρόχο ο κέρσορας κλείνει και η μνήμη που εκχωρείται ελευθερώνεται.

Δήλωση δρομέα βρόχου FOR

Η δήλωση "FOR LOOP" μπορεί να χρησιμοποιηθεί για εργασία με δρομείς. Μπορούμε να δώσουμε το όνομα του δρομέα αντί για το όριο εύρους στη δήλωση βρόχου FOR, έτσι ώστε ο βρόχος να λειτουργεί από την πρώτη εγγραφή του δρομέα έως την τελευταία εγγραφή του δρομέα. Η μεταβλητή του δρομέα, το άνοιγμα του δρομέα, η ανάκτηση και το κλείσιμο του δρομέα θα γίνουν σιωπηρά από τον βρόχο FOR.

Σύνταξη

DECLARE
CURSOR <cursor_name> IS <SELECT statement>;
BEGIN
  FOR I IN <cursor_name>
  LOOP
  .
  .
  END LOOP;
END;
  • Στην παραπάνω σύνταξη, το τμήμα δήλωσης περιέχει τη δήλωση του δρομέα.
  • Ο κέρσορας δημιουργείται για τη δήλωση 'SELECT' που δίνεται στη δήλωση του δρομέα.
  • Στο μέρος εκτέλεσης, ο δηλωμένος κέρσορας ρυθμίζεται στον βρόχο FOR και η μεταβλητή βρόχου 'I' θα συμπεριφέρεται ως μεταβλητή δρομέα σε αυτήν την περίπτωση.

Oracle Παράδειγμα δρομέα για βρόχο:
Σε αυτό το παράδειγμα, θα προβάλλουμε όλο το όνομα υπαλλήλου από τον πίνακα emp χρησιμοποιώντας έναν βρόχο δρομέα-FOR.

DECLARE
CURSOR guru99_det IS SELECT emp_name FROM emp; 
BEGIN
FOR lv_emp_name IN guru99_det
LOOP
Dbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);
END LOOP;
END;
/

Παραγωγή

Employee Fetched:BBB 
Employee Fetched:XXX
Employee Fetched:YYY

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

  • Κωδικός γραμμή 2: Δήλωση του δρομέα guru99_det για την πρόταση 'SELECT emp_name FROM emp'.
  • Κωδικός γραμμή 4: Κατασκευή του βρόχου 'FOR' για τον δρομέα με τη μεταβλητή βρόχου lv_emp_name.
  • Κωδικός γραμμή 5: Εκτύπωση του ονόματος υπαλλήλου σε κάθε επανάληψη του βρόχου.
  • Κωδικός γραμμή 8: Έξοδος από τον βρόχο

Σημείωση: Στον βρόχο Cursor-FOR, τα χαρακτηριστικά του δρομέα δεν μπορούν να χρησιμοποιηθούν καθώς το άνοιγμα, η ανάκτηση και το κλείσιμο του δρομέα γίνεται σιωπηρά από βρόχος ΓΙΑ.

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