Oracle PL/SQL-Datensatztyp mit Beispielen
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.
- Es gruppiert eine oder mehrere Spalten, um einen neuen Datentyp zu bilden
- Diese Spalten haben einen eigenen Namen und Datentyp
- Ein Datensatztyp kann die Daten akzeptieren
- Als einzelner Datensatz, der aus vielen Spalten besteht ODER
- Es kann den Wert fรผr eine bestimmte Spalte eines Datensatzes akzeptieren
- Datensatztyp bedeutet einfach einen neuen Datentyp. Sobald der Datensatztyp erstellt wurde, wird er als neuer Datentyp in der Datenbank gespeichert und zur Deklaration einer Variablen in Programmen verwendet.
- Es wird das Schlรผsselwort verwendet 'TYP' um den Compiler anzuweisen, dass er den neuen Datentyp erstellt.
- Es kann erstellt werden unter โDatenbankebeneโ die als Datenbankobjekte gespeichert, in der gesamten Datenbank verwendet oder am โServerโ erstellt werden kรถnnen.Unterprogrammebenenโ, die nur innerhalb der Unterprogramme sichtbar ist.
- Der Datensatztyp auf Datenbankebene kann auch fรผr die Tabellenspalten deklariert werden, sodass einzelne Spalten die komplexen Daten enthalten kรถnnen.
- Auf die Daten in diesem Datentyp kann zugegriffen werden, indem auf den Variablennamen gefolgt vom Punktoperator (.) gefolgt vom Spaltennamen verwiesen wird, d. h. ' . '
Syntax fรผr die Deklaration auf Datenbankebene:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
In der ersten Syntax sehen wir das Schlรผsselwort โCREATE TYPEโ, das den Compiler anweist, den Datensatztyp mit dem Namen โtype_name_dbโ mit der angegebenen Spalte als Datenbankobjekt zu erstellen.
Dies erfolgt als einzelne Anweisung und nicht innerhalb eines Blocks.
Syntax fรผr die Deklaration auf Unterprogrammebene:
DECLARE TYPE <type_name> IS RECORD ( <columnl> <datatype>, ); BEGIN <execution_section>; END;
In der Syntax erstellen wir den Datensatztyp mit dem Namen โtype_nameโ nur innerhalb des Unterprogramms.
Bei beiden Deklarationsmethoden ist die Definition der Spalte und des Datentyps รคhnlich.
Beispiel 1: RECORD-Typ als Datenbankobjekt
In diesem Programm werden wir sehen, wie man โDatensatztypโ als Datenbankobjekt erstellt. Wir werden den Datensatztyp โemp_detโ mit vier Spalten erstellen. Die Spalten und ihr Datentyp sind wie folgt:
- 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-Erklรคrung:
- Der obige Code erstellt den Typ emp_det als Datenbankobjekt.
- Es enthรคlt die vier Spalten emp_no, emp_name, Manager und Gehalt wie definiert.
- Jetzt รคhnelt 'emp_det' anderen Datentyp (wie NUMBER, VARCHAR@ usw.) Und es ist in der gesamten Datenbank sichtbar. Daher kann dies in der gesamten Datenbank verwendet werden, um die Variable dieses Typs zu deklarieren.
Ausgang:
Der Typ โemp_detโ wurde als Datensatztyp auf Datenbankebene angelegt.
Beispiel 2: Datensatztyp auf Unterprogrammebene โ Zugriff auf Spaltenebene
In diesem Beispiel werden wir sehen, wie man einen Datensatztyp auf Unterprogrammebene erstellt und wie man die Werte auf Spaltenebene ausfรผllt und daraus abruft.
Wir werden den Datensatztyp โemp_detโ auf Unterprogrammebene erstellen und ihn zum Auffรผllen und Anzeigen von Daten daraus verwenden.
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-Erklรคrung:
- Codezeile 2-8: Der Datensatztyp โemp_detโ wird mit den Spalten โempf_noโ, โem_nameโ, โsalaryโ und โmanagerโ des Datentyps NUMBER, VARCHAR2, NUMBER, NUMBER deklariert.
- Codezeile 9: Die Variable guru99_emp_rec ist als Datentyp โemp_detโ deklariert. Jetzt das Variable kann den Wert enthalten, der alle oben genannten 4 Felder/Spalten enthรคlt.
- Codezeile 11: Fรผllen des Felds โemp_noโ von โguru99_emp_recโ mit dem Wert 1001.
- Codezeile 12: Fรผllen des Felds โemp_nameโ von โguru99_emp_recโ mit dem Wert XXX.
- Codezeile 13: Fรผllen des Felds โmanagerโ von โguru99_emp_recโ mit dem Wert 1000.
- Codezeile 14: Fรผllen des Felds โGehaltโ von โguru99_emp_recโ mit dem Wert 10000.
- Codezeile 15-19: Zeigt den Wert von โguru99_emp_recโ in der Ausgabe an.
Beispiel 3: Datensatztyp auf Unterprogrammebene โ Zugriff auf Zeilenebene
In diesem Beispiel erfahren Sie, wie Sie einen Datensatztyp auf Unterprogrammebene erstellen und ihn auf Zeilenebene fรผllen. Wir werden den Datensatztyp โemp_detโ auf Unterprogrammebene erstellen und ihn zum Auffรผllen und Anzeigen von Daten daraus verwenden.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME YARCHAR2( 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-Erklรคrung:
- Codezeile 2-8: Der Datensatztyp โemp_detโ wird mit den Spalten โempf_noโ, โem_nameโ, โsalaryโ und โmanagerโ des Datentyps NUMBER, VARCHAR2, NUMBER, NUMBER deklariert.
- Codezeile 9: Die Variable guru99_emp_rec ist als Datentyp โemp_detโ deklariert. Jetzt kann diese Variable den Wert enthalten, der alle oben genannten 4 Felder/Spalten enthรคlt.
- Codezeile 11: Fรผllen der Tabelle emp mit den Daten 1002 als emp_no, YYY als emp_name, 15000 als Gehalt und 1000 als Managernummer.
- Codezeile 12: Festschreiben der oben genannten Einfรผgetransaktion.
- Codezeile 13: Fรผllen der Variablen โguru99_emp_recโ als Daten auf Zeilenebene aus der Auswahlabfrage fรผr die Mitarbeiternummer 1002.
- Codezeile 15-19: Zeigt den Wert von โguru99_emp_recโ in der Ausgabe an.
Ausgang:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
Hinweis: Auf den Datensatztyp kann nur auf Spaltenebene zugegriffen werden, wรคhrend sein Wert in einen beliebigen Ausgabemodus umgeleitet wird.




