Oracle Τύπος εγγραφών PL/SQL με παραδείγματα

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

Ο Τύπος Εγγραφής PL/SQL είναι ένας σύνθετος τύπος δεδομένων που ομαδοποιεί πολλές στήλες, καθεμία με το δικό της όνομα και τύπο δεδομένων, σε έναν νέο τύπο. Μια εγγραφή μπορεί να οριστεί σε επίπεδο βάσης δεδομένων ως αποθηκευμένο αντικείμενο ή μέσα σε ένα υποπρόγραμμα και τα πεδία της προσπελαύνονται με τον τελεστή τελείας.

  • 🧱 Ορισμός: Ένας τύπος εγγραφής ομαδοποιεί μία ή περισσότερες στήλες σε έναν μόνο νέο τύπο δεδομένων.
  • 🔑 Λέξη-κλειδί: Η λέξη-κλειδί TYPE ενημερώνει τον μεταγλωττιστή ότι δημιουργείται ένας νέος τύπος δεδομένων.
  • Δύο Επίπεδα: Μια εγγραφή σε επίπεδο βάσης δεδομένων είναι ένα αποθηκευμένο αντικείμενο. Μια εγγραφή σε επίπεδο υποπρογράμματος είναι ορατή μόνο μέσα σε αυτό το υποπρόγραμμα.
  • 🔗 Πρόσβαση στο πεδίο: Τα πεδία προσεγγίζονται ως record_variable.column_name χρησιμοποιώντας τον τελεστή τελείας.
  • 📥 Επίπεδο στήλης: Οι τιμές μπορούν να αντιστοιχιστούν σε ένα πεδίο κάθε φορά.
  • 📦 Επίπεδο γραμμής: Μια συνάρτηση SELECT INTO μπορεί να συμπληρώσει μια ολόκληρη εγγραφή από μια γραμμή πίνακα.
  • 🧩 Είδη εγγραφών: %ROWTYPE που βασίζεται σε πίνακα, %ROWTYPE που βασίζεται σε δρομέα και εγγραφές που ορίζονται από προγραμματιστή.

Oracle Τύπος εγγραφών PL/SQL

Τι είναι ένας τύπος εγγραφής;

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

  • Ομαδοποιεί μία ή περισσότερες στήλες για να σχηματίσει έναν νέο τύπο δεδομένων.
  • Κάθε μία από αυτές τις στήλες έχει το δικό της όνομα και τύπο δεδομένων.
  • Ένας τύπος εγγραφής μπορεί να δεχτεί τα δεδομένα ως μία μόνο εγγραφή που αποτελείται από πολλές στήλες ή μπορεί να δεχτεί την τιμή για μία συγκεκριμένη στήλη μιας εγγραφής.
  • Ένας τύπος εγγραφής είναι απλώς ένας νέος τύπος δεδομένων. Μόλις δημιουργηθεί, αποθηκεύεται ως νέος τύπος δεδομένων και μπορεί να χρησιμοποιηθεί για τη δήλωση μιας μεταβλητής σε προγράμματα.
  • Χρησιμοποιεί τη λέξη-κλειδί 'ΤΥΠΟΣ' για να δώσει εντολή στον μεταγλωττιστή ότι δημιουργείται ένας νέος τύπος δεδομένων.
  • Μπορεί να δημιουργηθεί στο επίπεδο βάσης δεδομένων, αποθηκεύεται ως αντικείμενο βάσης δεδομένων και χρησιμοποιείται σε ολόκληρη τη βάση δεδομένων ή στο επίπεδο υποπρογράμματος, ορατό μόνο μέσα στο υποπρόγραμμα.
  • Ένας τύπος εγγραφής σε επίπεδο βάσης δεδομένων μπορεί επίσης να δηλωθεί για στήλες πίνακα, έτσι ώστε μια μεμονωμένη στήλη να μπορεί να περιέχει σύνθετα δεδομένα.
  • Η πρόσβαση στα δεδομένα γίνεται με αναφορά στο όνομα της μεταβλητής, έπειτα σε έναν τελεστή τελείας (.) και τέλος στο όνομα της στήλης, ως ' . «.»

Σύνταξη για τη δήλωση ενός τύπου εγγραφής

Σύνταξη για δήλωση σε επίπεδο βάσης δεδομένων:

Δήλωση τύπου εγγραφής σε επίπεδο βάσης δεδομένων

CREATE TYPE <type_name_db> IS RECORD
(
<column 1> <datatype>,
);

Στην πρώτη σύνταξη, η λέξη-κλειδί 'CREATE TYPE' δίνει εντολή στον μεταγλωττιστή να δημιουργήσει τον τύπο εγγραφής με το όνομα "type_name_db" με τις καθορισμένες στήλες ως αντικείμενο βάσης δεδομένων. Αυτό δίνεται ως μεμονωμένη εντολή, όχι μέσα σε κανένα μπλοκ.

Σύνταξη για δήλωση σε επίπεδο υποπρογράμματος:

Δήλωση τύπου εγγραφής σε επίπεδο υποπρογράμματος

DECLARE
TYPE <type_name> IS RECORD
(
<column1> <datatype>,
);
BEGIN
<execution_section>;
END;

Σε αυτήν τη σύνταξη, δημιουργούμε τον τύπο εγγραφής με όνομα "type_name" μόνο μέσα στο υποπρόγραμμα. Και στις δύο μεθόδους, ο τρόπος ορισμού της στήλης και του τύπου δεδομένων είναι παρόμοιος.

Παράδειγμα 1: Τύπος εγγραφής ως αντικείμενο βάσης δεδομένων

Σε αυτό το πρόγραμμα, βλέπουμε πώς να δημιουργήσουμε έναν τύπο εγγραφής ως αντικείμενο βάσης δεδομένων. Δημιουργούμε τον τύπο εγγραφής 'emp_det' με τέσσερις στήλες. Οι στήλες και οι τύποι δεδομένων τους είναι:

  • EMP_NO (NUMBER)
  • EMP_NAME (VARCHAR2 (150))
  • MANAGER (ΑΡΙΘΜΟΣ)
  • ΜΙΣΘΟΣ (ΑΡΙΘΜΟΣ)
CREATE TYPE emp_det IS OBJECT
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(150),
MANAGER NUMBER,
SALARY NUMBER
);
/

Παραγωγή:

Type created

Code εξήγηση

  • Ο παραπάνω κώδικας δημιουργεί τον τύπο emp_det ως αντικείμενο βάσης δεδομένων.
  • Έχει 4 στήλες: emp_no, emp_name, manager και salary, όπως ορίζονται.
  • Τώρα το 'emp_det' είναι παρόμοιο με οποιοδήποτε άλλο Τύπος δεδομένων (όπως NUMBER ή VARCHAR2) και είναι ορατό σε ολόκληρη τη βάση δεδομένων. Επομένως, μπορεί να χρησιμοποιηθεί οπουδήποτε στη βάση δεδομένων για να δηλώσει μια μεταβλητή αυτού του τύπου.

Παράδειγμα 2: Επίπεδο υποπρογράμματος, Πρόσβαση σε επίπεδο στήλης

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

Παράδειγμα πρόσβασης σε επίπεδο στήλης τύπου εγγραφής

DECLARE
TYPE emp_det IS RECORD
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(150),
MANAGER NUMBER,
SALARY NUMBER
);
guru99_emp_rec emp_det;
BEGIN
guru99_emp_rec.emp_no:= 1001;
guru99_emp_rec.emp_name:= 'XXX';
guru99_emp_rec.manager:= 1000;
guru99_emp_rec.salary:= 10000;
dbms_output.put_line('Employee Detail');
dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no);
dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name);
dbms_output.put_line ('Employee Salary: ' ||guru99_emp_rec.salary);
dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager);
END;
/

Παραγωγή:

Employee Detail
Employee Number: 1001
Employee Name: XXX
Employee Salary: 10000
Employee Manager Number: 1000

Code εξήγηση

  • Code γραμμή 2-8: Ο τύπος εγγραφής 'emp_det' δηλώνεται με τις στήλες emp_no, emp_name, manager και salary τύπου δεδομένων NUMBER, VARCHAR2, NUMBER και NUMBER.
  • Code γραμμή 9: Η μεταβλητή guru99_emp_rec δηλώνεται ως τύπος δεδομένων 'emp_det'. Αυτό μεταβλητή μπορεί να περιέχει μια τιμή που περιέχει και τα τέσσερα πεδία.
  • Code γραμμή 11: Συμπλήρωση του πεδίου "emp_no" του "guru99_emp_rec" με τιμή 1001.
  • Code γραμμή 12: Συμπλήρωση του πεδίου 'emp_name' με την τιμή XXX.
  • Code γραμμή 13: Συμπλήρωση του πεδίου «διαχειριστής» με την τιμή 1000.
  • Code γραμμή 14: Συμπλήρωση του πεδίου «μισθός» με την τιμή 10000.
  • Code γραμμή 15-19: Εμφάνιση της τιμής 'guru99_emp_rec' στην έξοδο.

Παράδειγμα 3: Επίπεδο υποπρογράμματος, Πρόσβαση σε επίπεδο γραμμής

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

Παράδειγμα πρόσβασης σε επίπεδο γραμμής τύπου εγγραφής

DECLARE
TYPE emp_det IS RECORD
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(150),
MANAGER NUMBER,
SALARY NUMBER
);
guru99_emp_rec emp_det;
BEGIN
INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000);
COMMIT;
SELECT emp_no, emp_name, salary, manager INTO guru99_emp_rec FROM emp WHERE emp_no=1002;
dbms_output.put_line ('Employee Detail');
dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no);
dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name);
dbms_output.put_line ('Employee Salary: '||guru99_emp_rec.salary);
dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager);
END;
/

Code εξήγηση

  • Code γραμμή 2-8: Ο τύπος εγγραφής 'emp_det' δηλώνεται με τις στήλες emp_no, emp_name, manager και salary τύπου δεδομένων NUMBER, VARCHAR2, NUMBER και NUMBER.
  • Code γραμμή 9: Η μεταβλητή guru99_emp_rec δηλώνεται ως τύπος δεδομένων 'emp_det' και μπορεί να περιέχει και τα τέσσερα πεδία.
  • Code γραμμή 11: Συμπλήρωση του πίνακα emp με 1002 ως emp_no, YYY ως emp_name, 15000 ως μισθό και 1000 ως αριθμό διευθυντή.
  • Code γραμμή 12: Πραγματοποίηση της συναλλαγής εισαγωγής.
  • Code γραμμή 13: Συμπλήρωση της μεταβλητής 'guru99_emp_rec' σε επίπεδο γραμμής από το ερώτημα επιλογής για τον αριθμό υπαλλήλου 1002.
  • Code γραμμή 15-19: Εμφάνιση της τιμής 'guru99_emp_rec' στην έξοδο.

Παραγωγή:

Employee Detail
Employee Number: 1002
Employee Name: YYY
Employee Salary: 1000
Employee Manager Number: 15000

Σημείωση: Ένας τύπος εγγραφής είναι προσβάσιμος μόνο σε επίπεδο στήλης κατά την ανακατεύθυνση της τιμής του σε οποιαδήποτε λειτουργία εξόδου. Σημειώστε ότι σε αυτό το παράδειγμα η σειρά της λίστας SELECT δεν ταιριάζει με τη σειρά των πεδίων εγγραφής, γι' αυτό και οι τιμές μισθού και διαχειριστή εμφανίζονται εναλλασσόμενες στην έξοδο.

Τύποι εγγραφών PL/SQL

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

Είδος εγγραφής Δηλώθηκε με Η δομή προέρχεται από
Εγγραφή βασισμένη σε πίνακα όνομα_πίνακα %ΤΥΠΟΣ_ΡΟΜΟΥ Όλες οι στήλες ενός πίνακα
Εγγραφή που βασίζεται σε δρομέα όνομα_δρομέα%ΤΥΠΟΣ_ΡΟΜΟΥ Η λίστα επιλογής του δρομέα
Εγγραφή που ορίζεται από τον προγραμματιστή ΤΥΠΟΣ … ΕΙΝΑΙ ΕΓΓΡΑΦΗ Στήλες που καταχωρείτε χειροκίνητα

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

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

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

Η %ROWTYPE δηλώνει μια εγγραφή της οποίας τα πεδία ταιριάζουν αυτόματα με έναν πίνακα ή έναν δρομέα. Χρησιμοποιήστε την όταν η εγγραφή πρέπει να αντικατοπτρίζει αυτήν την προέλευση, έτσι ώστε μια αλλαγή στήλης να αντικατοπτρίζεται χωρίς επεξεργασία της δήλωσης.

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

Ναι. Η Τεχνητή Νοημοσύνη μπορεί να διαβάσει έναν ορισμό πίνακα και να δημιουργήσει ένα αντίστοιχο μπλοκ TYPE … IS RECORD ή να προτείνει ένα %ROWTYPE όπου είναι προτιμότερος ένας ενεργός σύνδεσμος προς τον πίνακα. Επαληθεύστε τους τύπους δεδομένων πριν από τη χρήση.

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

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