Oracle PL/SQL-Datensatztyp mit Beispielen
⚡ Intelligente Zusammenfassung
Der PL/SQL-Datensatztyp ist ein komplexer Datentyp, der mehrere Spalten mit jeweils eigenem Namen und Datentyp zu einem neuen Typ zusammenfasst. Ein Datensatz kann auf Datenbankebene als gespeichertes Objekt oder innerhalb eines Unterprogramms definiert werden; auf seine Felder wird mit dem Punktoperator zugegriffen.

Was ist ein Datensatztyp?
Ein Datensatztyp ist ein komplexer Datentyp, der es dem Programmierer ermöglicht, einen neuen Datentyp mit der gewünschten Spaltenstruktur zu erstellen. Seine Hauptmerkmale sind:
- Es gruppiert eine oder mehrere Spalten zu einem neuen Datentyp.
- Jede dieser Spalten hat ihren eigenen Namen und Datentyp.
- Ein Datensatztyp kann die Daten als einen einzelnen Datensatz mit vielen Spalten akzeptieren oder den Wert für eine bestimmte Spalte eines Datensatzes.
- Ein Datensatztyp ist einfach ein neuer Datentyp. Nach seiner Erstellung wird er als neuer Datentyp gespeichert und kann zur Deklaration einer Variablen in Programmen verwendet werden.
- Es verwendet das Schlüsselwort 'TYP' um den Compiler anzuweisen, dass ein neuer Datentyp erstellt wird.
- Es kann erstellt werden bei Datenbankebene, gespeichert als Datenbankobjekt und verwendet in der gesamten Datenbank oder an der Unterprogrammebene, nur innerhalb des Unterprogramms sichtbar.
- Es kann auch ein Datensatztyp auf Datenbankebene für Tabellenspalten deklariert werden, sodass eine einzelne Spalte komplexe Daten enthalten kann.
- Auf die Daten wird zugegriffen, indem man auf den Variablennamen, dann einen Punkt (.) und anschließend den Spaltennamen verweist, wie folgt: ' Die '.
Syntax zur Deklaration eines Datensatztyps
Syntax für die Deklaration auf Datenbankebene:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
In der ersten Syntax weist das Schlüsselwort „CREATE TYPE“ den Compiler an, den Datensatztyp „type_name_db“ mit den angegebenen Spalten als Datenbankobjekt zu erstellen. Dies wird als einzelne Anweisung und nicht innerhalb eines Blocks angegeben.
Syntax für die Deklaration auf Unterprogrammebene:
DECLARE TYPE <type_name> IS RECORD ( <column1> <datatype>, ); BEGIN <execution_section>; END;
Bei dieser Syntax wird der Datensatztyp mit dem Namen „type_name“ nur innerhalb des Unterprogramms erstellt. Die Definition von Spalte und Datentyp ist in beiden Methoden ähnlich.
Beispiel 1: Datensatztyp als Datenbankobjekt
In diesem Programm sehen wir, wie man einen Datensatztyp als Datenbankobjekt erstellt. Wir erstellen den Datensatztyp „emp_det“ mit vier Spalten. Die Spalten und ihre Datentypen sind:
- EMP_NO (ANZAHL)
- EMP_NAME (VARCHAR2 (150))
- MANAGER (ANZAHL)
- GEHALT (ANZAHL)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
Ausgang:
Type created
Code Erläuterung
- Der obige Code erzeugt den Typ emp_det als Datenbankobjekt.
- Es hat 4 Spalten: Mitarbeiternummer, Mitarbeitername, Manager und Gehalt, wie definiert.
- Nun ist 'emp_det' ähnlich wie jedes andere Datentyp (wie NUMBER oder VARCHAR2) und ist in der gesamten Datenbank sichtbar. Daher kann es überall in der Datenbank verwendet werden, um eine Variable dieses Typs zu deklarieren.
Beispiel 2: Zugriff auf Unterprogrammebene, Spaltenebene
In diesem Beispiel sehen wir, wie man einen Datensatztyp auf Unterprogrammebene erstellt und wie man ihn spaltenweise befüllt und Werte daraus abruft. Wir erstellen den Datensatztyp „emp_det“ auf Unterprogrammebene und verwenden ihn, um Daten zu befüllen und anzuzeigen.
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; /
Ausgang:
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
Code Erläuterung
- Code Zeile 2-8: Der Datensatztyp 'emp_det' ist mit den Spalten emp_no, emp_name, manager und salary vom Datentyp NUMBER, VARCHAR2, NUMBER und NUMBER deklariert.
- Code Zeile 9: Die Variable guru99_emp_rec ist als Datentyp 'emp_det' deklariert. Variable kann einen Wert enthalten, der alle vier Felder umfasst.
- Code Zeile 11: Füllen des Felds „emp_no“ von „guru99_emp_rec“ mit dem Wert 1001.
- Code Zeile 12: Das Feld 'emp_name' wird mit dem Wert XXX belegt.
- Code Zeile 13: Das Feld „Manager“ wird mit dem Wert 1000 belegt.
- Code Zeile 14: Das Feld „Gehalt“ wird mit dem Wert 10000 belegt.
- Code Zeile 15-19: Der Wert von 'guru99_emp_rec' wird in der Ausgabe angezeigt.
Beispiel 3: Zugriff auf Zeilenebene (Unterprogrammebene)
In diesem Beispiel sehen wir, wie man einen Datensatztyp auf Unterprogrammebene erstellt und ihn auf Zeilenebene befüllt. Wir erstellen den Datensatztyp „emp_det“ auf Unterprogrammebene und verwenden ihn, um Daten zu befüllen und anzuzeigen.
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 Erläuterung
- Code Zeile 2-8: Der Datensatztyp 'emp_det' ist mit den Spalten emp_no, emp_name, manager und salary vom Datentyp NUMBER, VARCHAR2, NUMBER und NUMBER deklariert.
- Code Zeile 9: Die Variable guru99_emp_rec ist als Datentyp 'emp_det' deklariert und kann alle vier Felder aufnehmen.
- Code Zeile 11: Die Tabelle emp wird mit 1002 als emp_no, YYY als emp_name, 15000 als salary und 1000 als manager number befüllt.
- Code Zeile 12: Festschreiben der Einfügetransaktion.
- Code Zeile 13: Die Variable 'guru99_emp_rec' wird auf Zeilenebene mit den Daten der SELECT-Abfrage für Mitarbeiternummer 1002 befüllt.
- Code Zeile 15-19: Der Wert von 'guru99_emp_rec' wird in der Ausgabe angezeigt.
Ausgang:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
Hinweis: Auf einen Datensatztyp kann nur auf Spaltenebene zugegriffen werden, wenn sein Wert in einen beliebigen Ausgabemodus umgeleitet wird. Beachten Sie, dass in diesem Beispiel die Reihenfolge der SELECT-Liste nicht mit der Reihenfolge der Datensatzfelder übereinstimmt. Daher erscheinen die Werte für Gehalt und Manager in der Ausgabe vertauscht.
Arten von PL/SQL-Datensätzen
Über die oben dargestellten, vom Programmierer definierten Aufzeichnungen hinaus, Oracle Es bietet zwei verankerte Datensatztypen, die ihre Struktur automatisch kopieren. Dadurch entfällt die erneute Deklaration von Spalten, und der Datensatz bleibt mit der Tabelle oder dem Cursor, auf dem er basiert, synchron.
| Datensatzart | Erklärt mit | Struktur entsteht durch |
|---|---|---|
| Tabellenbasierter Datensatz | Tabellenname%ROWTYPE | Alle Spalten einer Tabelle |
| Cursorbasierter Datensatz | cursor_name%ROWTYPE | Auswahlliste des Cursors |
| Programmiererdefinierter Datensatz | TYP … IST DATENSATZ | Spalten, die Sie von Hand auflisten |
Ein %ROWTYPE-Datensatz ist die sicherste Wahl, wenn die Struktur einer Tabelle oder einem anderen Format folgen soll. Cursorweil eine Spaltenänderung beim nächsten Kompilieren automatisch erkannt wird.




