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: