Oracle Εκμάθηση PL/SQL Τύποι αντικειμένων με ΠΑΡΑΔΕΙΓΜΑΤΑ

Τι είναι ο Τύπος αντικειμένου στο PL/SQL;

Ο Αντικειμενοστραφής Προγραμματισμός είναι ιδιαίτερα κατάλληλος για την κατασκευή επαναχρησιμοποιήσιμων στοιχείων και πολύπλοκων εφαρμογών. Οργανώνονται γύρω από «αντικείμενα» και όχι «δράσεις», δηλαδή τα προγράμματα είναι σχεδιασμένα να λειτουργούν και να αλληλεπιδρούν με ολόκληρο το αντικείμενο και όχι με την ενιαία δράση. Αυτή η ιδέα επιτρέπει στον προγραμματιστή να συμπληρώσει και να χειριστεί τις λεπτομέρειες σε επίπεδο οντοτήτων αντικειμένων.

Η παρακάτω εικόνα απεικονίζει ένα παράδειγμα του τύπου αντικειμένου στον οποίο ένας τραπεζικός λογαριασμός θεωρείται οντότητα αντικειμένου. Τα χαρακτηριστικά αντικειμένου περιλαμβάνουν πράγματα που έχουν ορισμένες τιμές χαρακτηριστικών, για παράδειγμα στον Τραπεζικό Λογαριασμό. είναι ο αριθμός λογαριασμού, το τραπεζικό υπόλοιπο κ.λπ., ενώ οι μέθοδοι αντικειμένου περιγράφουν πράγματα όπως ο υπολογισμός του επιτοκίου, η δημιουργία τραπεζικού λογαριασμού κ.λπ. που απαιτεί την ολοκλήρωση ορισμένης διαδικασίας.

Τύποι αντικειμένων σε PL/SQL

Στην PL/SQL, ο αντικειμενοστραφής προγραμματισμός βασίζεται σε τύπους αντικειμένων.

Ένας τύπος αντικειμένου μπορεί να αντιπροσωπεύει οποιαδήποτε οντότητα του πραγματικού κόσμου. Θα συζητήσουμε περισσότερους τύπους αντικειμένων σε αυτό το κεφάλαιο.

Στοιχεία τύπων αντικειμένων

PL / SQL Ο τύπος αντικειμένου περιέχει κυρίως δύο στοιχεία.

  1. Γνωρίσματα
  2. Μέλη/Μέθοδοι

Γνωρίσματα

Χαρακτηριστικά είναι η στήλη ή το πεδίο στο οποίο αποθηκεύονται τα δεδομένα. Κάθε χαρακτηριστικό θα αντιστοιχιστεί στον τύπο δεδομένων που καθορίζει τον τύπο επεξεργασίας και αποθήκευσης για αυτό το χαρακτηριστικό. Το χαρακτηριστικό μπορεί να είναι οποιουδήποτε έγκυρου Τύπος δεδομένων PL/SQL, ή μπορεί να είναι άλλου τύπου αντικειμένου.

Μέλη/Μέθοδοι

Τα μέλη ή οι μέθοδοι είναι υποπρογράμματα που ορίζονται στον τύπο αντικειμένου. Δεν χρησιμοποιούνται για την αποθήκευση δεδομένων. Χρησιμοποιούνται κυρίως για τον ορισμό της διαδικασίας εντός του τύπου αντικειμένου. Για παραδείγματα επικύρωσης δεδομένων πριν από τη συμπλήρωση του τύπου αντικειμένου. Δηλώνονται στην ενότητα τύπου αντικειμένου και ορίζονται στην ενότητα σώματος τύπου αντικειμένου του τύπου αντικειμένου. Το τμήμα σώματος σε τύπο αντικειμένου είναι ένα προαιρετικό μέρος. Εάν δεν υπάρχουν μέλη, τότε ένας τύπος αντικειμένου δεν θα περιέχει μέρος του σώματος.

Δημιουργία αντικειμένου σε Oracle

Ένας τύπος αντικειμένου δεν μπορεί να δημιουργηθεί σε επίπεδο υποπρογράμματος, Μπορούν να δημιουργηθούν μόνο σε επίπεδο σχήματος. Μόλις οριστεί ο τύπος αντικειμένου στο σχήμα, τότε το ίδιο μπορεί να χρησιμοποιηθεί σε υποπρογράμματα. Ο τύπος αντικειμένου μπορεί να δημιουργηθεί χρησιμοποιώντας το 'CREATE TYPE'. Το σώμα τύπου μπορεί να δημιουργηθεί μόνο μετά τη δημιουργία του τύπου αντικειμένου του.

Δημιουργία αντικειμένου σε OracleΔημιουργία αντικειμένου σε Oracle

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, οι τύποι αντικειμένων πρέπει επίσης να δηλώνονται πριν από τη χρήση τους στο πρόγραμμα.

Μόλις δημιουργηθεί ο τύπος αντικειμένου, μπορεί να χρησιμοποιηθεί στην ενότητα δηλωτικών υποπρογραμμάτων για να δηλώσει μια μεταβλητή αυτού του τύπου αντικειμένου.

Κάθε φορά που οποιαδήποτε μεταβλητή δηλώνεται στο υποπρόγραμμα ως τύπος αντικειμένου, κατά το χρόνο εκτέλεσης θα δημιουργηθεί μια νέα παρουσία του τύπου αντικειμένου και αυτή η νεοδημιουργηθείσα παρουσία μπορεί να αναφέρεται στο όνομα της μεταβλητής. Με αυτόν τον τρόπο, ένας μεμονωμένος τύπος αντικειμένου μπορεί να αποθηκεύσει πολλές τιμές σε διαφορετικές περιπτώσεις.

Αρχικοποίηση δήλωσης τύπου αντικειμένου

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 για τη δεύτερη εγγραφή.

Θα το εκτελέσουμε στα παρακάτω βήματα.

  • Step1:
  • Δημιουργία τύπου αντικειμένου
  • Σώμα τύπου αντικειμένου
  • Βήμα 2: Δημιουργία ενός ανώνυμου μπλοκ για την κλήση του δημιουργημένου τύπου αντικειμένου μέσω του σιωπηρού κατασκευαστή για το emp_no 1005.
  • Βήμα 3: Δημιουργία ενός ανώνυμου μπλοκ για να καλέσετε τον τύπο αντικειμένου που δημιουργήθηκε μέσω ρητού κατασκευαστή για το emp_no 1006.

Βήμα 1) Δημιουργία τύπου αντικειμένου και σώματος τύπου αντικειμένου

Κατασκευαστές

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);
/

Κατασκευαστές

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.managerial:=1001;
RETURN;
END:
MEMBER PROCEDURE insert_records
IS
BEGIN
INSERT INTO emp VALUES(emp_noemp_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:
/

Επεξήγηση κώδικα

  • Κωδικός γραμμή 1-9: Δημιουργία του τύπου αντικειμένου 'emp_object' με 4 χαρακτηριστικά και 3 μέλη. Περιέχει τον ορισμό των κατασκευαστών με μόνο 3 παραμέτρους. (Ο πραγματικός σιωπηρός κατασκευαστής θα περιέχει τον αριθμό των παραμέτρων ίσο με τον αριθμό των χαρακτηριστικών που υπάρχουν στον τύπο αντικειμένου)
  • Κωδικός γραμμή 10: Δημιουργία του σώματος τύπου.
  • Κωδικός γραμμή 11-21: Καθορισμός του ρητού κατασκευαστή. Εκχώρηση της τιμής παραμέτρου στα χαρακτηριστικά και εκχώρηση της τιμής για το χαρακτηριστικό «manager» με την προεπιλεγμένη τιμή «1001».
  • Κωδικός γραμμή 22-26: Ορισμός του μέλους 'insert_records' στο οποίο οι τιμές των χαρακτηριστικών εισάγονται στον πίνακα 'emp'.
  • Κωδικός γραμμή 27-34: Ορισμός του μέλους 'display_records' στο οποίο εμφανίζονται οι τιμές των χαρακτηριστικών τύπου αντικειμένου.

Παραγωγή

Ο τύπος δημιουργήθηκε

Τύπος σώματος που δημιουργήθηκε

Βήμα 2) Δημιουργία ανώνυμου μπλοκ για κλήση δημιουργημένου τύπου αντικειμένου μέσω σιωπηρού κατασκευαστή για emp_no 1005

Κατασκευαστές

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;

Επεξήγηση κώδικα

  • Κωδικός γραμμή 37-45: Εισαγωγή των εγγραφών με χρήση του σιωπηρού κατασκευαστή. Η κλήση προς τον κατασκευαστή περιέχει τον πραγματικό αριθμό των τιμών των χαρακτηριστικών.
  • Κωδικός γραμμή 38: Δηλώνει το guru_emp_det ως τύπο αντικειμένου του 'emp_object'.
  • Κωδικός γραμμή 41: Η δήλωση "guru_emp_det.display_records" ονομάζεται συνάρτηση μέλους "diplay_records" και εμφανίζονται οι τιμές των χαρακτηριστικών
  • Κωδικός γραμμή 42: Η δήλωση 'guru_emp_det.insert_records' ονομάζεται συνάρτηση μέλους 'insert_records' και οι τιμές των χαρακτηριστικών εισάγονται στον πίνακα.

Παραγωγή

Όνομα Υπαλλήλου: RRR

Αριθμός Υπαλλήλου: 1005

Μισθός: 20000

Διευθυντής: 1000

Βήμα 3) Δημιουργία ανώνυμου μπλοκ για κλήση του δημιουργημένου τύπου αντικειμένου μέσω ρητού κατασκευαστή για το emp_no 1006

Κατασκευαστές

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

Επεξήγηση κώδικα:

  • Κωδικός γραμμή 46-53: Εισαγωγή των εγγραφών χρησιμοποιώντας τη ρητή κατασκευή.
  • Κωδικός γραμμή 46: Δηλώνει το guru_emp_det ως τύπο αντικειμένου του 'emp_object'.
  • Κωδικός γραμμή 50: Η δήλωση "guru_emp_det.display_records" ονομάζεται συνάρτηση μέλους "display_records" και εμφανίζονται οι τιμές των χαρακτηριστικών
  • Κωδικός γραμμή 51: Η δήλωση 'guru_emp_det.insert_records' ονομάζεται συνάρτηση μέλους 'insert_records' και οι τιμές των χαρακτηριστικών εισάγονται στον πίνακα.

Κληρονομικότητα στον τύπο αντικειμένου

Η ιδιότητα κληρονομικότητας επιτρέπει στον τύπο υπο-αντικειμένου να έχει πρόσβαση σε όλα τα χαρακτηριστικά και τα μέλη του τύπου σούπερ αντικειμένου ή του τύπου γονικού αντικειμένου.

Ο τύπος υπο-αντικειμένου ονομάζεται κληρονομικός τύπος αντικειμένου και ο τύπος υπεραντικειμένου ονομάζεται τύπος γονικού αντικειμένου. Η παρακάτω σύνταξη δείχνει τον τρόπο δημιουργίας γονικού και κληρονομούμενου τύπου αντικειμένου.

Κληρονομικότητα στον τύπο αντικειμένου

CREATE TYPE <object_type_name_parent> AS OBJECT
(
<attribute_l><datatype>,
.
.
)NOT FINAL;
/

Επεξήγηση σύνταξης:

  • Η παραπάνω σύνταξη δείχνει τη δημιουργία τύπου SUPER.

Κληρονομικότητα στον τύπο αντικειμένου

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 ή τύπου γονέα.

Κληρονομικότητα στον τύπο αντικειμένου

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;
/

Επεξήγηση κώδικα:

  • Κωδικός γραμμή 1-9: Δημιουργία του τύπου αντικειμένου 'emp_object' με 4 χαρακτηριστικά και 3 μέλη. Περιέχει τον ορισμό των κατασκευαστών με μόνο 3 παραμέτρους. Έχει δηλωθεί ως 'NOT FINAL' επομένως είναι γονικός τύπος.

Βήμα 2) Δημιουργήστε τύπο SUB στον τύπο SUPER.

Κληρονομικότητα στον τύπο αντικειμένου

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;
/

Επεξήγηση κώδικα:

  • Κωδικός γραμμή 10-13: Δημιουργία του sub_emp_object ως κληρονομούμενου τύπου με ένα επιπλέον χαρακτηριστικό «default_manager» και δήλωση διαδικασίας μέλους.
  • Κωδικός γραμμή 14: Δημιουργία του σώματος για τον τύπο κληρονομούμενου αντικειμένου.
  • Κωδικός γραμμή 16-21: Καθορισμός της διαδικασίας μέλους που εισάγει τις εγγραφές στον πίνακα "emp" με τις τιμές από τον τύπο αντικειμένου "SUPER", εκτός από την τιμή διαχειριστή. Για την τιμή διαχειριστή, χρησιμοποιεί τον τύπο "default_manager" από τον τύπο "SUB".

Βήμα 3) Δημιουργία ανώνυμου μπλοκ για κλήση του τύπου 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;
/

Επεξήγηση κώδικα:

  • Κωδικός γραμμή 25: Δήλωση του 'guru_emp_det' ως τύπου 'sub_emp_object'.
  • Κωδικός γραμμή 27: Αρχικοποίηση του αντικειμένου με τον άρρητο κατασκευαστή. Ο κατασκευαστής έχει 5 παραμέτρους (4 χαρακτηριστικά από τον τύπο PARENT και 2 χαρακτηριστικά από τον τύπο SUB). Η τελευταία παράμετρος (1002) καθορίζει την τιμή για το χαρακτηριστικό default_manager
  • Κωδικός γραμμή 28: Κλήση του μέλους 'insert_default_mgr' για εισαγωγή των εγγραφών με το προεπιλεγμένο αναγνωριστικό διαχειριστή που έχει περάσει στον κατασκευαστή.

Ισότητα αντικειμένων PL/SQL

Η παρουσία αντικειμένου που ανήκει στα ίδια αντικείμενα μπορεί να συγκριθεί ως προς την ισότητα. Για αυτό, πρέπει να έχουμε την ειδική μέθοδο στον τύπο αντικειμένου που ονομάζεται μέθοδος 'ORDER'.

Αυτή η μέθοδος «ORDER» θα πρέπει να είναι η συνάρτηση που επιστρέφει αριθμητικό τύπο. Λαμβάνει δύο παραμέτρους ως είσοδο, (πρώτη παράμετρος: id της παρουσίας αυτο-αντικειμένου, δεύτερη παράμετρος: id μιας άλλης παρουσίας αντικειμένου).

Το id των δύο στιγμιότυπων αντικειμένων συγκρίνεται και το αποτέλεσμα επιστρέφεται αριθμητικά.

  • Η θετική τιμή αντιπροσωπεύει ότι το στιγμιότυπο του αντικειμένου SELF είναι μεγαλύτερο από ένα άλλο στιγμιότυπο.
  • Η αρνητική τιμή αντιπροσωπεύει ότι το στιγμιότυπο του αντικειμένου SELF είναι μικρότερο από ένα άλλο στιγμιότυπο.
  • Το μηδέν αντιπροσωπεύει ότι το στιγμιότυπο του αντικειμένου SELF είναι ίσο με ένα άλλο στιγμιότυπο.
  • Εάν κάποια από τις περιπτώσεις είναι null, τότε αυτή η συνάρτηση θα επιστρέψει null.

Ισότητα αντικειμένων PL/SQL

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 είναι η παρουσία του object_type_name.

Παράδειγμα 1: Στο παρακάτω παράδειγμα θα δούμε πώς να συγκρίνουμε δύο αντικείμενα. Θα δημιουργήσουμε δύο περιπτώσεις και θα συγκρίνουμε το χαρακτηριστικό «μισθός» μεταξύ τους. Θα κάνουμε δύο βήματα.

  • Βήμα 1: Δημιουργία του τύπου αντικειμένου και του σώματος.
  • Βήμα 2: Δημιουργία του ανώνυμου μπλοκ για κλήση σύγκρισης της παρουσίας αντικειμένου.

Βήμα 1) Δημιουργία τύπου αντικειμένου και σώματος.

Ισότητα αντικειμένων PL/SQL

Ισότητα αντικειμένων PL/SQL

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;
/

Επεξήγηση κώδικα:

  • Γραμμή κώδικα 1-4: Δημιουργία του τύπου αντικειμένου 'emp_object_equality' με 1 χαρακτηριστικά και 1 μέλος.
  • Κωδικός γραμμή 6-16: Καθορισμός της συνάρτησης ORDER που συγκρίνει το χαρακτηριστικό «μισθός» της παρουσίας SELF και τον τύπο της παραμέτρου. Επιστρέφει αρνητικό εάν ο μισθός SELF είναι μικρότερος ή θετικός εάν ο μισθός SELF είναι μεγαλύτερος και 0 εάν οι μισθοί είναι ίσοι.

Έξοδος κώδικα:

Ο τύπος δημιουργήθηκε

Βήμα 2) Δημιουργώντας το ανώνυμο μπλοκ για κλήση, συγκρίνετε την παρουσία αντικειμένου.

Ισότητα αντικειμένων PL/SQL

DECLARE
l_obj_l emp_object_equality;
l_obj_2 emp_object_equality;
BEGIN
l_obj_l:=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_l.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

Επεξήγηση κώδικα:

  • Κωδικός γραμμή 20: Δήλωση του l_obj_1 τύπου emp_object_equality.
  • Κωδικός γραμμή 21: Δήλωση του l_obj_2 τύπου emp_object_equality.
  • Κωδικός γραμμή 23: Αρχικοποίηση l_obj_1 με τιμή μισθού ως '15000'
  • Κωδικός γραμμή 24: Αρχικοποίηση l_obj_1 με τιμή μισθού ως '17000'
  • Κωδικός γραμμή 25-33: Εκτυπώστε το μήνυμα με βάση τον αριθμό επιστροφής από τη συνάρτηση ORDER.

Σύνοψη

Σε αυτό το κεφάλαιο, είδαμε τον τύπο του αντικειμένου και τις ιδιότητές τους. Έχουμε επίσης συζητήσει για Κατασκευαστές, Μέλη, Ιδιότητες, Κληρονομικότητα και Ισότητα σε αντικείμενα PL/SQL.