Τι είναι το Πακέτο στο Oracle;
Το πακέτο PL / SQL είναι μια λογική ομαδοποίηση ενός σχετικού υποπρογράμματος (διαδικασία / συνάρτηση) σε ένα μόνο στοιχείο. Ένα πακέτο συντάσσεται και αποθηκεύεται ως αντικείμενο βάσης δεδομένων που μπορεί να χρησιμοποιηθεί αργότερα.
Σε αυτό το σεμινάριο, θα μάθετε-
- Συστατικά πακέτων
- Προδιαγραφή πακέτου
- Σώμα συσκευασίας
- Αναφορά στοιχείων πακέτου
- Δημιουργία πακέτου σε PL / SQL
- Προώθηση δηλώσεων
- Χρήση δρομέων σε πακέτο
- Υπερφόρτωση
- Εξάρτηση σε πακέτα
- Πληροφορίες πακέτου
- UTL FILE - Μια επισκόπηση
Συστατικά πακέτων
Το πακέτο PL / SQL έχει δύο συστατικά.
- Προδιαγραφή πακέτου
- Σώμα συσκευασίας
Προδιαγραφή πακέτου
Η προδιαγραφή πακέτου αποτελείται από μια δήλωση όλων των δημόσιων μεταβλητών, δρομέων, αντικειμένων, διαδικασιών, συναρτήσεων και εξαιρέσεων.
Ακολουθούν μερικά χαρακτηριστικά της προδιαγραφής πακέτου.
- Τα στοιχεία που δηλώνονται όλα στην προδιαγραφή είναι προσβάσιμα από έξω από το πακέτο. Τέτοια στοιχεία είναι γνωστά ως δημόσια στοιχεία.
- Η προδιαγραφή πακέτου είναι ένα αυτόνομο στοιχείο που σημαίνει ότι μπορεί να υπάρχει μόνη χωρίς το σώμα του πακέτου.
- Κάθε φορά που ένα πακέτο αναφέρεται μια παρουσία του πακέτου δημιουργείται για τη συγκεκριμένη περίοδο λειτουργίας.
- Μετά τη δημιουργία της παρουσίας για μια περίοδο σύνδεσης, όλα τα στοιχεία πακέτου που ξεκινούν σε αυτήν την παρουσία ισχύουν μέχρι το τέλος της περιόδου λειτουργίας.
Σύνταξη
CREATE [OR REPLACE] PACKAGEIS … END
Η παραπάνω σύνταξη δείχνει τη δημιουργία προδιαγραφών πακέτου.
Σώμα συσκευασίας
Αποτελείται από τον ορισμό όλων των στοιχείων που υπάρχουν στην προδιαγραφή του πακέτου. Μπορεί επίσης να έχει έναν ορισμό των στοιχείων που δεν δηλώνονται στις προδιαγραφές, αυτά τα στοιχεία ονομάζονται ιδιωτικά στοιχεία και μπορούν να κληθούν μόνο μέσα από το πακέτο.
Ακολουθούν τα χαρακτηριστικά ενός σώματος συσκευασίας.
- Θα πρέπει να περιέχει ορισμούς για όλα τα υποπρογράμματα / δρομείς που έχουν δηλωθεί στις προδιαγραφές.
- Μπορεί επίσης να έχει περισσότερα υποπρογράμματα ή άλλα στοιχεία που δεν δηλώνονται στις προδιαγραφές. Αυτά ονομάζονται ιδιωτικά στοιχεία.
- Είναι ένα αξιόπιστο αντικείμενο και εξαρτάται από τις προδιαγραφές του πακέτου.
- Η κατάσταση του σώματος του πακέτου γίνεται «Άκυρο» κάθε φορά που καταρτίζεται η προδιαγραφή. Επομένως, πρέπει να μεταγλωττιστεί εκ νέου κάθε φορά μετά τη συλλογή των προδιαγραφών.
- Τα ιδιωτικά στοιχεία πρέπει να καθοριστούν πρώτα πριν χρησιμοποιηθούν στο σώμα του πακέτου.
- Το πρώτο μέρος του πακέτου είναι το μέρος της παγκόσμιας δήλωσης. Αυτό περιλαμβάνει μεταβλητές, δρομείς και ιδιωτικά στοιχεία (δήλωση προώθησης) που είναι ορατά σε ολόκληρο το πακέτο.
- Το τελευταίο μέρος του πακέτου είναι μέρος προετοιμασίας πακέτου που εκτελεί μία φορά κάθε φορά που ένα πακέτο αναφέρεται πρώτη φορά στη συνεδρία.
Σύνταξη:
CREATE [OR REPLACE] PACKAGE BODYIS . END
- Η παραπάνω σύνταξη δείχνει τη δημιουργία του σώματος του πακέτου.
Τώρα θα δούμε πώς να παραπέμπουμε στοιχεία πακέτων στο πρόγραμμα.
Αναφορά στοιχείων πακέτου
Μόλις τα στοιχεία δηλωθούν και καθοριστούν στο πακέτο, πρέπει να παραπέμψουμε τα στοιχεία για να τα χρησιμοποιήσουμε.
Όλα τα δημόσια στοιχεία του πακέτου μπορούν να αναφερθούν καλώντας το όνομα του πακέτου ακολουθούμενο από το όνομα του στοιχείου που διαχωρίζεται με τελεία, δηλαδή «
Η δημόσια μεταβλητή του πακέτου μπορεί επίσης να χρησιμοποιηθεί με τον ίδιο τρόπο για την εκχώρηση και ανάκτηση τιμών από αυτές, π.χ. «
Δημιουργία πακέτου σε PL / SQL
Στο PL / SQL κάθε φορά που ένα πακέτο αναφέρεται / καλείται σε μια συνεδρία θα δημιουργηθεί μια νέα παρουσία για αυτό το πακέτο.
Η Oracle παρέχει μια δυνατότητα προετοιμασίας στοιχείων πακέτων ή εκτέλεσης οποιασδήποτε δραστηριότητας κατά τη δημιουργία αυτής της παρουσίας μέσω του «Initialization Package»
Αυτό δεν είναι παρά ένα μπλοκ εκτέλεσης που γράφεται στο σώμα του πακέτου μετά τον ορισμό όλων των στοιχείων του πακέτου. Αυτό το μπλοκ θα εκτελείται κάθε φορά που ένα πακέτο αναφέρεται για πρώτη φορά στη συνεδρία.
Σύνταξη
CREATE [OR REPLACE] PACKAGE BODYIS .BEGINE END
- Η παραπάνω σύνταξη δείχνει τον ορισμό της αρχικοποίησης πακέτων στο σώμα του πακέτου.
Προώθηση δηλώσεων
Προώθηση δήλωσης / αναφοράς στο πακέτο δεν είναι τίποτα άλλο από την ξεχωριστή δήλωση των ιδιωτικών στοιχείων και τον ορισμό του στο μεταγενέστερο μέρος του σώματος του πακέτου.
Τα ιδιωτικά στοιχεία μπορούν να αναφερθούν μόνο εάν έχουν ήδη δηλωθεί στο σώμα του πακέτου. Για το λόγο αυτό, χρησιμοποιείται η δήλωση προώθησης. Αλλά είναι μάλλον ασυνήθιστο να χρησιμοποιείται γιατί τις περισσότερες φορές τα ιδιωτικά στοιχεία δηλώνονται και ορίζονται στο πρώτο μέρος του σώματος του πακέτου.
Η δήλωση προώθησης είναι μια επιλογή που παρέχεται από την Oracle, δεν είναι υποχρεωτική και η χρήση και η μη χρήση εξαρτάται από τις απαιτήσεις του προγραμματιστή.
Σύνταξη:
CREATE [OR REPLACE] PACKAGE BODYIS … … .BEGIN ;END
Η παραπάνω σύνταξη δείχνει δήλωση προώθησης. Τα ιδιωτικά στοιχεία δηλώνονται ξεχωριστά στο μπροστινό μέρος του πακέτου, και έχουν καθοριστεί στο μεταγενέστερο μέρος.
Χρήση δρομέων σε πακέτο
Σε αντίθεση με άλλα στοιχεία, κάποιος πρέπει να είναι προσεκτικός στη χρήση των δρομέων μέσα στο πακέτο.
Εάν ο δρομέας ορίζεται στην προδιαγραφή πακέτου ή σε καθολικό μέρος του σώματος του πακέτου, τότε ο δρομέας μόλις ανοίξει θα παραμείνει μέχρι το τέλος της περιόδου λειτουργίας.
Επομένως, πρέπει κανείς να χρησιμοποιεί πάντα τα χαρακτηριστικά του δρομέα '% ISOPEN' για να επαληθεύσει την κατάσταση του δρομέα προτού το αναφέρει.
Υπερφόρτωση
Η υπερφόρτωση είναι η έννοια της ύπαρξης πολλών υποπρογραμμάτων με το ίδιο όνομα. Αυτά τα υποπρογράμματα θα διαφέρουν μεταξύ τους από έναν αριθμό παραμέτρων ή τύπων παραμέτρων ή τύπου επιστροφής, δηλαδή υποπρογράμματος με το ίδιο όνομα, αλλά με διαφορετικό αριθμό παραμέτρων, διαφορετικός τύπος παραμέτρων ή διαφορετικός τύπος τύπου θεωρείται υπερφόρτωση.
Αυτό είναι χρήσιμο όταν πολλά υποπρογράμματα πρέπει να κάνουν την ίδια εργασία, αλλά ο τρόπος κλήσης καθενός από αυτούς πρέπει να είναι διαφορετικός. Σε αυτήν την περίπτωση, το όνομα του υποπρογράμματος θα παραμείνει ίδιο για όλους και οι παράμετροι θα αλλάξουν σύμφωνα με τη δήλωση κλήσης.
Παράδειγμα 1 : Σε αυτό το παράδειγμα, πρόκειται να δημιουργήσουμε ένα πακέτο για να λάβουμε και να ορίσουμε τις τιμές των πληροφοριών των υπαλλήλων στον πίνακα «emp». Η συνάρτηση get_record θα επιστρέψει την έξοδο τύπου εγγραφής για τον δεδομένο αριθμό υπαλλήλου και η διαδικασία set_record θα εισαγάγει την εγγραφή τύπου εγγραφής στον πίνακα emp.
Βήμα 1) Δημιουργία προδιαγραφών πακέτου
CREATE OR REPLACE PACKAGE guru99_get_setISPROCEDURE set_record (p_emp_rec IN emp%ROWTYPE);FUNCTION get record (p_emp no IN NUMBER) RETURN emp%ROWTYPE;END guru99_get_set:/
Παραγωγή:
Package created
Επεξήγηση κώδικα
- Γραμμή κωδικού 1-5 : Δημιουργία προδιαγραφών πακέτου για guru99_get_set με μία διαδικασία και μία λειτουργία. Αυτά τα δύο είναι πλέον δημόσια στοιχεία αυτού του πακέτου.
Βήμα 2) Το πακέτο περιέχει το σώμα του πακέτου, όπου θα καθοριστούν όλες οι διαδικασίες και οι λειτουργίες. Σε αυτό το βήμα, το Body Package δημιουργείται.
CREATE OR REPLACE PACKAGE BODY guru99_get_setIS PROCEDURE set_record(p_emp_rec IN emp%ROWTYPE)ISPRAGMA AUTONOMOUS_TRANSACTION;BEGININSERT INTO empVALUES(p_emp_rec.emp_name,p_emp_rec.emp_no; p_emp_rec.salary,p_emp_rec.manager);COMMIT;END set_record;FUNCTION get_record(p_emp_no IN NUMBER)RETURN emp%ROWTYPEISl_emp_rec emp%ROWTYPE;BEGINSELECT * INTO l_emp_rec FROM emp where emp_no=p_emp_noRETURN l_emp_rec;END get_record;BEGUN dbms_output.put_line(‘Control is now executing the package initialization part');END guru99_get_set:/
Παραγωγή:
Package body created
Επεξήγηση κώδικα
- Γραμμή κώδικα 7 : Δημιουργία του σώματος του πακέτου.
- Γραμμή κώδικα 9-16 : Ορισμός του στοιχείου 'set_record' που δηλώνεται στις προδιαγραφές. Αυτό είναι ίδιο με τον ορισμό της αυτόνομης διαδικασίας στο PL / SQL.
- Γραμμή κώδικα 17-24: Ορισμός του στοιχείου "get_record". Είναι ίδιο με τον ορισμό της αυτόνομης λειτουργίας.
- Γραμμή κωδικού 25-26: Ορισμός του τμήματος αρχικοποίησης του πακέτου.
Βήμα 3) Δημιουργία ενός ανώνυμου μπλοκ για εισαγωγή και εμφάνιση των εγγραφών με αναφορά στο παραπάνω πακέτο που δημιουργήθηκε.
DECLAREl_emp_rec emp%ROWTYPE;l_get_rec emp%ROWTYPE;BEGINdbms output.put line(‘Insert new record for employee 1004');l_emp_rec.emp_no:=l004;l_emp_rec.emp_name:='CCC';l_emp_rec.salary~20000;l_emp_rec.manager:=’BBB’;guru99_get_set.set_record(1_emp_rec);dbms_output.put_line(‘Record inserted');dbms output.put line(‘Calling get function to display the inserted record'):l_get_rec:=guru99_get_set.get_record(1004);dbms_output.put_line(‘Employee name: ‘||l_get_rec.emp_name);dbms_output.put_line(‘Employee number:‘||l_get_rec.emp_no);dbms_output.put_line(‘Employee salary:‘||l_get_rec.salary');dbms output.put line(‘Employee manager:‘||1_get_rec.manager);END:/
Παραγωγή:
Insert new record for employee 1004Control is now executing the package initialization partRecord insertedCalling get function to display the inserted recordEmployee name: CCCEmployee number: 1004Employee salary: 20000Employee manager: BBB
Επεξήγηση κώδικα:
- Γραμμή κωδικού 34-37: Συμπλήρωση των δεδομένων για μεταβλητή τύπου εγγραφής σε ένα ανώνυμο μπλοκ για να καλέσετε το στοιχείο «set_record» του πακέτου.
- Γραμμή κωδικού 38: Έγινε κλήση στο «set_record» του πακέτου guru99_get_set. Τώρα το πακέτο είναι instantiated και θα παραμείνει μέχρι το τέλος της συνεδρίας.
- Το τμήμα αρχικοποίησης πακέτου εκτελείται αφού αυτή είναι η πρώτη κλήση στο πακέτο.
- Η εγγραφή εισήχθη από το στοιχείο «set_record» στον πίνακα.
- Γραμμή κωδικού 41: Κλήση του στοιχείου "get_record" για εμφάνιση των λεπτομερειών του υπαλλήλου που έχει εισαχθεί.
- Το πακέτο αναφέρεται για δεύτερη φορά κατά τη διάρκεια της κλήσης «get_record» στο πακέτο. Ωστόσο, το μέρος της προετοιμασίας δεν εκτελείται αυτήν τη φορά, καθώς το πακέτο έχει ήδη αρχικοποιηθεί σε αυτήν την περίοδο λειτουργίας.
- Κωδικός 42-45: Εκτύπωση των στοιχείων του υπαλλήλου.
Εξάρτηση σε πακέτα
Δεδομένου ότι το πακέτο είναι η λογική ομαδοποίηση σχετικών πραγμάτων, έχει κάποιες εξαρτήσεις. Ακολουθούν η εξάρτηση που πρέπει να προσέξετε.
- Η προδιαγραφή είναι αυτόνομο αντικείμενο.
- Το σώμα του πακέτου εξαρτάται από τις προδιαγραφές.
- Το σώμα συσκευασίας μπορεί να καταρτιστεί ξεχωριστά. Όποτε καταρτίζονται οι προδιαγραφές, το σώμα πρέπει να μεταγλωττιστεί εκ νέου, καθώς θα καταστεί άκυρο.
- Το υποπρόγραμμα στο σώμα του πακέτου που εξαρτάται από ένα ιδιωτικό στοιχείο πρέπει να οριστεί μόνο μετά τη δήλωση του ιδιωτικού στοιχείου.
- Τα αντικείμενα της βάσης δεδομένων που αναφέρονται στην προδιαγραφή και το σώμα πρέπει να είναι σε έγκυρη κατάσταση κατά τη στιγμή της κατάρτισης του πακέτου.
Πληροφορίες πακέτου
Μόλις δημιουργηθούν οι πληροφορίες πακέτου, οι πληροφορίες πακέτων όπως η προέλευση του πακέτου, οι λεπτομέρειες του υποπρογράμματος και οι λεπτομέρειες υπερφόρτωσης διατίθενται στους πίνακες ορισμού δεδομένων της Oracle.
Ο παρακάτω πίνακας παρέχει τον πίνακα ορισμού δεδομένων και τις πληροφορίες πακέτου που είναι διαθέσιμες στον πίνακα.
Όνομα πίνακα | Περιγραφή | Ερώτηση |
ALL_OBJECT | Δίνει τις λεπτομέρειες του πακέτου, όπως object_id, create_date, last_ddl_time, κλπ. Θα περιέχει τα αντικείμενα που δημιουργήθηκαν από όλους τους χρήστες. | SELECT * FROM all_objects όπου object_name = '
|
USER_OBJECT | Δίνει τις λεπτομέρειες του πακέτου, όπως object_id, create_date, last_ddl_time, κλπ. Θα περιέχει τα αντικείμενα που δημιουργήθηκαν από τον τρέχοντα χρήστη. | SELECT * FROM user_objects όπου object_name = '
|
ALL_SOURCE | Δίνει την πηγή των αντικειμένων που έχουν δημιουργηθεί από όλους τους χρήστες. | SELECT * FROM all_source όπου name = '
|
USER_SOURCE | Δίνει την πηγή των αντικειμένων που δημιουργήθηκαν από τον τρέχοντα χρήστη. | SELECT * FROM user_source όπου name = '
|
ΟΛΕΣ_ ΔΙΑΔΙΚΑΣΙΕΣ | Δίνει τις λεπτομέρειες του υποπρογράμματος όπως το αντικείμενο_id, τις λεπτομέρειες υπερφόρτωσης κ.λπ. που δημιουργήθηκαν από όλους τους χρήστες. | SELECT * FROM all_procedures Where object_name = '
|
USER_PROCEDURES | Δίνει τις λεπτομέρειες του υποπρογράμματος όπως το αντικείμενο_id, τις λεπτομέρειες υπερφόρτωσης κ.λπ. που δημιουργήθηκαν από τον τρέχοντα χρήστη. | SELECT * FROM user_procedures Where object_name = '
|
UTL FILE - Μια επισκόπηση
Το αρχείο UTL είναι το ξεχωριστό βοηθητικό πακέτο που παρέχεται από την Oracle για την εκτέλεση ειδικών εργασιών. Αυτό χρησιμοποιείται κυρίως για την ανάγνωση και την εγγραφή αρχείων του λειτουργικού συστήματος από πακέτα PL / SQL ή υποπρογράμματα. Πήρε τις ξεχωριστές λειτουργίες για να βάλει τις πληροφορίες και να πάρει τις πληροφορίες από αρχεία. Επιτρέπει επίσης την ανάγνωση / εγγραφή στο εγγενές σύνολο χαρακτήρων.
Ο Προγραμματιστής μπορεί να το χρησιμοποιήσει για να γράψει αρχεία λειτουργικού συστήματος οποιουδήποτε τύπου και το αρχείο θα γραφτεί απευθείας στον διακομιστή βάσης δεδομένων. Το όνομα και η διαδρομή καταλόγου θα αναφέρονται κατά τη στιγμή της σύνταξης.
Περίληψη
Έχουμε μάθει τώρα τα πακέτα σε PL / SQL και θα πρέπει τώρα να μπορείτε να εργαστείτε στα ακόλουθα.
- Πακέτα PL / SQL και τα συστατικά του
- Χαρακτηριστικά πακέτων
- Παραπομπή και υπερφόρτωση στοιχείων πακέτου
- Διαχείριση εξαρτήσεων σε πακέτα
- Προβολή πληροφοριών πακέτου
- Τι είναι το αρχείο UTL