Oracle PL/SQL-Objekttypen: CREATE TYPE mit Beispielen

โšก Intelligente Zusammenfassung

Objekttypen in PL/SQL bringen die objektorientierte Programmierung auf OracleSie ermรถglichen es Ihnen, reale Entitรคten mit Attributen und Methoden zu modellieren. Sie unterstรผtzen Konstruktoren, Vererbung und Gleichheitsvergleiche, sodass ein einzelner Schema-Typ strukturierte Daten speichern und verarbeiten kann.

  • ๐Ÿงฑ Objekttypkomponenten: Ein Objekttyp kombiniert Attribute, die Daten speichern, mit Elementen oder Methoden, die seine Verarbeitungslogik definieren.
  • ???? ๏ธ Objekt erstellen: Objekttypen werden auf Schemaebene mit CREATE TYPE erstellt, ihre Methoden werden in einem separaten CREATE TYPE BODY definiert.
  • ๐Ÿ”ง Konstruktoren: Jeder Objekttyp verfรผgt รผber einen impliziten Konstruktor, der nach dem Typ benannt ist, und Sie kรถnnen einen expliziten Konstruktor definieren, um Standardwerte festzulegen.
  • ๐Ÿงฌ Erbe: Ein nicht endgรผltiger รผbergeordneter Typ wird mit UNDER erweitert, sodass ein Untertyp alle รผbergeordneten Attribute und Elemente erbt.
  • ๏ธ Gleichberechtigung: Eine ORDER-Memberfunktion vergleicht zwei Objektinstanzen und gibt eine negative, eine Null- oder eine positive Zahl zurรผck.
  • ๐Ÿค– KI-Unterstรผtzung: KI-Assistenten wie GitHub Copilot entwerfen CREATE TYPE-Definitionen, Konstruktoren und ORDER-Methoden aus einem Kommentar.

Oracle PL/SQL-Objekttypen mit CREATE TYPE-Anweisungen, Attributen und Methoden

Was ist der Objekttyp in PL/SQL?

Objektorientierte Programmierung eignet sich besonders fรผr die Entwicklung wiederverwendbarer Komponenten und komplexer Anwendungen. Programme sind um โ€žObjekteโ€œ statt um โ€žAktionenโ€œ herum organisiert; das heiรŸt, sie sind darauf ausgelegt, mit einem gesamten Objekt anstatt mit einer einzelnen Aktion zu arbeiten und zu interagieren. Dieser Ansatz ermรถglicht es dem Programmierer, Details auf Objektebene festzulegen und zu bearbeiten.

Die Abbildung unten zeigt ein Beispiel fรผr einen Objekttyp, bei dem ein Bankkonto als Objekt behandelt wird. Die Objektattribute enthalten Werte โ€“ im Falle eines Bankkontos beispielsweise Kontonummer, Kontostand usw. โ€“ wรคhrend die Objektmethoden Aktionen wie die Berechnung des Zinssatzes oder die Erstellung eines Kontoauszugs beschreiben, fรผr die jeweils ein Prozess ausgefรผhrt werden muss.

Das Bankkonto wurde als Objekttyp mit Attributen und Methoden in PL/SQL modelliert.

In PL / SQLObjektorientierte Programmierung basiert auf Objekttypen. Ein Objekttyp kann jede beliebige Entitรคt der realen Welt reprรคsentieren. In den folgenden Abschnitten werden Objekttypen, ihre Komponenten sowie deren Erstellung und Verwendung nรคher erlรคutert.

Komponenten von Objekttypen

Ein PL/SQL-Objekttyp besteht im Wesentlichen aus zwei Komponenten.

  1. Attribute
  2. Mitglieder/Methoden

Attribute

Attribute sind die Spalten oder Felder, in denen Daten gespeichert werden. Jedes Attribut ist dem Datentyp zugeordnet, der die Verarbeitung und Speicherung dieses Attributs definiert. Ein Attribut kann von jedem gรผltigen Datentyp sein. PL/SQL-Datentyp, oder es kann von einem anderen Objekttyp sein.

Mitglieder/Methoden

Mitglieder oder Methoden sind Unterprogramme Sie sind innerhalb des Objekttyps definiert. Sie dienen nicht der Datenspeicherung, sondern definieren die Verarbeitung innerhalb des Objekttyps โ€“ beispielsweise die Validierung von Daten vor dem Befรผllen des Objekts. Sie werden in der Spezifikation des Objekttyps deklariert und im Objekttyprumpf definiert. Der Rumpf ist optional: Sind keine Elemente vorhanden, besitzt ein Objekttyp keinen Rumpf.

Objekt erstellen in Oracle

Ein Objekttyp kann nicht auf Unterprogrammebene, sondern nur auf Schemaebene erstellt werden. Sobald der Objekttyp im Schema definiert ist, kann er in Unterprogrammen verwendet werden. Die Erstellung des Objekttyps erfolgt mit der Anweisung โ€žCREATE TYPEโ€œ, der Typrumpf kann jedoch erst nach der Existenz des Objekttyps erstellt werden.

Die folgenden Screenshots zeigen die CREATE TYPE-Syntax fรผr die Objektspezifikation und die CREATE TYPE BODY-Syntax, die die Methoden definiert.

CREATE TYPE-Syntax zur Definition einer Objektspezifikation mit Attributen in Oracle CREATE TYPE BODY-Syntax zur Definition der Methoden eines PL/SQL-Objekttyps

CREATE TYPE<object_type_name> AS OBJECT
(
<attribute_l><datatype>,
.
.
);
/
CREATE TYPE BODY<object_type_name> AS OBJECT
(
MEMBER[PROCEDURE|FUNCTION]<member_name> 
IS
<declarative section>
BEGIN
<execution part>
END;
.
.
);
/

Syntaxerklรคrung:

  • Die obige Syntax zeigt die Erstellung eines OBJEKTS mit Attributen und eines OBJEKTKร–RPERS mit Methoden.
  • Die Methoden kรถnnen auch im Objektkรถrper รผberladen werden.

Deklarationsinitialisierung des Objekttyps

Wie andere Komponenten in PL/SQL mรผssen auch Objekttypen deklariert werden, bevor sie in einem Programm verwendet werden. Sobald der Objekttyp erstellt ist, kann er im Deklarationsteil eines Unterprogramms verwendet werden, um eine Variable dieses Objekttyps zu deklarieren.

Wird eine Variable als Objekttyp deklariert, wird zur Laufzeit eine neue Instanz dieses Objekttyps erstellt, auf die dann รผber den Variablennamen zugegriffen wird. Auf diese Weise kann ein einzelner Objekttyp mehrere Werte in verschiedenen Instanzen speichern.

Der folgende Screenshot zeigt, wie eine Variable innerhalb eines Objekts als Objekttyp deklariert wird. PL/SQL-Block.

Deklaration einer Variablen vom Objekttyp in einem PL/SQL-Blockdeklarationsabschnitt

DECLARE
<variable_name> <object_type_name>;
BEGIN
.
.
END;
/

Syntaxerklรคrung:

  • Die obige Syntax zeigt die Deklaration eines Variable als Objekttyp im deklarativen Abschnitt.

Sobald eine Variable in einem Unterprogramm als Objekttyp deklariert wird, ist sie atomar null โ€“ das gesamte Objekt selbst ist null. Sie muss initialisiert werden, bevor sie im Programm verwendet werden kann. Objekte werden mithilfe von Konstruktoren initialisiert.

Konstruktoren sind implizite Methoden eines Objekts, die รผber denselben Namen wie der Objekttyp aufgerufen werden kรถnnen. Der folgende Screenshot zeigt die Initialisierung einer Objektinstanz.

Initialisierung einer Objektinstanz mit dem Wert null mithilfe ihres Konstruktors

DECLARE
<variable_name> <object_type_name>; 
BEGIN
<variable_name>:=<object_type_name>();
END;
/

Syntaxerklรคrung:

  • Die obige Syntax zeigt die Initialisierung der Objekttypinstanz mit einem Nullwert.
  • Das Objekt selbst ist nach der Initialisierung nicht mehr null, aber die Attribute innerhalb des Objekts bleiben null, bis ihnen Werte zugewiesen werden.

Konstruktoren

Konstruktoren sind implizite Methoden eines Objekts, die รผber denselben Namen wie der Objekttyp aufgerufen werden kรถnnen. Immer wenn zum ersten Mal auf das Objekt zugegriffen wird, wird dieser Konstruktor implizit aufgerufen.

Sie kรถnnen Objekte auch mithilfe dieser Konstruktoren initialisieren. Ein Konstruktor kann explizit definiert werden, indem im Objekttyprumpf ein Element mit demselben Namen wie der Objekttyp definiert wird.

Beispiel 1: Im folgenden Beispiel verwenden wir das Objekttyp-Member, um Datensรคtze mit den Werten ('RRR', 1005, 20000, 1000) und ('PPP', 1006, 20000, 1001) in die Tabelle โ€žempโ€œ einzufรผgen. Nach dem Einfรผgen der Daten zeigen wir diese mithilfe desselben Objekttyp-Members an. AuรŸerdem verwenden wir einen expliziten Konstruktor, um die Manager-ID fรผr den zweiten Datensatz mit dem Standardwert 1001 zu belegen.

Wir fรผhren es in den folgenden Schritten durch.

  • Schritt 1: Erstellen Sie den Objekttyp und den Objekttypkรถrper.
  • Schritt 2: Erstellen Sie einen anonymen Block, um den Objekttyp รผber den impliziten Konstruktor fรผr emp_no 1005 aufzurufen.
  • Schritt 3: Erstellen Sie einen anonymen Block, um den Objekttyp รผber den expliziten Konstruktor fรผr emp_no 1006 aufzurufen.

Schritt 1) โ€‹โ€‹Objekttyp und Objekttypkรถrper erstellen.

Der folgende Screenshot zeigt die Erstellung der Objekttypspezifikation emp_object mit ihren Attributen und Elementen.

Erstellung der emp_object-Objekttypspezifikation mit Attributen und Mitgliedern

CREATE TYPE emp_object AS OBJECT(
emp_no NUMBER,
emp_name VARCHAR2(50),
salary NUMBER,
manager NUMBER,
CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER, p_emp_name VARCHAR2,
p_salary NUMBER) RETURN SELF AS RESULT),
MEMBER PROCEDURE insert_records,
MEMBER PROCEDURE display_records);
/

Der folgende Screenshot zeigt, wie der Rumpf des Typs emp_object mit dem expliziten Konstruktor und den Member-Prozeduren erstellt wird.

Definition des Typrumpfs von emp_object mit einem expliziten Konstruktor und Memberprozeduren

CREATE OR REPLACE TYPE BODY emp_object AS
CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2,
p_salary NUMBER)
RETURN SELF AS RESULT
IS
BEGIN
Dbms_output.put_line('Constructor fired..');
SELF.emp_no:=p_emp_no;
SELF.emp_name:=p_emp_name;
SELF.salary:=p_salary;
SELF.manager:=1001;
RETURN;
END;
MEMBER PROCEDURE insert_records
IS
BEGIN
INSERT INTO emp VALUES(emp_no,emp_name,salary,manager);
END;
MEMBER PROCEDURE display_records
IS
BEGIN
Dbms_output.put_line('Employee Name:'||emp_name);
Dbms_output.put_line('Employee Number:'||emp_no);
Dbms_output.put_line('Salary:'||salary);
Dbms_output.put_line('Manager:'||manager);
END;
END;
/

Code Erlรคuterung

  • Code Zeile 1-9: Es wird der Objekttyp 'emp_object' mit 4 Attributen und 3 Membern erstellt. Er enthรคlt die Definition eines Konstruktors mit nur 3 Parametern. (Der tatsรคchliche implizite Konstruktor enthรคlt die Anzahl der Parameter, die der Anzahl der im Objekttyp vorhandenen Attribute entspricht.)
  • Code Zeile 10: Erstellung des Typkรถrpers.
  • Code Zeile 11-21: Den expliziten Konstruktor definieren. Den Attributen die Parameterwerte zuweisen und dem Attribut 'manager' den Standardwert '1001' zuweisen.
  • Code Zeile 22-26: Definition des Elements 'insert_records', in das die Attributwerte in die Tabelle 'emp' eingefรผgt werden.
  • Code Zeile 27-34: Das Element 'display_records' wird definiert, welches die Werte der Attribute des Objekttyps anzeigt.

Ausgang:

Typ erstellt

Typkรถrper erstellt

Schritt 2) Erstellen eines anonymen Blocks, um den erstellten Objekttyp รผber den impliziten Konstruktor fรผr emp_no 1005 aufzurufen.

Der untenstehende Screenshot zeigt den anonymen Block, der emp_object รผber den impliziten Konstruktor aufruft.

Anonymer Block ruft emp_object รผber den impliziten Konstruktor fรผr emp_no 1005 auf.

DECLARE
guru_emp_det emp_object;
BEGIN
guru_emp_det:=emp_object(1005,'RRR',20000,1000);
guru_emp_det.display_records;
guru_emp_det.insert_records;
COMMIT;
END;

Code Erlรคuterung

  • Code Zeile 37-45: Die Datensรคtze werden mithilfe des impliziten Konstruktors eingefรผgt. Der Aufruf des Konstruktors enthรคlt die tatsรคchliche Anzahl der Attributwerte.
  • Code Zeile 38: Deklariert 'guru_emp_det' als Objekttyp 'emp_object'.
  • Code Zeile 41: Die Anweisung 'guru_emp_det.display_records' ruft das Element 'display_records' auf und die Attributwerte werden angezeigt.
  • Code Zeile 42: Die Anweisung 'guru_emp_det.insert_records' ruft das Element 'insert_records' auf, und die Attributwerte werden in die Tabelle eingefรผgt. AnschlieรŸend wird der Block ausgefรผhrt. Transaktion.

Ausgang:

Name des Mitarbeiters: RRR

Mitarbeiternummer: 1005

Gehalt: 20000

Manager: 1000

Schritt 3) Erstellen eines anonymen Blocks, um den erstellten Objekttyp รผber den expliziten Konstruktor fรผr emp_no 1006 aufzurufen.

Der untenstehende Screenshot zeigt den anonymen Block, der emp_object รผber den expliziten Konstruktor mit drei Argumenten aufruft.

Anonymer Block ruft emp_object รผber den expliziten Konstruktor fรผr emp_no 1006 auf.

DECLARE
guru_emp_det emp_object;
BEGIN
guru_emp_det:=emp_object(1006,'PPP',20000);
guru_emp_det.display_records;
guru_emp_det.insert_records;
COMMIT;
END;
/

Ausgang

Employee Name:PPP 
Employee Number:1006 
Salary:20000 
Manager:1001

Code Erlรคuterung:

  • Code Zeile 46-53: Einfรผgen des Datensatzes mithilfe des expliziten Konstruktors.
  • Code Zeile 46: Deklariert 'guru_emp_det' als Objekttyp 'emp_object'.
  • Code Zeile 50: Die Anweisung 'guru_emp_det.display_records' ruft das Element 'display_records' auf und die Attributwerte werden angezeigt.
  • Code Zeile 51: Die Anweisung 'guru_emp_det.insert_records' ruft die Methode 'insert_records' auf, und die Attributwerte werden in die Tabelle eingefรผgt. Da nur drei Argumente รผbergeben werden, setzt der explizite Konstruktor die Manager-ID auf ihren Standardwert 1001.

Vererbung im Objekttyp

Die Vererbungseigenschaft ermรถglicht es einem Unterobjekttyp, auf alle Attribute und Elemente des Oberobjekttyps bzw. des รผbergeordneten Objekttyps zuzugreifen.

Der Unterobjekttyp wird als geerbter Objekttyp, der Oberobjekttyp als Elternobjekttyp bezeichnet. Die folgende Syntax zeigt, wie Eltern- und Unterobjekttypen erstellt werden. Der Screenshot unten zeigt die Syntax fรผr den Elterntyp (SUPER), der als NICHT FINAL gekennzeichnet ist.

CREATE TYPE-Syntax fรผr einen NOT FINAL-Elternobjekttyp, der bei der Vererbung verwendet wird

CREATE TYPE <object_type_name_parent> AS OBJECT
(
<attribute_l><datatype>,
.
.
)NOT FINAL;
/

Syntaxerklรคrung:

  • Die obige Syntax zeigt die Erstellung des SUPER-Typs. Die NOT FINAL-Klausel ermรถglicht die Vererbung des Typs.

Der folgende Screenshot zeigt die Syntax des vererbten (SUB)-Typs, die mit dem Schlรผsselwort UNDER erstellt wurde.

Die Syntax CREATE TYPE UNDER dient zur Erstellung eines Unterobjekttyps, der von einem รผbergeordneten Objekt erbt.

CREATE TYPE<object_type_name_sub>UNDER<object_type_name_parent>
(
<attribute_l><datatype>,
.
);
/

Syntaxerklรคrung:

  • Die obige Syntax zeigt die Erstellung des SUB-Typs. Er enthรคlt alle Elemente und Attribute des รผbergeordneten Objekttyps.

Beispiel 1: Im folgenden Beispiel verwenden wir die Vererbungseigenschaft, um einen Datensatz mit der Manager-ID โ€ž1002โ€œ fรผr den Datensatz (โ€žRRRโ€œ, 1007, 20000) einzufรผgen. Das Programm wird in den folgenden Schritten ausgefรผhrt.

  • Schritt 1: Erstellen Sie den SUPER-Typ.
  • Schritt 2: Erstellen Sie den Untertyp und den Rumpf.
  • Schritt 3: Erstellen Sie einen anonymen Block, um den SUB-Typ aufzurufen.

Schritt 1) โ€‹โ€‹Erstellen Sie einen SUPER-Typ oder einen รผbergeordneten Typ.

Der folgende Screenshot zeigt, wie der Supertyp emp_object mit der NOT FINAL-Klausel erstellt wird.

Erstellen des Supertyps emp_object NOT FINAL fรผr das Vererbungsbeispiel

CREATE TYPE emp_object AS OBJECT(
emp_no NUMBER,
emp_name VARCHAR2(50),
salary NUMBER,
manager NUMBER,
CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2(50),
p_salary NUMBER)RETURN SELF AS RESULT),
MEMBER PROCEDURE insert_records,
MEMBER PROCEDURE display_records)NOT FINAL;
/

Code Erlรคuterung:

  • Code Zeile 1-9: Es wird der Objekttyp โ€žemp_objectโ€œ mit vier Attributen und drei Membern erstellt. Er enthรคlt die Definition eines Konstruktors mit nur drei Parametern. Da er als โ€žNOT FINALโ€œ deklariert wurde, handelt es sich um einen Obertyp.

Schritt 2) Erstellen Sie einen Untertyp unter dem Obertyp.

Der folgende Screenshot zeigt, wie der geerbte Typ sub_emp_object und sein Rumpf erstellt werden.

Erstellen des geerbten Typs sub_emp_object und seines Rumpfs mit insert_default_mgr

CREATE OR REPLACE TYPE sub_emp_object 
UNDER emp_object
(default_manager NUMBER,MEMBER PROCEDURE insert_default_mgr);
/


CREATE OR REPLACE TYPE BODY sub_emp_object 
AS
MEMBER PROCEDURE insert_default_mgr 
IS
BEGIN
INSERT INTO emp
VALUES(emp_no,emp_name,salary,manager);
END;
END;
/

Code Erlรคuterung:

  • Code Zeile 10-13: Erstellung von 'sub_emp_object' als geerbter Typ mit einem zusรคtzlichen Attribut 'default_manager' und einer Member-Prozedurdeklaration.
  • Code Zeile 14: Erstellen des Rumpfes fรผr den geerbten Objekttyp.
  • Code Zeile 16-21: Die Prozedur definiert, welche Datensรคtze mit den Werten des SUPER-Objekttyps in die Tabelle โ€žempโ€œ einfรผgt, mit Ausnahme des Werts fรผr โ€žManagerโ€œ. Fรผr den Wert โ€žManagerโ€œ wird โ€ždefault_managerโ€œ aus dem SUB-Typ verwendet.

Schritt 3) Erstellen eines anonymen Blocks zum Aufruf des SUB-Typs.

Der untenstehende Screenshot zeigt den anonymen Block, der den SUB-Typ aufruft und die Standardmanager-ID einfรผgt.

Anonymer Block, der den Typ sub_emp_object aufruft, um eine Standardmanager-ID einzufรผgen.

DECLARE
guru_emp_det sub_emp_object;
BEGIN
guru_emp_det:= sub_emp_object(1007,'RRR',20000,1000,1002);
guru_emp_det.insert_default_mgr;
COMMIT;
END;
/

Code Erlรคuterung:

  • Code Zeile 25: Deklaration von 'guru_emp_det' als Typ 'sub_emp_object'.
  • Code Zeile 27: Das Objekt wird mit dem impliziten Konstruktor initialisiert. Dieser Konstruktor hat fรผnf Parameter (vier Attribute des รผbergeordneten Typs und ein Attribut des untergeordneten Typs). Der letzte Parameter (1002) definiert den Wert des Attributs `default_manager`.
  • Code Zeile 28: Die Methode 'insert_default_mgr' wird aufgerufen, um den Datensatz mit der im Konstruktor รผbergebenen Standardmanager-ID einzufรผgen.

Gleichheit von PL/SQL-Objekten

Objektinstanzen desselben Objekttyps kรถnnen auf Gleichheit verglichen werden. Dazu benรถtigt der Objekttyp eine spezielle Methode namens ORDER-Methode.

Die ORDER-Methode sollte eine Funktion sein, die einen numerischen Typ zurรผckgibt. Sie benรถtigt zwei Parameter als Eingabe (erster Parameter: die ID der Selbstobjektinstanz; zweiter Parameter: die ID einer anderen Objektinstanz).

Die IDs der beiden Objektinstanzen werden verglichen, und das Ergebnis wird als Zahl zurรผckgegeben.

  • Ein positiver Wert bedeutet, dass die SELF-Objektinstanz grรถรŸer ist als die andere Instanz.
  • Ein negativer Wert bedeutet, dass die SELF-Objektinstanz kleiner ist als die andere Instanz.
  • Null bedeutet, dass die SELF-Objektinstanz mit der anderen Instanz identisch ist.
  • Wenn eine der beiden Instanzen null ist, gibt die Funktion null zurรผck.

Der folgende Screenshot zeigt die Syntax der ORDER-Memberfunktion, die im Typrumpf fรผr den Gleichheitstest enthalten sein muss.

Die Syntax der Memberfunktion ORDER wird verwendet, um Objektinstanzen auf Gleichheit zu vergleichen.

CREATE TYPE BODY<object_type_name_ 1>AS OBJECT
(
  ORDER MEMBER FUNCTION match(<parameter> object_type_name_ 1)
  RETURN INTEGER IS
  BEGIN
    IF <attribute_name>parameter <attribute_name>THEN
      RETURN -1; --any negative number will do
    ELSIF id>c.id THEN
      RETURN 1; --any positive number will do
    ELSE
      RETURN 0;
    END IF;
  END;
  .
  .
);
/

Syntaxerklรคrung:

  • Die obige Syntax zeigt die ORDER-Funktion, die im Typrumpf fรผr den Gleichheitstest enthalten sein muss.
  • Der Parameter fรผr diese Funktion sollte eine Instanz desselben Objekttyps sein.
  • Die Funktion kann als โ€žobj_instance_1.match(obj_instance_2)โ€œ aufgerufen werden, und dieser Ausdruck gibt den angezeigten numerischen Wert zurรผck, wobei obj_instance_1 und obj_instance_2 Instanzen des Objekttyps sind.

Beispiel 1: Im folgenden Beispiel vergleichen wir zwei Objekte. Wir erstellen zwei Instanzen und vergleichen deren Attribut โ€žGehaltโ€œ. Dies geschieht in zwei Schritten.

  • Schritt 1: Objekttyp und -kรถrper erstellen.
  • Schritt 2: Erstellen Sie den anonymen Block zum Vergleichen der Objektinstanzen.

Schritt 1) โ€‹โ€‹Erstellen des Objekttyps und des Objektkรถrpers.

Die folgenden Screenshots zeigen die Spezifikation emp_object_equality und ihren Rumpf, der die ORDER-Funktion definiert, die das Gehaltsattribut vergleicht.

Erstellen der Objekttypspezifikation emp_object_equality mit einer ORDER-Funktion Definition des Typs emp_object_equality, der das Gehaltsattribut vergleicht

CREATE TYPE emp_object_equality AS OBJECT(
salary NUMBER,
ORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGER);
/
CREATE TYPE BODY emp_object_equality AS
ORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGER 
IS
BEGIN
IF salary<c.salary
THEN RETURN -1;
ELSIF salary>c.salary
THEN RETURN 1;
ELSE
RETURN 0;
END IF;
END;
END;
/

Code Erlรคuterung:

  • Code Zeile 1-4: Erstelle den Objekttyp 'emp_object_equality' mit 1 Attribut und 1 Element.
  • Code Zeile 6-16: Die Funktion ORDER definiert, die das Attribut 'salary' der SELF-Instanz mit dem der Parameterinstanz vergleicht. Sie gibt einen negativen Wert zurรผck, wenn das Gehalt der SELF-Instanz niedriger ist, einen positiven Wert, wenn das Gehalt der SELF-Instanz hรถher ist, und 0, wenn die Gehรคlter gleich sind.

Code Ausgang:

Typ erstellt

Schritt 2) Erstellen des anonymen Blocks zum Vergleichen der Objektinstanzen.

Der untenstehende Screenshot zeigt den anonymen Block, der zwei emp_object_equality-Instanzen anhand des Gehalts vergleicht.

Anonymer Block vergleicht zwei emp_object_equality-Instanzen anhand des Gehalts.

DECLARE
l_obj_1 emp_object_equality;
l_obj_2 emp_object_equality;
BEGIN
l_obj_1:=emp_object_equality(15000); 
l_obj_2:=emp_object_equality(17000);
IF l_obj_1.equals(l_obj_2)>0
THEN
Dbms_output.put_line('Salary of first instance is greater');
ELSIF l_obj_1.equals(l_obj_2)<0
THEN
Dbms_output.put_line('Salary of second instance is greater'); 
ELSE
Dbms_output.put_line('Salaries are equal');
END IF;
END;
/

Ausgang

Salary of second instance is greater

Code Erlรคuterung:

  • Code Zeile 20: Deklaration von 'l_obj_1' vom Typ 'emp_object_equality'.
  • Code Zeile 21: Deklaration von 'l_obj_2' vom Typ 'emp_object_equality'.
  • Code Zeile 23: Initialisiere 'l_obj_1' mit dem Gehaltswert '15000'.
  • Code Zeile 24: Initialisiere 'l_obj_2' mit dem Gehaltswert '17000'.
  • Code Zeile 25-33: Die Nachricht wird basierend auf der von der ORDER-Funktion zurรผckgegebenen Zahl ausgegeben.

Hรคufig gestellte Fragen

Ein Objekttyp modelliert eine einzelne reale Entitรคt mit Attributen und Methoden. der Abholung Ein VARRAY, eine verschachtelte Tabelle oder ein assoziatives Array speichert viele Elemente eines Datentyps. Objekttypen beschreiben Struktur und Verhalten, wรคhrend Sammlungen mehrere Werte speichern.

Beide vergleichen Objektinstanzen. Eine MAP-Methode gibt einen einzelnen Skalarwert zurรผck, der Oracle Die Methode `ORDER` dient zum Sortieren oder Vergleichen von Objekten, wรคhrend sie zwei Instanzen direkt vergleicht und eine negative, null oder positive Zahl zurรผckgibt. Ein Typ kann entweder die eine oder die andere Methode definieren, aber nicht beide.

Ja. Sie kรถnnen eine Objekttabelle erstellen, in der jede Zeile eine Objektinstanz darstellt, oder einen Objekttyp als Datentyp einer Tabellenspalte verwenden. Dadurch wird Folgendes ermรถglicht: Oracle Strukturierte Objekte werden direkt in der Datenbank und nicht nur im Arbeitsspeicher gespeichert.

Ein nicht instanziierbarer Typ kann keine Objekte direkt erzeugen; er verhรคlt sich wie ein absoluter Typ.tract ist eine Basisklasse, von der andere Typen erben. In Kombination mit NOT FINAL definiert sie einen Obertyp, dessen Untertypen die konkrete Implementierung seiner deklarierten Methoden liefern.

Verwenden Sie ALTER TYPE, um Attribute und Methoden hinzuzufรผgen oder zu entfernen. Mit CASCADE kรถnnen Sie abhรคngige Objekte aktualisieren. Verwenden Sie DROP TYPE, um den Typ zu lรถschen. Ein Typ, der noch von Tabellen oder anderen Typen verwendet wird, kann erst gelรถscht werden, nachdem die Abhรคngigkeiten behandelt wurden.

Fragen Sie die Datenwรถrterbuchansichten USER_TYPES und ALL_TYPES nach Typnamen und USER_TYPE_ATTRS und USER_TYPE_METHODS nach deren Attributen und Methoden ab. Mithilfe dieser Ansichten kรถnnen Sie ein bestehendes Objektmodell prรผfen, ohne den Quellcode lesen zu mรผssen.

Ja. GitHub-Copilot Erstellt CREATE TYPE-Spezifikationen, TYPE BODY-Methoden, Konstruktoren und ORDER-Funktionen aus einem Kommentar. RevPrรผfen Sie die Attributdatentypen, Konstruktorparameter und Vererbungsklauseln, bevor Sie den generierten Typ bereitstellen.

KI-Assistenten analysieren Ihre Tabellen und schlagen Objekttypen und Attributzuordnungen vor.pings und Vererbungshierarchien. Diese maschinelle Lernprรผfung kennzeichnet redundante Attribute, fehlende Konstruktoren und zu tiefe Vererbung, bevor das Objektmodell in Produktion geht, und verbessert so die Wartbarkeit.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: