Oracle Τύποι αντικειμένων PL/SQL: CREATE TYPE με παραδείγματα

⚡ Έξυπνη Σύνοψη

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

  • 🧱 Στοιχεία τύπου αντικειμένου: Ένας τύπος αντικειμένου συνδυάζει χαρακτηριστικά που αποθηκεύουν δεδομένα και μέλη ή μεθόδους που καθορίζουν τη λογική επεξεργασίας του.
  • Δημιουργία αντικειμένου: Οι τύποι αντικειμένων δημιουργούνται σε επίπεδο σχήματος με την εντολή CREATE TYPE και οι μέθοδοί τους ορίζονται σε ένα ξεχωριστό CREATE TYPE BODY.
  • 🔧 Κατασκευαστές: Κάθε τύπος αντικειμένου έχει έναν έμμεσο κατασκευαστή που ονομάζεται από τον τύπο και μπορείτε να ορίσετε έναν σαφή κατασκευαστή για να ορίσετε προεπιλεγμένες τιμές.
  • 🧬 Κληρονομία: Ένας γονικός τύπος NOT FINAL επεκτείνεται με UNDER, επομένως ένας υποτύπος κληρονομεί όλα τα γονικά χαρακτηριστικά και μέλη.
  • Ισότητα: Μια συνάρτηση-μέλος ORDER συγκρίνει δύο στιγμιότυπα αντικειμένων και επιστρέφει έναν αρνητικό, μηδέν ή θετικό αριθμό.
  • 🤖 Βοήθεια AI: Οι βοηθοί τεχνητής νοημοσύνης, όπως το GitHub Copilot, σχεδιάζουν ορισμούς CREATE TYPE, κατασκευαστές και μεθόδους ORDER από ένα σχόλιο.

Oracle Τύποι αντικειμένων PL/SQL που εμφανίζουν CREATE TYPE με χαρακτηριστικά και μεθόδους

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

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

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

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

In PL / SQL, ο αντικειμενοστρεφής προγραμματισμός βασίζεται σε τύπους αντικειμένων. Ένας τύπος αντικειμένου μπορεί να αναπαραστήσει οποιαδήποτε οντότητα του πραγματικού κόσμου. Οι παρακάτω ενότητες εξερευνούν τους τύπους αντικειμένων, τα στοιχεία τους και τον τρόπο δημιουργίας και χρήσης τους.

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

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

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

Γνωρίσματα

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

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

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

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

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

Τα παρακάτω στιγμιότυπα οθόνης δείχνουν τη σύνταξη CREATE TYPE για την προδιαγραφή αντικειμένου και τη σύνταξη CREATE TYPE BODY που ορίζει τις μεθόδους της.

Σύνταξη CREATE TYPE που ορίζει μια προδιαγραφή αντικειμένου με χαρακτηριστικά σε Oracle Σύνταξη CREATE TYPE BODY που ορίζει τις μεθόδους ενός τύπου αντικειμένου PL/SQL

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.

Δήλωση μιας μεταβλητής ενός τύπου αντικειμένου σε μια δηλωτική ενότητα μπλοκ PL/SQL

DECLARE
<variable_name> <object_type_name>;
BEGIN
.
.
END;
/

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

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

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

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

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

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 που δημιουργείται με τα χαρακτηριστικά και τα μέλη της.

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

Ορισμός του σώματος τύπου 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 μέσω του έμμεσου κατασκευαστή.

Ανώνυμο μπλοκ που καλεί το emp_object μέσω του έμμεσου κατασκευαστή για το 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;

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 μέσω του σαφούς κατασκευαστή με τρία ορίσματα.

Ανώνυμο μπλοκ που καλεί το emp_object μέσω του σαφούς κατασκευαστή για το 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

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 για έναν τύπο γονικού αντικειμένου NOT FINAL που χρησιμοποιείται στην κληρονομικότητα

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

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

  • Η παραπάνω σύνταξη δείχνει τη δημιουργία του τύπου SUPER. Η ​​ρήτρα NOT FINAL επιτρέπει την κληρονομικότητα του τύπου.

Το παρακάτω στιγμιότυπο οθόνης δείχνει τη σύνταξη του κληρονομημένου τύπου (SUB) που δημιουργήθηκε με τη λέξη-κλειδί UNDER.

CREATE TYPE 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.

Δημιουργία του υπερτύπου 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 και το σώμα του που δημιουργείται.

Δημιουργία του κληρονομημένου τύπου sub_emp_object και του σώματός του με insert_default_mgr

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 και εισάγει το προεπιλεγμένο αναγνωριστικό διαχειριστή.

Ανώνυμο μπλοκ που καλεί τον τύπο sub_emp_object για να εισαγάγει ένα προεπιλεγμένο αναγνωριστικό διαχειριστή

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

Η σύνταξη της συνάρτησης μέλους 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 που συγκρίνει το χαρακτηριστικό μισθού.

Δημιουργία της προδιαγραφής τύπου αντικειμένου emp_object_equality με μια συνάρτηση ORDER Ορισμός του σώματος τύπου emp_object_equality που συγκρίνει το χαρακτηριστικό μισθού

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 ανά μισθό.

Ανώνυμο μπλοκ που συγκρίνει δύο παρουσίες 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.

Συχνές Ερωτήσεις

Ένας τύπος αντικειμένου μοντελοποιεί μια ενιαία οντότητα του πραγματικού κόσμου με χαρακτηριστικά και μεθόδους. A συλλογή — ένας VARRAY, ένας ένθετος πίνακας ή ένας συσχετιστικός πίνακας — περιέχει πολλά στοιχεία ενός τύπου δεδομένων. Οι τύποι αντικειμένων περιγράφουν τη δομή και τη συμπεριφορά, ενώ οι συλλογές αποθηκεύουν πολλαπλές τιμές.

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

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

Ένας τύπος ΜΗ ΑΠΑΡΑΙΤΗΤΟΣ δεν μπορεί να δημιουργήσει αντικείμενα απευθείας. Λειτουργεί ως abs.tract βάση που επεκτείνουν άλλοι τύποι. Σε συνδυασμό με την NOT FINAL, ορίζει έναν υπερτύπο του οποίου οι υποτύποι παρέχουν την συγκεκριμένη υλοποίηση των δηλωμένων μεθόδων του.

Χρησιμοποιήστε την εντολή ALTER TYPE για να προσθέσετε ή να αφαιρέσετε χαρακτηριστικά και μεθόδους, προσθέτοντας την εντολή CASCADE για να ενημερώσετε εξαρτώμενα αντικείμενα και χρησιμοποιήστε την εντολή DROP TYPE για να αφαιρέσετε τον τύπο. Ένας τύπος που εξακολουθεί να χρησιμοποιείται από πίνακες ή άλλους τύπους δεν μπορεί να απορριφθεί μέχρι να αντιμετωπιστούν πρώτα αυτά τα εξαρτώμενα στοιχεία.

Υποβάλετε ερώτημα στις προβολές του λεξικού δεδομένων USER_TYPES και ALL_TYPES για ονόματα τύπων και στις προβολές USER_TYPE_ATTRS και USER_TYPE_METHODS για τα χαρακτηριστικά και τις μεθόδους τους. Αυτές οι προβολές σάς επιτρέπουν να ελέγχετε ένα υπάρχον μοντέλο αντικειμένου χωρίς να διαβάζετε τον πηγαίο κώδικα.

Ναί. GitHub Copilot Προσχέδια προδιαγραφών CREATE TYPE, μεθόδων TYPE BODY, κατασκευαστών και συναρτήσεων ORDER από ένα σχόλιο. RevΕλέγξτε τους τύπους δεδομένων των χαρακτηριστικών, τις παραμέτρους του κατασκευαστή και τους όρους κληρονομικότητας πριν από την ανάπτυξη του δημιουργημένου τύπου.

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

Συνοψίστε αυτήν την ανάρτηση με: