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.




