Το BULK COLLECT μειώνει τους διακόπτες περιβάλλοντος μεταξύ SQL και PL / SQL και επιτρέπει στον SQL engine να ανακτήσει τις εγγραφές ταυτόχρονα.
Το Oracle PL / SQL παρέχει τη λειτουργικότητα της μαζικής ανάκτησης των εγγραφών αντί της ανάκτησης ένα προς ένα. Αυτό το BULK COLLECT μπορεί να χρησιμοποιηθεί στη δήλωση 'SELECT' για τη μαζική συμπλήρωση των εγγραφών ή τη μαζική λήψη του δρομέα. Δεδομένου ότι το BULK COLLECT ανακτά την εγγραφή σε BULK, η ρήτρα INTO πρέπει πάντα να περιέχει μια μεταβλητή τύπου συλλογής. Το κύριο πλεονέκτημα της χρήσης BULK COLLECT είναι ότι αυξάνει την απόδοση μειώνοντας την αλληλεπίδραση μεταξύ βάσης δεδομένων και PL / SQL κινητήρα.
Σύνταξη:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
Στην παραπάνω σύνταξη, το BULK COLLECT χρησιμοποιείται για τη συλλογή δεδομένων από τη δήλωση «SELECT» και «FETCH».
Σε αυτό το σεμινάριο θα μάθετε-
ΜΟΡΦΗ Ρήτρα
ΠΕΡΙΟΡΙΣΜΟΣ ρήτρα
BULK COLLECT Χαρακτηριστικά
ΜΟΡΦΗ Ρήτρα
Το FORALL επιτρέπει την εκτέλεση των λειτουργιών DML σε δεδομένα μαζικά. Είναι παρόμοιο με αυτό της δήλωσης βρόχου FOR εκτός από το FOR loop, τα πράγματα συμβαίνουν σε επίπεδο ρεκόρ, ενώ στο FORALL δεν υπάρχει έννοια LOOP. Αντίθετα, όλα τα δεδομένα που υπάρχουν στο δεδομένο εύρος επεξεργάζονται ταυτόχρονα.
Σύνταξη:
FORALL in… ;
Στην παραπάνω σύνταξη, η δεδομένη λειτουργία DML θα εκτελεστεί για ολόκληρα τα δεδομένα που υπάρχουν μεταξύ χαμηλότερου και υψηλότερου εύρους.
ΠΕΡΙΟΡΙΣΜΟΣ ρήτρα
Η έννοια μαζικής συλλογής φορτώνει ολόκληρα τα δεδομένα στη μεταβλητή συλλογής στόχων ως μαζική, δηλαδή ολόκληρα τα δεδομένα θα συμπληρωθούν στη μεταβλητή συλλογής με μία κίνηση. Αλλά αυτό δεν συνιστάται όταν η συνολική εγγραφή που πρέπει να φορτωθεί είναι πολύ μεγάλη, γιατί όταν το PL / SQL προσπαθεί να φορτώσει ολόκληρα τα δεδομένα καταναλώνει περισσότερη μνήμη συνεδρίας. Ως εκ τούτου, είναι πάντα καλό να περιορίζετε το μέγεθος αυτής της λειτουργίας μαζικής συλλογής.
Ωστόσο, αυτό το όριο μεγέθους μπορεί να επιτευχθεί εύκολα εισάγοντας τη συνθήκη ROWNUM στη δήλωση «SELECT», ενώ στην περίπτωση του δρομέα αυτό δεν είναι δυνατό.
Για να ξεπεραστεί αυτό το Oracle έχει παράσχει ρήτρα «LIMIT» που καθορίζει τον αριθμό των εγγραφών που πρέπει να συμπεριληφθούν στο μεγαλύτερο μέρος.
Σύνταξη:
FETCH BULK COLLECT INTO LIMIT ;
Στην παραπάνω σύνταξη, η δήλωση ανάκτησης δρομέα χρησιμοποιεί τη δήλωση BULK COLLECT μαζί με τον όρο LIMIT.
BULK COLLECT Χαρακτηριστικά
Παρόμοια με τα χαρακτηριστικά του δρομέα, το BULK COLLECT έχει% BULK_ROWCOUNT (n) που επιστρέφει τον αριθμό των σειρών που επηρεάζονται στη n η δήλωση DML της δήλωσης FORALL, δηλαδή θα δώσει τον αριθμό των εγγραφών που επηρεάζονται στη δήλωση FORALL για κάθε μεμονωμένη τιμή από τη συλλογή μεταβλητός. Ο όρος «n» υποδεικνύει την ακολουθία της τιμής στη συλλογή, για την οποία απαιτείται ο αριθμός σειράς.
Παράδειγμα 1 : Σε αυτό το παράδειγμα, θα προβάλλουμε όλο το όνομα του υπαλλήλου από τον πίνακα emp χρησιμοποιώντας BULK COLLECT και θα αυξήσουμε επίσης τον μισθό όλων των υπαλλήλων κατά 5000 χρησιμοποιώντας το FORALL.
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;TYPE lv_emp_name_tbl IS TABLE OF VARCHAR2(50);lv_emp_name lv_emp_name_tbl;BEGINOPEN guru99_det;FETCH guru99_det BULK COLLECT INTO lv_emp_name LIMIT 5000;FOR c_emp_name IN lv_emp_name.FIRST… lv_emp_name.LASTLOOPDbms_output.put_line(‘Employee Fetched:‘||c_emp_name);END LOOP:FORALL i IN lv_emp_name.FIRST… lv emp_name.LASTUPDATE emp SET salaiy=salary+5000 WHERE emp_name=lv_emp_name(i);COMMIT; Dbms_output.put_line(‘Salary Updated‘);CLOSE guru99_det;END;/