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.

  • ๐Ÿงฑ Definition: Ein Datensatztyp fasst eine oder mehrere Spalten zu einem einzigen neuen Datentyp zusammen.
  • ๐Ÿ”‘ Stichwort: Das Schlรผsselwort TYPE teilt dem Compiler mit, dass ein neuer Datentyp erstellt wird.
  • ๏ธ Zwei Ebenen: Ein Datensatz auf Datenbankebene ist ein gespeichertes Objekt; ein Datensatz auf Unterprogrammebene ist nur innerhalb dieses Unterprogramms sichtbar.
  • ๐Ÿ”— Feldzugriff: Die Felder werden รผber record_variable.column_name mit Hilfe des Punktoperators aufgerufen.
  • ๐Ÿ“ฅ Spaltenebene: Werte kรถnnen jeweils nur einem Feld zugewiesen werden.
  • ๐Ÿ“ฆ Zeilenebene: Mit SELECT INTO kann ein ganzer Datensatz aus einer Tabellenzeile abgerufen werden.
  • ๐Ÿงฉ Datensatzarten: Tabellenbasierte %ROWTYPE-Datensรคtze, cursorbasierte %ROWTYPE-Datensรคtze und vom Programmierer definierte Datensรคtze.

Oracle PL/SQL-Datensatztyp

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:

Deklaration des Datensatztyps 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:

Deklaration des Datensatztyps 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.

Beispiel fรผr den Zugriff auf Spaltenebene eines Datensatztyps

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.

Beispiel fรผr den Zugriff auf Zeilenebene eines Datensatztyps

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.

Hรคufig gestellte Fragen

Ein Datensatz fasst verschiedene Spalten, mรถglicherweise unterschiedlicher Datentypen, in einer zeilenartigen Struktur zusammen. Eine Sammlung enthรคlt viele Elemente desselben Typs, die durch einen Index gekennzeichnet sind. Oft werden sie kombiniert, zu einer Sammlung von Datensรคtzen.

%ROWTYPE deklariert einen Datensatz, dessen Felder automatisch mit einer Tabelle oder einem Cursor รผbereinstimmen. Verwenden Sie ihn, wenn der Datensatz die Quelle widerspiegeln soll, sodass eine Spaltenรคnderung ohne Bearbeitung der Deklaration รผbernommen wird.

Ja, wenn beide Datensรคtze vom gleichen Typ sind. Mit SELECT INTO kann auch ein kompletter Datensatz aus einer Tabellenzeile befรผllt werden, vorausgesetzt, die Reihenfolge der Auswahlliste entspricht der Feldreihenfolge des Datensatzes.

Ja. KI kann eine Tabellendefinition lesen und einen passenden TYPE โ€ฆ IS RECORD-Block erzeugen oder %ROWTYPE empfehlen, wobei ein direkter Link zur Tabelle vorzuziehen ist. รœberprรผfen Sie die Datentypen vor der Verwendung.

Ein Datensatz auf Datenbankebene wird mit CREATE TYPE erstellt und als Objekt gespeichert, das in der gesamten Datenbank sichtbar ist. Ein Datensatz auf Unterprogrammebene wird innerhalb eines Blocks deklariert und existiert nur innerhalb dieses Unterprogramms.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: