Oracle PL/SQL Αποθηκευμένη Διαδικασία & Συναρτήσεις με Παραδείγματα
⚡ Έξυπνη Σύνοψη
Τα υποπρογράμματα PL/SQL είναι ονομασμένα μπλοκ, διαδικασίες και συναρτήσεις, που αποθηκεύονται στη βάση δεδομένων και καλούνται με το όνομά τους. Μια διαδικασία εκτελεί μια διεργασία και μια συνάρτηση επιστρέφει μια τιμή, ανταλλάσσοντας δεδομένα μέσω των παραμέτρων IN, OUT και IN OUT και της λέξης-κλειδιού RETURN.

Τι είναι τα υποπρογράμματα PL/SQL;
Σε αυτό το σεμινάριο, θα δείτε μια λεπτομερή περιγραφή του τρόπου δημιουργίας και εκτέλεσης των επώνυμων μπλοκ, διαδικασιών και συναρτήσεων.
Οι διαδικασίες και οι συναρτήσεις είναι υποπρογράμματα που μπορούν να δημιουργηθούν και να αποθηκευτούν στη βάση δεδομένων ως αντικείμενα βάσης δεδομένων. Μπορούν να κληθούν ή να αναφερθούν και μέσα σε άλλα μπλοκ.
Καλύπτουμε επίσης τις κύριες διαφορές μεταξύ αυτών των δύο υποπρογραμμάτων και συζητάμε τα Oracle ενσωματωμένες λειτουργίες.
Ορολογίες σε υποπρογράμματα PL/SQL
Πριν μάθουμε για τα υποπρογράμματα PL/SQL, συζητάμε τις διάφορες ορολογίες που αποτελούν μέρος αυτών των υποπρογραμμάτων.
Παράμετρος
Μια παράμετρος είναι μια μεταβλητή ή σύμβολο κράτησης θέσης οποιουδήποτε έγκυρου Τύπος δεδομένων PL/SQL μέσω του οποίου το υποπρόγραμμα PL/SQL ανταλλάσσει τιμές με τον κύριο κώδικα. Αυτή η παράμετρος επιτρέπει την εισαγωγή δεδομένων στα υποπρογράμματα και π.χ.tracαξιών από αυτά.
- Αυτές οι παράμετροι θα πρέπει να ορίζονται μαζί με τα υποπρογράμματα τη στιγμή της δημιουργίας.
- Περιλαμβάνονται στην εντολή κλήσης για να αλληλεπιδρούν με τα υποπρογράμματα.
- Ο τύπος δεδομένων της παραμέτρου στο υποπρόγραμμα και η εντολή κλήσης θα πρέπει να είναι οι ίδιοι.
- Το μέγεθος του τύπου δεδομένων δεν πρέπει να αναφέρεται κατά τη δήλωση της παραμέτρου, καθώς το μέγεθος είναι δυναμικό.
Ανάλογα με τον σκοπό τους, οι παράμετροι ταξινομούνται ως εξής:
- Παράμετρος IN
- Παράμετρος OUT
- Παράμετρος IN OUT
Παράμετρος IN
- Χρησιμοποιείται για την παροχή δεδομένων εισόδου στα υποπρογράμματα.
- Είναι μια μεταβλητή μόνο για ανάγνωση μέσα στα υποπρογράμματα· η τιμή της δεν μπορεί να αλλάξει μέσα στο υποπρόγραμμα.
- Στην εντολή κλήσης, μπορεί να είναι μια μεταβλητή, μια κυριολεκτική τιμή ή μια έκφραση, όπως '5*8' ή 'a/b'.
- Από προεπιλογή, οι παράμετροι είναι τύπου IN.
Παράμετρος OUT
- Χρησιμοποιείται για την λήψη δεδομένων εξόδου από τα υποπρογράμματα.
- Είναι μια μεταβλητή ανάγνωσης-εγγραφής μέσα στα υποπρογράμματα· η τιμή της μπορεί να αλλάξει μέσα σε αυτά.
- Στην εντολή κλήσης, θα πρέπει πάντα να υπάρχει μια μεταβλητή που να διατηρεί την τιμή από το υποπρόγραμμα.
Παράμετρος IN OUT
- Χρησιμοποιείται τόσο για την παροχή εισόδου όσο και για την λήψη εξόδου από τα υποπρογράμματα.
- Είναι μια μεταβλητή ανάγνωσης-εγγραφής μέσα στα υποπρογράμματα· η τιμή της μπορεί να αλλάξει μέσα σε αυτά.
- Στην εντολή κλήσης, θα πρέπει πάντα να υπάρχει μια μεταβλητή που να διατηρεί την τιμή από το υποπρόγραμμα.
Ο τύπος της παραμέτρου θα πρέπει να αναφέρεται κατά τη δημιουργία των υποπρογραμμάτων.
ΑΠΌΔΟΣΗ
Η λέξη-κλειδί RETURN δίνει εντολή στον μεταγλωττιστή να αλλάξει τον έλεγχο από το υποπρόγραμμα στην εντολή κλήσης. Σε ένα υποπρόγραμμα, η εντολή RETURN σημαίνει απλώς ότι ο έλεγχος πρέπει να τερματίσει το υποπρόγραμμα. Μόλις ο ελεγκτής βρει την εντολή RETURN, ο κώδικας αφού την παραλείψει, παραλείπεται.
Κανονικά, το γονικό ή κύριο μπλοκ καλεί τα υποπρογράμματα και ο έλεγχος μετατοπίζεται από το γονικό μπλοκ στο καλούμενο υποπρόγραμμα. Η εντολή RETURN στο υποπρόγραμμα επιστρέφει τον έλεγχο πίσω στο γονικό μπλοκ. Στην περίπτωση των συναρτήσεων, η εντολή RETURN επιστρέφει επίσης μια τιμή, ο τύπος δεδομένων της οποίας αναφέρεται κατά τη στιγμή της δήλωσης της συνάρτησης.
Τι είναι μια διαδικασία σε PL/SQL;
A Διαδικασία στην PL/SQL είναι μια μονάδα υποπρογράμματος που αποτελείται από μια ομάδα εντολών PL/SQL που μπορούν να κληθούν με όνομα. Κάθε διαδικασία έχει το δικό της μοναδικό όνομα και αποθηκεύεται στο Oracle βάση δεδομένων ως αντικείμενο βάσης δεδομένων.
Σημείωση: Ένα υποπρόγραμμα δεν είναι τίποτα άλλο παρά μια διαδικασία και πρέπει να δημιουργηθεί χειροκίνητα σύμφωνα με τις απαιτήσεις. Μόλις δημιουργηθεί, αποθηκεύεται ως αντικείμενο βάσης δεδομένων.
Τα χαρακτηριστικά μιας μονάδας υποπρογράμματος διαδικασίας σε PL/SQL είναι:
- Οι διαδικασίες είναι αυτόνομα μπλοκ που μπορούν να αποθηκευτούν στο βάσεις δεδομένων.
- Μπορούν να κληθούν με το όνομά τους για να εκτελέσουν τις εντολές PL/SQL.
- Χρησιμοποιούνται κυρίως για την εκτέλεση μιας διαδικασίας.
- Μπορούν να έχουν ένθετα μπλοκ ή να είναι ένθετα μέσα σε άλλα μπλοκ ή πακέτα.
- Περιέχουν ένα μέρος δήλωσης (προαιρετικό), ένα μέρος εκτέλεσης και ένα μέρος χειρισμού εξαιρέσεων (προαιρετικό).
- Οι τιμές μπορούν να μεταβιβαστούν ή να ανακτηθούν από μια διαδικασία μέσω παραμέτρων.
- Αυτές οι παράμετροι πρέπει να περιλαμβάνονται στη δήλωση κλήσης.
- Μια διαδικασία μπορεί να έχει μια εντολή RETURN για να επιστρέψει τον έλεγχο στο μπλοκ κλήσης, αλλά δεν μπορεί να επιστρέψει καμία τιμή μέσω της εντολής RETURN.
- Οι διαδικασίες δεν μπορούν να κληθούν απευθείας από τις εντολές SELECT. Μπορούν να κληθούν από ένα άλλο μπλοκ ή μέσω της λέξης-κλειδιού EXEC.
Σύνταξη
CREATE OR REPLACE PROCEDURE <procedure_name> ( <parameter1 IN/OUT <datatype> .. . ) [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- Η συνάρτηση CREATE PROCEDURE δίνει εντολή στον μεταγλωττιστή να δημιουργήσει μια νέα διαδικασία. Η λέξη-κλειδί 'OR REPLACE' του δίνει εντολή να αντικαταστήσει την υπάρχουσα διαδικασία (εάν υπάρχει) με την τρέχουσα.
- Το όνομα της διαδικασίας πρέπει να είναι μοναδικό.
- Η λέξη-κλειδί «IS» χρησιμοποιείται όταν η αποθηκευμένη διαδικασία είναι ένθετη μέσα σε κάποιο άλλο μπλοκ. Εάν η διαδικασία είναι αυτόνομη, χρησιμοποιείται η λέξη «AS». Εκτός από αυτό το πρότυπο κωδικοποίησης, και οι δύο έχουν την ίδια σημασία.
Παράδειγμα 1: Δημιουργία μιας διαδικασίας και κλήση της χρησιμοποιώντας EXEC. Σε αυτό το παράδειγμα, δημιουργούμε ένα Oracle Μια διαδικασία που δέχεται ένα όνομα ως είσοδο και εκτυπώνει ένα μήνυμα καλωσορίσματος ως έξοδο, χρησιμοποιώντας την εντολή EXEC για να την καλέσει.
CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2) IS BEGIN dbms_output.put_line ('Welcome '|| p_name); END; / EXEC welcome_msg ('Guru99');
Code Επεξήγηση:
- Code γραμμή 1: Δημιουργία της διαδικασίας με όνομα 'welcome_msg' και μία παράμετρο 'p_name' τύπου 'IN'.
- Code γραμμή 4: Εκτύπωση του μηνύματος καλωσορίσματος συνενώνοντας το όνομα εισόδου.
- Η διαδικασία μεταγλωττίζεται με επιτυχία.
- Code γραμμή 7: Κλήση της διαδικασίας χρησιμοποιώντας EXEC με την παράμετρο 'Guru99'. Η διαδικασία εκτελείται και εκτυπώνει το μήνυμα "Καλώς ορίσατε Guru99. "
Τι είναι μια Συνάρτηση;
Μια συνάρτηση είναι ένα αυτόνομο υποπρόγραμμα PL/SQL. Όπως μια διαδικασία, μια συνάρτηση έχει ένα μοναδικό όνομα και αποθηκεύεται ως αντικείμενο βάσης δεδομένων PL/SQL. Τα χαρακτηριστικά της είναι:
- Οι συναρτήσεις είναι αυτόνομα μπλοκ που χρησιμοποιούνται κυρίως για υπολογισμούς.
- Μια συνάρτηση χρησιμοποιεί τη λέξη-κλειδί RETURN για να επιστρέψει μια τιμή, της οποίας ο τύπος δεδομένων ορίζεται κατά τη στιγμή της δημιουργίας.
- Μια συνάρτηση θα πρέπει είτε να επιστρέφει μια τιμή είτε να δημιουργεί μια εξαίρεση. Η εντολή return είναι υποχρεωτική στις συναρτήσεις.
- Μια συνάρτηση χωρίς εντολές DML μπορεί να κληθεί απευθείας σε ένα ερώτημα SELECT, ενώ μια συνάρτηση με DML μπορεί να κληθεί μόνο από άλλα μπλοκ PL/SQL.
- Μπορεί να έχει ένθετα μπλοκ ή να είναι ένθετο μέσα σε άλλα μπλοκ ή πακέτα.
- Περιέχει ένα μέρος δήλωσης (προαιρετικό), ένα μέρος εκτέλεσης και ένα μέρος χειρισμού εξαιρέσεων (προαιρετικό).
- Οι τιμές μπορούν να μεταβιβαστούν ή να ανακτηθούν από τη συνάρτηση μέσω παραμέτρων.
- Αυτές οι παράμετροι πρέπει να περιλαμβάνονται στη δήλωση κλήσης.
- Μια συνάρτηση μπορεί επίσης να επιστρέψει μια τιμή μέσω παραμέτρων OUT εκτός από τη χρήση της συνάρτησης RETURN.
- Δεδομένου ότι επιστρέφει πάντα μια τιμή, η εντολή κλήσης χρησιμοποιεί πάντα έναν τελεστή ανάθεσης για να συμπληρώσει μια μεταβλητή.
Σύνταξη
CREATE OR REPLACE FUNCTION <function_name> ( <parameter1 IN/OUT <datatype> ) RETURN <datatype> [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- Η εντολή CREATE FUNCTION δίνει εντολή στον μεταγλωττιστή να δημιουργήσει μια νέα συνάρτηση. Η εντολή 'OR REPLACE' του δίνει εντολή να αντικαταστήσει την υπάρχουσα συνάρτηση (εάν υπάρχει) με την τρέχουσα.
- Το όνομα της συνάρτησης πρέπει να είναι μοναδικό.
- Θα πρέπει να αναφέρεται ο τύπος δεδομένων RETURN.
- Η λέξη-κλειδί «IS» χρησιμοποιείται όταν η συνάρτηση είναι ένθετη μέσα σε κάποιο άλλο μπλοκ. Εάν η συνάρτηση είναι αυτόνομη, χρησιμοποιείται η λέξη-κλειδί «AS».
Παράδειγμα 1: Δημιουργία μιας συνάρτησης και κλήση της χρησιμοποιώντας ένα ανώνυμο μπλοκ. Σε αυτό το πρόγραμμα, δημιουργούμε μια συνάρτηση που δέχεται ένα όνομα ως είσοδο και επιστρέφει ένα μήνυμα καλωσορίσματος, χρησιμοποιώντας ένα ανώνυμο μπλοκ και μια εντολή SELECT για να την καλέσει.
CREATE OR REPLACE FUNCTION welcome_msg_func ( p_name IN VARCHAR2) RETURN VARCHAR2 IS BEGIN RETURN ('Welcome '|| p_name); END; / DECLARE lv_msg VARCHAR2(250); BEGIN lv_msg := welcome_msg_func ('Guru99'); dbms_output.put_line(lv_msg); END; / SELECT welcome_msg_func('Guru99') FROM DUAL;
Code Επεξήγηση:
- Code γραμμή 1: Δημιουργία της συνάρτησης με όνομα 'welcome_msg_func' και μία παράμετρο 'p_name' τύπου 'IN'.
- Code γραμμή 2: Δηλώνοντας τον τύπο επιστροφής ως VARCHAR2.
- Code γραμμή 5: Επιστρέφει την ενωμένη τιμή 'Καλώς ορίσατε' και την τιμή της παραμέτρου.
- Code γραμμή 8: Ανώνυμο μπλοκ για την κλήση της παραπάνω συνάρτησης.
- Code γραμμή 9: Δηλώνοντας τη μεταβλητή με τον ίδιο τύπο δεδομένων με τον τύπο επιστροφής της συνάρτησης.
- Code γραμμή 11: Κλήση της συνάρτησης και συμπλήρωση της τιμής επιστροφής στη μεταβλητή 'lv_msg'.
- Code γραμμή 12: Εκτύπωση της τιμής της μεταβλητής. Η έξοδος είναι "Καλώς ορίσατε" Guru99. "
- Code γραμμή 14: Κλήση της ίδιας συνάρτησης μέσω μιας εντολής SELECT. Η τιμή που επιστρέφεται κατευθύνεται στην τυπική έξοδο.
Ομοιότητες μεταξύ μιας διαδικασίας και μιας συνάρτησης
- Και τα δύο μπορούν να κληθούν από άλλα μπλοκ PL/SQL.
- Εάν μια εξαίρεση που προκύπτει στο υποπρόγραμμα δεν αντιμετωπιστεί στο δικό της χειρισμός εξαιρέσεων τμήμα, διαδίδεται στο μπλοκ κλήσης.
- Και οι δύο μπορούν να έχουν όσες παραμέτρους απαιτούνται.
- Και τα δύο αντιμετωπίζονται ως αντικείμενα βάσης δεδομένων στο PL/SQL.
Διαδικασία έναντι Λειτουργίας: Βασικές Διαφορές
| Διαδικασία | Λειτουργία |
|---|---|
| Χρησιμοποιείται κυρίως για την εκτέλεση μιας συγκεκριμένης διεργασίας. | Χρησιμοποιείται κυρίως για την εκτέλεση ορισμένων υπολογισμών. |
| Δεν μπορεί να κληθεί σε μια πρόταση SELECT. | Μια συνάρτηση που δεν περιέχει εντολές DML μπορεί να κληθεί σε μια εντολή SELECT. |
| Χρησιμοποιεί μια παράμετρο OUT για να επιστρέψει μια τιμή. | Χρησιμοποιεί την εντολή RETURN για να επιστρέψει μια τιμή. |
| Δεν είναι υποχρεωτικό να επιστρέψετε μια τιμή. | Είναι υποχρεωτικό να επιστρέψετε μια τιμή. |
| Η εντολή RETURN απλώς τερματίζει τον έλεγχο από το υποπρόγραμμα. | Η συνάρτηση RETURN τερματίζει τον έλεγχο από το υποπρόγραμμα και επιστρέφει επίσης την τιμή. |
| Ο τύπος δεδομένων επιστροφής δεν καθορίζεται κατά τη στιγμή της δημιουργίας. | Ο τύπος δεδομένων επιστροφής είναι υποχρεωτικός κατά τη στιγμή της δημιουργίας. |
Ενσωματωμένες λειτουργίες σε PL/SQL
PL / SQL Περιέχει διάφορες ενσωματωμένες συναρτήσεις για εργασία με τύπους δεδομένων συμβολοσειράς και ημερομηνίας. Εδώ βλέπουμε τις συναρτήσεις που χρησιμοποιούνται συνήθως και τη χρήση τους.
Λειτουργίες Μετατροπής
Αυτές οι ενσωματωμένες συναρτήσεις μετατρέπουν έναν τύπο δεδομένων σε έναν άλλο.
| Όνομα συνάρτησης | Χρήση | Παράδειγμα |
|---|---|---|
| TO_CHAR | Μετατρέπει έναν άλλο τύπο δεδομένων σε τύπο δεδομένων χαρακτήρων. | TO_CHAR(123); |
| TO_DATE (συμβολοσειρά, μορφή) | Μετατρέπει τη δεδομένη συμβολοσειρά σε ημερομηνία. Η συμβολοσειρά πρέπει να ταιριάζει με τη μορφή. | TO_DATE('2015-ΙΑΝ-15', 'ΕΕΕΕ-ΔΕΥ-ΗΗ'); Παραγωγή: 1 / 15 / 2015 |
| TO_NUMBER (κείμενο, μορφή) | Μετατρέπει το κείμενο σε έναν αριθμό της δεδομένης μορφής. Στη μορφή, το '9' υποδηλώνει τον αριθμό των ψηφίων. | Επιλέξτε TO_NUMBER('1234','9999') από διπλό. Παραγωγή: 1234. Επιλέξτε TO_NUMBER('1,234.45′,'9,999.99') από διπλό; Παραγωγή: 1234.45 |
Λειτουργίες συμβολοσειράς
Αυτές οι συναρτήσεις χρησιμοποιούνται στον τύπο δεδομένων χαρακτήρων.
| Όνομα συνάρτησης | Χρήση | Παράδειγμα |
|---|---|---|
| INSTR(κείμενο, συμβολοσειρά, έναρξη, εμφάνιση) | Δίνει τη θέση ενός συγκεκριμένου κειμένου στη δεδομένη συμβολοσειρά. Το text είναι η κύρια συμβολοσειρά, το string είναι το κείμενο που θα αναζητηθεί, το start είναι η αρχική θέση (προαιρετικό) και το occurrence είναι η εμφάνιση της αναζητούμενης συμβολοσειράς (προαιρετικό). | Επιλέξτε INSTR('ΑΕΡΟΠΛΑΝΟ','E',2,1) από διπλό. Παραγωγή: 2. Επιλέξτε INSTR('ΑΕΡΟΠΛΑΝΟ','E',2,2) από διπλό; Παραγωγή: 9 (2η εμφάνιση του E) |
| SUBSTR (κείμενο, αρχή, μήκος) | Δίνει την τιμή δευτερεύουσας συμβολοσειράς της κύριας συμβολοσειράς. Το text είναι η κύρια συμβολοσειρά, το start είναι η αρχική θέση και το length είναι το μήκος που θα υποσυμβολοσειρά. | επιλέξτε substr('αεροπλάνο',1,7) από διπλή εντολή; Παραγωγή: αεροπλα |
| ΑΝΩ (κείμενο) | Επιστρέφει τα κεφαλαία γράμματα του παρεχόμενου κειμένου. | Επιλέξτε upper('guru99') από το dual. Παραγωγή: GURU99 |
| ΚΑΤΩ (κείμενο) | Επιστρέφει τα πεζά γράμματα του παρεχόμενου κειμένου. | Επιλέξτε κάτω («AerOpLane») από διπλή ρύθμιση. Παραγωγή: αεροπλάνο |
| INITCAP (κείμενο) | Επιστρέφει το δεδομένο κείμενο με το αρχικό γράμμα κάθε λέξης με κεφαλαία γράμματα. | Επιλέξτε INITCAP('guru99') από διπλή εντολή; Παραγωγή: Guru99. Επιλέξτε INITCAP('η ιστορία μου') από διπλή επιλογή. Παραγωγή: Ιστορία μου |
| ΜΗΚΟΣ (κείμενο) | Επιστρέφει το μήκος της δεδομένης συμβολοσειράς. | Επιλέξτε LENGTH('guru99') από διπλή; Παραγωγή: 6 |
| LPAD (κείμενο, μήκος, χαρακτήρας_πληκτρολόγησης) | Συμπληρώνει τη συμβολοσειρά στα αριστερά στο δεδομένο συνολικό μήκος με τον δεδομένο χαρακτήρα. | Επιλέξτε LPAD('guru99', 10, '$') από το dual. Παραγωγή: $$$$guru99 |
| RPAD (κείμενο, μήκος, pad_char) | Συμπληρώνει τη συμβολοσειρά στα δεξιά στο δεδομένο συνολικό μήκος με τον δεδομένο χαρακτήρα. | Επιλέξτε RPAD('guru99',10,'-') από διπλή; Παραγωγή: guru99—- |
| LTRIM (κείμενο) | Αποκόπτει τον αρχικό λευκό χώρο από το κείμενο. | Επιλέξτε LTRIM(' Guru99') από διπλό; Παραγωγή: Guru99 |
| RTRIM (κείμενο) | Αποκόπτει τον τελικό λευκό χώρο από το κείμενο. | Επιλέξτε RTRIM('Guru99 ') από διπλό; Παραγωγή: Guru99 |
Λειτουργίες ημερομηνίας
Αυτές οι συναρτήσεις χρησιμοποιούνται για τον χειρισμό ημερομηνιών.
| Όνομα συνάρτησης | Χρήση | Παράδειγμα |
|---|---|---|
| ΠΡΟΣΘΗΚΗ_ΜΗΝΩΝ (ημερομηνία, αριθμός μηνών) | Προσθέτει τους δεδομένους μήνες στην ημερομηνία. | ΠΡΟΣΘΗΚΗ_ΜΗΝΩΝ('2015-01-01',5); Παραγωγή: 05 / 01 / 2015 |
| ΣΥΣΔΑΤΕ | Επιστρέφει την τρέχουσα ημερομηνία και ώρα του διακομιστή. | Επιλέξτε SYSDATE από το dual. Παραγωγή: 10/4/2015 2:11:43 |
| ΤΡΟΥΚ | Στρογγυλοποιεί τη μεταβλητή ημερομηνίας προς τα κάτω στη χαμηλότερη δυνατή τιμή. | επιλέξτε sysdate, TRUNC(sysdate) από dual. Παραγωγή: 10/4/2015 2:12:39 PM, 10/4/2015 |
| ΣΤΡΟΓΓΥΛΟ | Στρογγυλοποιεί την ημερομηνία στο πλησιέστερο όριο, υψηλότερο ή χαμηλότερο. | Επιλέξτε sysdate, ROUND(sysdate) από dual; Παραγωγή: 10/4/2015 2:14:34 PM, 10/5/2015 |
| MONTHS_BETWEEN | Επιστρέφει τον αριθμό των μηνών μεταξύ δύο ημερομηνιών. | Επιλέξτε MONTHS_BETWEEN (ημερομηνία συστήματος+60, ημερομηνία συστήματος) από διπλή επιλογή. Παραγωγή: 2 |


