Oracle Τύποι αντικειμένων PL/SQL: CREATE TYPE με παραδείγματα
⚡ Έξυπνη Σύνοψη
Οι τύποι αντικειμένων στην PL/SQL φέρνουν τον αντικειμενοστρεφή προγραμματισμό σε Oracle, επιτρέποντάς σας να μοντελοποιείτε οντότητες του πραγματικού κόσμου με χαρακτηριστικά και μεθόδους. Υποστηρίζουν κατασκευαστές, κληρονομικότητα και σύγκριση ισότητας, έτσι ώστε ένας μόνο τύπος σε επίπεδο σχήματος να μπορεί να αποθηκεύει και να επεξεργάζεται δομημένα δεδομένα.

Τι είναι ο Τύπος αντικειμένου στο PL/SQL;
Ο Αντικειμενοστρεφής Προγραμματισμός είναι ιδιαίτερα κατάλληλος για τη δημιουργία επαναχρησιμοποιήσιμων στοιχείων και σύνθετων εφαρμογών. Τα προγράμματα οργανώνονται γύρω από «αντικείμενα» και όχι από «ενέργειες». Δηλαδή, έχουν σχεδιαστεί για να λειτουργούν και να αλληλεπιδρούν με ένα ολόκληρο αντικείμενο και όχι με μία μόνο ενέργεια. Αυτή η προσέγγιση επιτρέπει στον προγραμματιστή να συμπληρώνει και να χειρίζεται λεπτομέρειες σε επίπεδο αντικειμένου-οντότητας.
Η παρακάτω εικόνα απεικονίζει ένα παράδειγμα ενός τύπου αντικειμένου στον οποίο ένας τραπεζικός λογαριασμός αντιμετωπίζεται ως οντότητα αντικειμένου. Τα χαρακτηριστικά του αντικειμένου περιέχουν τιμές — για έναν τραπεζικό λογαριασμό, αυτές είναι ο αριθμός λογαριασμού, το υπόλοιπο του τραπεζικού λογαριασμού κ.ο.κ. — ενώ οι μέθοδοι αντικειμένου περιγράφουν ενέργειες όπως ο υπολογισμός του επιτοκίου ή η δημιουργία ενός τραπεζικού λογαριασμού, καθεμία από τις οποίες απαιτεί την ολοκλήρωση μιας διαδικασίας.
In PL / SQL, ο αντικειμενοστρεφής προγραμματισμός βασίζεται σε τύπους αντικειμένων. Ένας τύπος αντικειμένου μπορεί να αναπαραστήσει οποιαδήποτε οντότητα του πραγματικού κόσμου. Οι παρακάτω ενότητες εξερευνούν τους τύπους αντικειμένων, τα στοιχεία τους και τον τρόπο δημιουργίας και χρήσης τους.
Στοιχεία τύπων αντικειμένων
Ένας τύπος αντικειμένου PL/SQL περιέχει κυρίως δύο στοιχεία.
- Γνωρίσματα
- Μέλη/Μέθοδοι
Γνωρίσματα
Τα χαρακτηριστικά είναι οι στήλες ή τα πεδία στα οποία αποθηκεύονται δεδομένα. Κάθε χαρακτηριστικό αντιστοιχίζεται στον τύπο δεδομένων που ορίζει τον τύπο επεξεργασίας και αποθήκευσης για αυτό το χαρακτηριστικό. Ένα χαρακτηριστικό μπορεί να είναι οποιουδήποτε έγκυρου Τύπος δεδομένων PL/SQL, ή μπορεί να είναι άλλου τύπου αντικειμένου.
Μέλη/Μέθοδοι
Τα μέλη ή οι μέθοδοι είναι υποπρογράμματα ορίζονται μέσα στον τύπο αντικειμένου. Δεν χρησιμοποιούνται για την αποθήκευση δεδομένων. Αντίθετα, ορίζουν την επεξεργασία που εκτελείται μέσα στον τύπο αντικειμένου — για παράδειγμα, επικύρωση δεδομένων πριν από τη συμπλήρωση του αντικειμένου. Δηλώνονται στην προδιαγραφή τύπου αντικειμένου και ορίζονται στο σώμα του τύπου αντικειμένου. Το σώμα είναι προαιρετικό: εάν δεν υπάρχουν μέλη, ένας τύπος αντικειμένου δεν έχει μέρος σώματος.
Δημιουργία αντικειμένου σε Oracle
Ένας τύπος αντικειμένου δεν μπορεί να δημιουργηθεί σε επίπεδο υποπρογράμματος. Μπορεί να δημιουργηθεί μόνο σε επίπεδο σχήματος. Μόλις οριστεί ο τύπος αντικειμένου στο σχήμα, μπορεί να χρησιμοποιηθεί σε υποπρογράμματα. Ο τύπος αντικειμένου δημιουργείται χρησιμοποιώντας την πρόταση "CREATE TYPE" και το σώμα του τύπου μπορεί να δημιουργηθεί μόνο αφού υπάρχει ο τύπος αντικειμένου του.
Τα παρακάτω στιγμιότυπα οθόνης δείχνουν τη σύνταξη CREATE TYPE για την προδιαγραφή αντικειμένου και τη σύνταξη CREATE TYPE BODY που ορίζει τις μεθόδους της.
CREATE TYPE<object_type_name> AS OBJECT ( <attribute_l><datatype>, . . ); / CREATE TYPE BODY<object_type_name> AS OBJECT ( MEMBER[PROCEDURE|FUNCTION]<member_name> IS <declarative section> BEGIN <execution part> END; . . ); /
Επεξήγηση σύνταξης:
- Η παραπάνω σύνταξη δείχνει τη δημιουργία ενός OBJECT με χαρακτηριστικά και ενός OBJECT BODY με μεθόδους.
- Οι μέθοδοι μπορούν επίσης να υπερφορτωθούν στο σώμα του αντικειμένου.
Αρχικοποίηση δήλωσης τύπου αντικειμένου
Όπως και άλλα στοιχεία στην PL/SQL, οι τύποι αντικειμένων πρέπει να δηλώνονται πριν χρησιμοποιηθούν σε ένα πρόγραμμα. Μόλις δημιουργηθεί ο τύπος αντικειμένου, μπορεί να χρησιμοποιηθεί στην δηλωτική ενότητα ενός υποπρογράμματος για να δηλώσει μια μεταβλητή αυτού του τύπου αντικειμένου.
Κάθε φορά που μια μεταβλητή δηλώνεται ως τύπος αντικειμένου, κατά τον χρόνο εκτέλεσης δημιουργείται μια νέα παρουσία του τύπου αντικειμένου και αυτή η νεοδημιουργημένη παρουσία αναφέρεται με το όνομα της μεταβλητής. Με αυτόν τον τρόπο, ένας μόνο τύπος αντικειμένου μπορεί να αποθηκεύσει πολλαπλές τιμές σε διαφορετικές παρουσίασεις.
Το παρακάτω στιγμιότυπο οθόνης δείχνει μια μεταβλητή που δηλώνεται ως τύπος αντικειμένου μέσα σε ένα Μπλοκ PL/SQL.
DECLARE <variable_name> <object_type_name>; BEGIN . . END; /
Επεξήγηση σύνταξης:
- Η παραπάνω σύνταξη δείχνει τη δήλωση ενός μεταβλητή ως τύπος αντικειμένου στην δηλωτική ενότητα.
Μόλις η μεταβλητή δηλωθεί ως τύπος αντικειμένου σε ένα υποπρόγραμμα, είναι ατομικά μηδενική — ολόκληρο το ίδιο το αντικείμενο είναι μηδενικό. Πρέπει να αρχικοποιηθεί με τιμές πριν μπορέσει να χρησιμοποιηθεί στο πρόγραμμα. Τα αντικείμενα αρχικοποιούνται χρησιμοποιώντας κατασκευαστές.
Οι κατασκευαστές είναι η έμμεση μέθοδος ενός αντικειμένου που μπορεί να αναφερθεί με το ίδιο όνομα με τον τύπο αντικειμένου. Το παρακάτω στιγμιότυπο οθόνης δείχνει την αρχικοποίηση μιας παρουσίας τύπου αντικειμένου.
DECLARE <variable_name> <object_type_name>; BEGIN <variable_name>:=<object_type_name>(); END; /
Επεξήγηση σύνταξης:
- Η παραπάνω σύνταξη δείχνει την αρχικοποίηση της παρουσίας τύπου αντικειμένου με μια τιμή null.
- Το ίδιο το αντικείμενο δεν είναι πλέον null μόλις αρχικοποιηθεί, αλλά τα χαρακτηριστικά μέσα στο αντικείμενο παραμένουν null μέχρι να τους αντιστοιχιστούν τιμές.
Κατασκευαστές
Οι κατασκευαστές είναι η έμμεση μέθοδος ενός αντικειμένου που μπορεί να αναφερθεί με το ίδιο όνομα με τον τύπο του αντικειμένου. Κάθε φορά που το αντικείμενο αναφέρεται για πρώτη φορά, αυτός ο κατασκευαστής καλείται έμμεσα.
Μπορείτε επίσης να αρχικοποιήσετε αντικείμενα χρησιμοποιώντας αυτούς τους κατασκευαστές. Ένας κατασκευαστής μπορεί να οριστεί ρητά ορίζοντας ένα μέλος στο σώμα του τύπου αντικειμένου με το ίδιο όνομα με τον τύπο αντικειμένου.
Παράδειγμα 1: Στο ακόλουθο παράδειγμα, χρησιμοποιούμε το μέλος τύπου αντικειμένου για να εισαγάγουμε εγγραφές στον πίνακα emp με τις τιμές ('RRR', 1005, 20000, 1000) και ('PPP', 1006, 20000, 1001). Μόλις εισαχθούν τα δεδομένα, τα εμφανίζουμε χρησιμοποιώντας το μέλος τύπου αντικειμένου. Χρησιμοποιούμε επίσης έναν σαφή κατασκευαστή για να συμπληρώσουμε το αναγνωριστικό διαχειριστή με την προεπιλεγμένη τιμή 1001 για τη δεύτερη εγγραφή.
Το εκτελούμε στα ακόλουθα βήματα.
- Βήμα 1: Δημιουργήστε τον τύπο αντικειμένου και το σώμα τύπου αντικειμένου.
- Βήμα 2: Δημιουργήστε ένα ανώνυμο μπλοκ για να καλέσετε τον τύπο αντικειμένου μέσω του έμμεσου κατασκευαστή για το emp_no 1005.
- Βήμα 3: Δημιουργήστε ένα ανώνυμο μπλοκ για να καλέσετε τον τύπο αντικειμένου μέσω του σαφούς κατασκευαστή για το emp_no 1006.
Βήμα 1) Δημιουργήστε τον τύπο αντικειμένου και το σώμα του τύπου αντικειμένου.
Το παρακάτω στιγμιότυπο οθόνης δείχνει την προδιαγραφή τύπου αντικειμένου emp_object που δημιουργείται με τα χαρακτηριστικά και τα μέλη της.
CREATE TYPE emp_object AS OBJECT( emp_no NUMBER, emp_name VARCHAR2(50), salary NUMBER, manager NUMBER, CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER, p_emp_name VARCHAR2, p_salary NUMBER) RETURN SELF AS RESULT), MEMBER PROCEDURE insert_records, MEMBER PROCEDURE display_records); /
Το παρακάτω στιγμιότυπο οθόνης δείχνει το σώμα τύπου emp_object που δημιουργείται με τον σαφή κατασκευαστή και τις διαδικασίες-μέλη.
CREATE OR REPLACE TYPE BODY emp_object AS CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2, p_salary NUMBER) RETURN SELF AS RESULT IS BEGIN Dbms_output.put_line('Constructor fired..'); SELF.emp_no:=p_emp_no; SELF.emp_name:=p_emp_name; SELF.salary:=p_salary; SELF.manager:=1001; RETURN; END; MEMBER PROCEDURE insert_records IS BEGIN INSERT INTO emp VALUES(emp_no,emp_name,salary,manager); END; MEMBER PROCEDURE display_records IS BEGIN Dbms_output.put_line('Employee Name:'||emp_name); Dbms_output.put_line('Employee Number:'||emp_no); Dbms_output.put_line('Salary:'||salary); Dbms_output.put_line('Manager:'||manager); END; END; /
Code εξήγηση
- Code γραμμή 1-9: Δημιουργία του τύπου αντικειμένου 'emp_object' με 4 χαρακτηριστικά και 3 μέλη. Περιέχει τον ορισμό ενός κατασκευαστή με μόνο 3 παραμέτρους. (Ο πραγματικός έμμεσος κατασκευαστής περιέχει τον αριθμό των παραμέτρων που είναι ίσος με τον αριθμό των χαρακτηριστικών που υπάρχουν στον τύπο αντικειμένου.)
- Code γραμμή 10: Δημιουργία του σώματος τύπου.
- Code γραμμή 11-21: Ορισμός του σαφούς κατασκευαστή. Ανάθεση των τιμών των παραμέτρων στα χαρακτηριστικά και ανάθεση της προεπιλεγμένης τιμής '1001' στο χαρακτηριστικό 'manager'.
- Code γραμμή 22-26: Ορισμός του μέλους 'insert_records', στο οποίο οι τιμές των χαρακτηριστικών εισάγονται στον πίνακα 'emp'.
- Code γραμμή 27-34: Ορισμός του μέλους 'display_records', το οποίο εμφανίζει τις τιμές των χαρακτηριστικών τύπου αντικειμένου.
Παραγωγή:
Ο τύπος δημιουργήθηκε
Τύπος σώματος που δημιουργήθηκε
Βήμα 2) Δημιουργία ενός ανώνυμου μπλοκ για την κλήση του δημιουργημένου τύπου αντικειμένου μέσω του έμμεσου κατασκευαστή για το emp_no 1005.
Το παρακάτω στιγμιότυπο οθόνης δείχνει το ανώνυμο μπλοκ που καλεί την συνάρτηση emp_object μέσω του έμμεσου κατασκευαστή.
DECLARE guru_emp_det emp_object; BEGIN guru_emp_det:=emp_object(1005,'RRR',20000,1000); guru_emp_det.display_records; guru_emp_det.insert_records; COMMIT; END;
Code εξήγηση
- Code γραμμή 37-45: Εισαγωγή των εγγραφών χρησιμοποιώντας τον έμμεσο κατασκευαστή. Η κλήση στον κατασκευαστή περιέχει τον πραγματικό αριθμό τιμών χαρακτηριστικών.
- Code γραμμή 38: Δηλώνει το 'guru_emp_det' ως τύπο αντικειμένου 'emp_object'.
- Code γραμμή 41: Η εντολή 'guru_emp_det.display_records' καλεί το μέλος 'display_records' και εμφανίζονται οι τιμές των χαρακτηριστικών.
- Code γραμμή 42: Η εντολή 'guru_emp_det.insert_records' καλεί το μέλος 'insert_records' και οι τιμές των χαρακτηριστικών εισάγονται στον πίνακα. Στη συνέχεια, το μπλοκ υποβάλλει το συναλλαγή.
Παραγωγή:
Όνομα Υπαλλήλου: RRR
Αριθμός Υπαλλήλου: 1005
Μισθός: 20000
Διευθυντής: 1000
Βήμα 3) Δημιουργία ενός ανώνυμου μπλοκ για την κλήση του δημιουργημένου τύπου αντικειμένου μέσω του σαφούς κατασκευαστή για το emp_no 1006.
Το παρακάτω στιγμιότυπο οθόνης δείχνει το ανώνυμο μπλοκ που καλεί την συνάρτηση emp_object μέσω του σαφούς κατασκευαστή με τρία ορίσματα.
DECLARE guru_emp_det emp_object; BEGIN guru_emp_det:=emp_object(1006,'PPP',20000); guru_emp_det.display_records; guru_emp_det.insert_records; COMMIT; END; /
Παραγωγή
Employee Name:PPP Employee Number:1006 Salary:20000 Manager:1001
Code Επεξήγηση:
- Code γραμμή 46-53: Εισαγωγή της εγγραφής χρησιμοποιώντας τον σαφή κατασκευαστή.
- Code γραμμή 46: Δηλώνει το 'guru_emp_det' ως τύπο αντικειμένου 'emp_object'.
- Code γραμμή 50: Η εντολή 'guru_emp_det.display_records' καλεί το μέλος 'display_records' και εμφανίζονται οι τιμές των χαρακτηριστικών.
- Code γραμμή 51: Η εντολή 'guru_emp_det.insert_records' καλεί το μέλος 'insert_records' και οι τιμές των χαρακτηριστικών εισάγονται στον πίνακα. Επειδή διαβιβάζονται μόνο τρία ορίσματα, ο σαφής κατασκευαστής ορίζει το αναγνωριστικό διαχειριστή στην προεπιλεγμένη τιμή 1001.
Κληρονομικότητα στον τύπο αντικειμένου
Η ιδιότητα κληρονομικότητας επιτρέπει σε έναν τύπο υποαντικειμένου να έχει πρόσβαση σε όλα τα χαρακτηριστικά και τα μέλη του τύπου υπεραντικειμένου ή του τύπου γονικού αντικειμένου.
Ο τύπος υποαντικειμένου ονομάζεται κληρονομημένος τύπος αντικειμένου και ο τύπος υπεραντικειμένου ονομάζεται γονικός τύπος αντικειμένου. Η παρακάτω σύνταξη δείχνει πώς να δημιουργήσετε γονικούς και κληρονομημένους τύπους αντικειμένων. Το παρακάτω στιγμιότυπο οθόνης δείχνει τη σύνταξη του γονικού τύπου (SUPER) που έχει επισημανθεί ως NOT FINAL.
CREATE TYPE <object_type_name_parent> AS OBJECT ( <attribute_l><datatype>, . . )NOT FINAL; /
Επεξήγηση σύνταξης:
- Η παραπάνω σύνταξη δείχνει τη δημιουργία του τύπου SUPER. Η ρήτρα NOT FINAL επιτρέπει την κληρονομικότητα του τύπου.
Το παρακάτω στιγμιότυπο οθόνης δείχνει τη σύνταξη του κληρονομημένου τύπου (SUB) που δημιουργήθηκε με τη λέξη-κλειδί UNDER.
CREATE TYPE<object_type_name_sub>UNDER<object_type_name_parent> ( <attribute_l><datatype>, . ); /
Επεξήγηση σύνταξης:
- Η παραπάνω σύνταξη δείχνει τη δημιουργία του τύπου SUB. Περιέχει όλα τα μέλη και τα χαρακτηριστικά από τον τύπο γονικού αντικειμένου.
Παράδειγμα 1: Στο παρακάτω παράδειγμα, χρησιμοποιούμε την ιδιότητα κληρονομικότητας για να εισαγάγουμε μια εγγραφή με αναγνωριστικό διαχειριστή '1002' για την εγγραφή ('RRR', 1007, 20000). Εκτελούμε το πρόγραμμα στα ακόλουθα βήματα.
- Βήμα 1: Δημιουργήστε τον τύπο SUPER.
- Βήμα 2: Δημιουργήστε τον τύπο και το σώμα του SUB.
- Βήμα 3: Δημιουργήστε ένα ανώνυμο μπλοκ για να καλέσετε τον τύπο SUB.
Βήμα 1) Δημιουργήστε τύπο SUPER ή τύπο Parent.
Το παρακάτω στιγμιότυπο οθόνης δείχνει τον τύπο super emp_object που δημιουργείται με την ρήτρα NOT FINAL.
CREATE TYPE emp_object AS OBJECT( emp_no NUMBER, emp_name VARCHAR2(50), salary NUMBER, manager NUMBER, CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2(50), p_salary NUMBER)RETURN SELF AS RESULT), MEMBER PROCEDURE insert_records, MEMBER PROCEDURE display_records)NOT FINAL; /
Code Επεξήγηση:
- Code γραμμή 1-9: Δημιουργία του τύπου αντικειμένου 'emp_object' με 4 χαρακτηριστικά και 3 μέλη. Περιέχει τον ορισμό ενός κατασκευαστή με μόνο 3 παραμέτρους. Έχει δηλωθεί ως 'NOT FINAL', επομένως είναι ένας γονικός τύπος.
Βήμα 2) Δημιουργήστε τον τύπο SUB κάτω από τον τύπο SUPER.
Το παρακάτω στιγμιότυπο οθόνης δείχνει τον κληρονομημένο τύπο sub_emp_object και το σώμα του που δημιουργείται.
CREATE OR REPLACE TYPE sub_emp_object UNDER emp_object (default_manager NUMBER,MEMBER PROCEDURE insert_default_mgr); / CREATE OR REPLACE TYPE BODY sub_emp_object AS MEMBER PROCEDURE insert_default_mgr IS BEGIN INSERT INTO emp VALUES(emp_no,emp_name,salary,manager); END; END; /
Code Επεξήγηση:
- Code γραμμή 10-13: Δημιουργία του 'sub_emp_object' ως κληρονομημένου τύπου με ένα επιπλέον χαρακτηριστικό 'default_manager' και μια δήλωση διαδικασίας-μέλους.
- Code γραμμή 14: Δημιουργία του σώματος για τον κληρονομημένο τύπο αντικειμένου.
- Code γραμμή 16-21: Ορισμός της διαδικασίας μέλους που εισάγει εγγραφές στον πίνακα 'emp' με τις τιμές από τον τύπο αντικειμένου SUPER, εκτός από την τιμή manager. Για την τιμή manager, χρησιμοποιεί το 'default_manager' από τον τύπο SUB.
Βήμα 3) Δημιουργία ανώνυμου μπλοκ για την κλήση του τύπου SUB.
Το παρακάτω στιγμιότυπο οθόνης δείχνει το ανώνυμο μπλοκ που καλεί τον τύπο SUB και εισάγει το προεπιλεγμένο αναγνωριστικό διαχειριστή.
DECLARE guru_emp_det sub_emp_object; BEGIN guru_emp_det:= sub_emp_object(1007,'RRR',20000,1000,1002); guru_emp_det.insert_default_mgr; COMMIT; END; /
Code Επεξήγηση:
- Code γραμμή 25: Δήλωση του 'guru_emp_det' ως τύπου 'sub_emp_object'.
- Code γραμμή 27: Αρχικοποίηση του αντικειμένου με τον έμμεσο κατασκευαστή. Ο κατασκευαστής έχει 5 παραμέτρους (4 χαρακτηριστικά από τον τύπο PARENT και 1 χαρακτηριστικό από τον τύπο SUB). Η τελευταία παράμετρος (1002) ορίζει την τιμή για το χαρακτηριστικό default_manager.
- Code γραμμή 28: Κλήση του μέλους 'insert_default_mgr' για την εισαγωγή της εγγραφής με το προεπιλεγμένο αναγνωριστικό διαχειριστή που έχει περάσει στον κατασκευαστή.
Ισότητα αντικειμένων PL/SQL
Οι στιγμιότυπες εικόνες αντικειμένων που ανήκουν στον ίδιο τύπο αντικειμένου μπορούν να συγκριθούν για ισότητα. Για να γίνει αυτό, ο τύπος αντικειμένου χρειάζεται μια ειδική μέθοδο που ονομάζεται μέθοδος ORDER.
Αυτή η μέθοδος ORDER θα πρέπει να είναι μια συνάρτηση που επιστρέφει έναν αριθμητικό τύπο. Δέχεται δύο παραμέτρους ως είσοδο (πρώτη παράμετρος: το αναγνωριστικό της παρουσίας του self-object· δεύτερη παράμετρος: το αναγνωριστικό μιας άλλης παρουσίας αντικειμένου).
Τα αναγνωριστικά των δύο στιγμιότυπων αντικειμένων συγκρίνονται και το αποτέλεσμα επιστρέφεται ως αριθμός.
- Μια θετική τιμή υποδεικνύει ότι η παρουσία του αντικειμένου SELF είναι μεγαλύτερη από την άλλη παρουσία.
- Μια αρνητική τιμή υποδεικνύει ότι η παρουσία του αντικειμένου SELF είναι μικρότερη από την άλλη παρουσία.
- Το μηδέν υποδεικνύει ότι η παρουσία του αντικειμένου SELF είναι ίση με την άλλη παρουσία.
- Εάν οποιαδήποτε από τις δύο περιπτώσεις είναι null, η συνάρτηση επιστρέφει null.
Το παρακάτω στιγμιότυπο οθόνης δείχνει τη σύνταξη της συνάρτησης μέλους ORDER που πρέπει να συμπεριληφθεί στο σώμα τύπου για τον έλεγχο ισότητας.
CREATE TYPE BODY<object_type_name_ 1>AS OBJECT ( ORDER MEMBER FUNCTION match(<parameter> object_type_name_ 1) RETURN INTEGER IS BEGIN IF <attribute_name>parameter <attribute_name>THEN RETURN -1; --any negative number will do ELSIF id>c.id THEN RETURN 1; --any positive number will do ELSE RETURN 0; END IF; END; . . ); /
Επεξήγηση σύνταξης:
- Η παραπάνω σύνταξη δείχνει τη συνάρτηση ORDER που πρέπει να συμπεριληφθεί στο σώμα του τύπου για τον έλεγχο ισότητας.
- Η παράμετρος για αυτή τη συνάρτηση θα πρέπει να είναι μια παρουσία του ίδιου τύπου αντικειμένου.
- Η συνάρτηση μπορεί να κληθεί ως "obj_instance_1.match(obj_instance_2)" και αυτή η παράσταση επιστρέφει την αριθμητική τιμή που εμφανίζεται, όπου obj_instance_1 και obj_instance_2 είναι στιγμιότυπα του τύπου αντικειμένου.
Παράδειγμα 1: Στο ακόλουθο παράδειγμα, συγκρίνουμε δύο αντικείμενα. Δημιουργούμε δύο στιγμιότυπα και συγκρίνουμε το χαρακτηριστικό 'salary' μεταξύ τους. Το κάνουμε αυτό σε δύο βήματα.
- Βήμα 1: Δημιουργήστε τον τύπο και το σώμα του αντικειμένου.
- Βήμα 2: Δημιουργήστε το ανώνυμο μπλοκ για να συγκρίνετε τις παρουσίες αντικειμένων.
Βήμα 1) Δημιουργία του τύπου και του σώματος αντικειμένου.
Τα παρακάτω στιγμιότυπα οθόνης δείχνουν την προδιαγραφή emp_object_equality και το σώμα της, η οποία ορίζει τη συνάρτηση ORDER που συγκρίνει το χαρακτηριστικό μισθού.
CREATE TYPE emp_object_equality AS OBJECT( salary NUMBER, ORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGER); /
CREATE TYPE BODY emp_object_equality AS ORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGER IS BEGIN IF salary<c.salary THEN RETURN -1; ELSIF salary>c.salary THEN RETURN 1; ELSE RETURN 0; END IF; END; END; /
Code Επεξήγηση:
- Code γραμμή 1-4: Δημιουργία του τύπου αντικειμένου 'emp_object_equality' με 1 χαρακτηριστικό και 1 μέλος.
- Code γραμμή 6-16: Ορισμός της συνάρτησης ORDER που συγκρίνει το χαρακτηριστικό 'salary' της παρουσίας SELF και της παρουσίας παραμέτρου. Επιστρέφει αρνητική τιμή εάν ο μισθός SELF είναι μικρότερος, θετική τιμή εάν ο μισθός SELF είναι μεγαλύτερος και 0 εάν οι μισθοί είναι ίσοι.
Code Παραγωγή:
Ο τύπος δημιουργήθηκε
Βήμα 2) Δημιουργία του ανώνυμου μπλοκ για τη σύγκριση των στιγμιότυπων των αντικειμένων.
Το παρακάτω στιγμιότυπο οθόνης δείχνει το ανώνυμο μπλοκ που συγκρίνει δύο στιγμιότυπα emp_object_equality ανά μισθό.
DECLARE l_obj_1 emp_object_equality; l_obj_2 emp_object_equality; BEGIN l_obj_1:=emp_object_equality(15000); l_obj_2:=emp_object_equality(17000); IF l_obj_1.equals(l_obj_2)>0 THEN Dbms_output.put_line('Salary of first instance is greater'); ELSIF l_obj_1.equals(l_obj_2)<0 THEN Dbms_output.put_line('Salary of second instance is greater'); ELSE Dbms_output.put_line('Salaries are equal'); END IF; END; /
Παραγωγή
Salary of second instance is greater
Code Επεξήγηση:
- Code γραμμή 20: Δήλωση του 'l_obj_1' τύπου 'emp_object_equality'.
- Code γραμμή 21: Δήλωση του 'l_obj_2' τύπου 'emp_object_equality'.
- Code γραμμή 23: Αρχικοποίηση του 'l_obj_1' με την τιμή μισθού '15000'.
- Code γραμμή 24: Αρχικοποίηση του 'l_obj_2' με την τιμή μισθού '17000'.
- Code γραμμή 25-33: Εκτύπωση του μηνύματος με βάση τον αριθμό που επιστρέφεται από τη συνάρτηση ORDER.


















