ORACLE PL/SQL Cursors Μέρος 1
ΟΡΙΣΜΟΣ Είναι ένας μηχανισμός με τον οποίο ονομάζουμε μια εντολή SELECT και διαχειριζόμαστε ξεχωριστά (ανά εγγραφή) τις πληροφορίες που η εντολή επιλέγει.
Σύνταξη Ρητών Cursors Σκοπός Να χρησιμοποιούμε μεταβλητές PL/SQL τύπου Record Να γράφουμε βρόχους με Cursors
Για τους Cursors Κάθε εντολή SQL που εκτελείται απο τον Oracle Server έχει ενα ξεχωριστό Cursor συνδυασμένο με αυτήν. Έτσι έχουμε: άρρητους (implicit) Cursors που δηλώνονται απο το σύστημα για κάθε DML & SELECT και ρητούς (explicit) Cursors που δηλώνονται απο τον προγραμματιστή.
Λειτουργία των ρητών Cursors
Έλεγχος των ρητών Cursors
Δήλωση του ρητού Cursor CURSOR cursor_name IS select_statement; Χωρίς ΙΝΤΟ Δεκτό το ORDER BY
Παράδειγμα Δήλωσης Cursor DECLARE CURSOR emp_cursor IS SELECT empno, ename FROM emp; BEGIN …………..
Άνοιγμα Cursor Σύνταξη: ΟΡΕΝ Cursor_name Απαραίτητο για να εκτελεσθεί το ερώτημα και να ανεβρεθεί το ενεργό σύνολο εγγραφών. Αν δεν ανεβρεθούν γραμμές δεν δημιουργείται συνθήκη εξαίρεσης Ο έλεγχος γίνεται μετά το FETCH.
Ανάκτηση Δεδομένων απο τον Cursor Σύνταξη: FETCH Cursor_name INTO [variable1,variable2, …| record_name] ;. Οι στήλες και οι μεταβλητές πρέπει να συμπίπτουν ως προς την σειρά και τον τύπο. Δεν δημιουργείται κατάσταση λάθους αν τελειώσουν οι γραμμές.
Ανάκτηση Δεδομένων απο τον Cursor -Παραδείγματα PL/SQL Developer Templates
Κλείσιμο του Cursor Σύνταξη: CLOSE Cursor_name Κλείσιμο μετά την επεξεργασία όλων των γραμμών Μετά το close δεν εκτελείται κανένα fetch Μπορούμε να ανοίξουμε ξανά τον Cursor
CURSOR STATUS %ISOPEN %NOTFOUND %FOUND %ROWCOUNT
Έλεγχος επαναλαμβανόμενων Ανακτήσεων Χρήση Βρόχου (Άρρητα OPEN και CLOSE) Fetch σε κάθε επανάληψη %NOTFOUND για έλεγχο Έλεγχος του STATUS.
Βρόχοι CURSOR με Υποερωτήματα Δεν Δηλώνονται OPEN & CLOSE.
Παράδειγμα BEGIN FOR emp_record IN (SELECT ename, deptno FROM emp) LOOP -- implicit OPEN …….. END LOOP; -- implicit CLOSE END;