Oracle PL/SQL-objektityypit: CREATE TYPE esimerkkeineen

⚡ Älykäs yhteenveto

PL/SQL:n objektityypit tuovat olio-ohjelmoinnin Oracle, joiden avulla voit mallintaa reaalimaailman entiteettejä attribuuttien ja metodien avulla. Ne tukevat konstruktoreita, periytymistä ja yhtäläisyysvertailua, joten yksi skeematason tyyppi voi tallentaa ja käsitellä strukturoitua dataa.

  • 🧱 Objektityypin komponentit: Objektityyppi yhdistää tietoja tallentavia attribuutteja ja sen käsittelylogiikan määrittäviä jäseniä eli metodeja.
  • 🏗️ Luo objekti: Objektityypit luodaan skeematasolla CREATE TYPE -komennolla, ja niiden metodit määritellään erillisessä CREATE TYPE BODY -elementissä.
  • 🔧 Rakentajat: Jokaisella objektityypillä on implisiittinen konstruktori, joka on nimetty tyypin mukaan, ja voit määrittää eksplisiittisen konstruktorin oletusarvojen asettamiseksi.
  • 🧬 Perintö: NOT FINAL -ylätyypin alityyppiä laajennetaan UNDER-operaattorilla, joten alityyppi perii kaikki ylätason attribuutit ja jäsenet.
  • 🇧🇷 Tasa-arvo: ORDER-jäsenfunktio vertaa kahta objekti-instanssia ja palauttaa negatiivisen, nollan tai positiivisen luvun.
  • 🤖 AI-apu: Tekoälyavustajat, kuten GitHub Copilot, luonnostelevat CREATE TYPE -määritelmiä, konstruktoreita ja ORDER-metodeja kommentista.

Oracle PL/SQL-objektityypit, jotka näyttävät CREATE TYPE -ominaisuuden määritteineen ja metodeineen

Mikä on objektityyppi PL/SQL:ssä?

Olio-ohjelmointi sopii erityisesti uudelleenkäytettävien komponenttien ja monimutkaisten sovellusten rakentamiseen. Ohjelmat on järjestetty "objektien" eikä "toimintojen" ympärille; toisin sanoen ne on suunniteltu toimimaan ja olemaan vuorovaikutuksessa koko objektin kanssa yksittäisen toiminnon sijaan. Tämä lähestymistapa antaa ohjelmoijan täyttää ja käsitellä tietoja objekti-yksikkötasolla.

Alla oleva kuva esittää esimerkkiä objektityypistä, jossa pankkitiliä käsitellään objektiyksikkönä. Objektin attribuutit sisältävät arvoja – pankkitilin tapauksessa näitä ovat tilinumero, pankkisaldo ja niin edelleen – kun taas objektin metodit kuvaavat toimintoja, kuten koron laskemista tai tiliotteen luomista, joista jokainen vaatii prosessin suorittamisen.

Pankkitili mallinnettu objektityyppinä PL/SQL-määritteillä ja -metodeilla

In PL / SQLOlio-ohjelmointi perustuu oliotyyppeihin. Oliotyyppi voi edustaa mitä tahansa reaalimaailman oliota. Seuraavissa osioissa tarkastellaan oliotyyppejä, niiden komponentteja sekä niiden luomista ja käyttöä.

Objektityyppien komponentit

PL/SQL-objektityyppi sisältää pääasiassa kaksi komponenttia.

  1. Ominaisuudet
  2. Jäsenet/menetelmät

Ominaisuudet

Määritteet ovat sarakkeita tai kenttiä, joihin tiedot tallennetaan. Jokainen määrite on yhdistetty tietotyyppiin, joka määrittää kyseisen määritteen käsittely- ja tallennustyypin. Määrite voi olla mikä tahansa kelvollinen PL/SQL-tietotyyppi, tai se voi olla jotain muuta objektityyppiä.

Jäsenet/menetelmät

Jäsenet eli metodit ovat aliohjelmia määritelty objektityypin sisällä. Niitä ei käytetä datan tallentamiseen; sen sijaan ne määrittelevät objektityypin sisällä suoritettavan prosessoinnin – esimerkiksi datan validoinnin ennen objektin täyttämistä. Ne esitellään objektityypin määrityksessä ja määritellään objektityypin rungossa. Runko on valinnainen: jos jäseniä ei ole, objektityypillä ei ole runko-osaa.

Luo objekti sisään Oracle

Objektityyppiä ei voida luoda aliohjelmatasolla; se voidaan luoda vain skeematasolla. Kun objektityyppi on määritelty skeemassa, sitä voidaan käyttää aliohjelmissa. Objektityyppi luodaan käyttämällä "CREATE TYPE" -lauseketta, ja tyypin runko voidaan luoda vasta, kun sen objektityyppi on olemassa.

Alla olevat kuvakaappaukset näyttävät objektimäärityksen CREATE TYPE -syntaksin ja sen metodit määrittelevän CREATE TYPE BODY -syntaksin.

CREATE TYPE -syntaksi, joka määrittelee objektispesifikaation attribuuteilla Oracle CREATE TYPE BODY -syntaksi, joka määrittelee PL/SQL-objektityypin metodit

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;
.
.
);
/

Syntaksiselitys:

  • Yllä oleva syntaksi näyttää OBJECT-objektin luomisen attribuuteilla ja OBJECT BODY -objektin luomisen metodeilla.
  • Menetelmät voivat myös ylikuormittua objektirungossa.

Ilmoitus objektityypin alustus

Kuten muutkin PL/SQL-komponentit, objektityypit on määriteltävä ennen kuin niitä voidaan käyttää ohjelmassa. Kun objektityyppi on luotu, sitä voidaan käyttää aliohjelman deklaratiivisessa osassa kyseisen objektityypin muuttujan määrittämiseen.

Aina kun muuttuja deklaroidaan objektityypiksi, suorituksen aikana luodaan uusi objektityypin instanssi, ja tähän uuteen instanssiin viitataan muuttujan nimellä. Tällä tavoin yksi objektityyppi voi tallentaa useita arvoja eri instansseihin.

Alla olevassa kuvakaappauksessa näkyy muuttujan deklarointi objektityyppinä objektin sisällä. PL/SQL-lohko.

Objektityyppisen muuttujan määrittäminen PL/SQL-lohkon deklaratiivisessa osiossa

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

Syntaksiselitys:

  • Yllä oleva syntaksi näyttää a:n deklaroinnin muuttuja objektityyppinä deklaratiivisessa osiossa.

Kun muuttuja on ilmoitettu oliotyypiksi aliohjelmassa, se on atomaarisesti null – koko olio itsessään on null. Se on alustettava arvoilla ennen kuin sitä voidaan käyttää ohjelmassa. Oliot alustetaan konstruktorien avulla.

Konstruktorit ovat objektin implisiittisiä metodeja, joihin voidaan viitata samalla nimellä kuin objektityyppiin. Alla oleva kuvakaappaus näyttää objektityyppi-instanssin alustuksen.

Objektityypin instanssin alustaminen null-arvoon sen konstruktorin avulla

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

Syntaksiselitys:

  • Yllä oleva syntaksi näyttää objektityypin instanssin alustuksen null-arvolla.
  • Itse objekti ei ole enää null alustuksen jälkeen, mutta objektin sisällä olevat attribuutit pysyvät nullina, kunnes niille annetaan arvot.

Rakentajat

Konstruktorit ovat objektin implisiittisiä metodeja, joihin voidaan viitata samalla nimellä kuin objektityyppiin. Aina kun objektiin viitataan ensimmäistä kertaa, tätä konstruktoria kutsutaan implisiittisesti.

Voit myös alustaa objekteja näiden konstruktorien avulla. Konstruktori voidaan määritellä eksplisiittisesti määrittelemällä objektityypin rungossa jäsen, jolla on sama nimi kuin objektityypillä.

Esimerkki 1: Seuraavassa esimerkissä käytämme objektityyppistä jäsentä lisätäksemme emp-taulukkoon tietueita arvoilla ('RRR', 1005, 20000, 1000) ja ('PPP', 1006, 20000, 1001). Kun tiedot on lisätty, näytämme ne objektityyppisen jäsenen avulla. Käytämme myös eksplisiittistä konstruktoria täyttääksemme manageri-tunnuksen oletusarvolla 1001 toiselle tietueelle.

Toteutamme sen seuraavissa vaiheissa.

  • Vaihe 1: Luo objektityyppi ja objektityypin runko.
  • Vaihe 2: Luo anonyymi lohko kutsuaksesi objektityyppiä implisiittisen konstruktorin kautta emp_no 1005:lle.
  • Vaihe 3: Luo anonyymi lohko kutsuaksesi objektityyppiä emp_no 1006:n eksplisiittisen konstruktorin kautta.

Vaihe 1) Luo objektityyppi ja objektityypin runko.

Alla olevassa kuvakaappauksessa näkyy emp_object-objektityypin määrityksen luonti attribuuteineen ja jäsenineen.

emp_object-objektityypin määrityksen luominen määritteillä ja jäsenillä

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);
/

Alla olevassa kuvakaappauksessa näkyy emp_object-tyypin rungon luonti eksplisiittisellä konstruktorilla ja jäsenproseduureilla.

emp_object-tyyppirungon määrittely eksplisiittisellä konstruktorilla ja jäsenproseduureilla

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 Selitys

  • Code rivi 1–9: Luodaan 'emp_object'-objektityyppi, jossa on neljä attribuuttia ja kolme jäsentä. Se sisältää määritelmän konstruktorista, jossa on vain kolme parametria. (Varsinainen implisiittinen konstruktori sisältää yhtä monta parametria kuin objektityypissä on attribuutteja.)
  • Code rivi 10: Tyyppirungon luominen.
  • Code rivi 11–21: Eksplisiittisen konstruktorin määrittely. Parametriarvojen määritys attribuuteille ja oletusarvon '1001' määritys attribuutille 'manager'.
  • Code rivi 22–26: Jäsenen 'insert_records' määrittely, jonka avulla attribuutin arvot lisätään 'emp'-taulukkoon.
  • Code rivi 27–34: Jäsenen 'display_records' määrittely, joka näyttää objektityypin attribuuttien arvot.

lähtö:

Tyyppi luotu

Tyyppi runko luotu

Vaihe 2) Luodaan anonyymi lohko kutsumaan luotua objektityyppiä implisiittisen konstruktorin kautta emp_no 1005:lle.

Alla olevassa kuvakaappauksessa näkyy anonyymi lohko, joka kutsuu emp_object-funktiota implisiittisen konstruktorin kautta.

Anonyymi lohko, joka kutsuu emp_object-funktiota implisiittisen konstruktorin kautta emp_no 1005:lle

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 Selitys

  • Code rivi 37–45: Tietueiden lisääminen implisiittistä konstruktoria käyttäen. Konstruktorin kutsu sisältää attribuuttiarvojen todellisen lukumäärän.
  • Code rivi 38: Määrittelee 'guru_emp_det':n objektityypiksi 'emp_object'.
  • Code rivi 41: Lause 'guru_emp_det.display_records' kutsuu 'display_records'-jäsentä ja attribuutin arvot näytetään.
  • Code rivi 42: Lause 'guru_emp_det.insert_records' kutsuu 'insert_records'-jäsentä ja attribuutin arvot lisätään taulukkoon. Lohko tekee sitten commitin kauppa.

lähtö:

Työntekijän nimi: RRR

Työntekijämäärä: 1005

Palkka: 20000

Johtaja: 1000

Vaihe 3) Luodaan anonyymi lohko kutsumaan luotua objektityyppiä eksplisiittisen konstruktorin kautta emp_no 1006:lle.

Alla olevassa kuvakaappauksessa näkyy anonyymi lohko, joka kutsuu emp_object-funktiota eksplisiittisen konstruktorin kautta kolmella argumentilla.

Anonyymi lohko, joka kutsuu emp_object-funktiota eksplisiittisen konstruktorin kautta emp_no 1006:lle

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;
/

ulostulo

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

Code Selitys:

  • Code rivi 46–53: Tietueen lisääminen eksplisiittistä konstruktoria käyttäen.
  • Code rivi 46: Määrittelee 'guru_emp_det':n objektityypiksi 'emp_object'.
  • Code rivi 50: Lause 'guru_emp_det.display_records' kutsuu 'display_records'-jäsentä ja attribuutin arvot näytetään.
  • Code rivi 51: Lause 'guru_emp_det.insert_records' kutsuu 'insert_records'-jäsentä ja attribuutin arvot lisätään tauluun. Koska argumentteja annetaan vain kolme, eksplisiittinen konstruktori asettaa managerin tunnukseksi oletusarvon 1001.

Objektityypin periytyminen

Perintäominaisuus sallii aliobjektityypin käyttää kaikkia pääobjektityypin tai pääobjektityypin attribuutteja ja jäseniä.

Aliobjektityyppiä kutsutaan periytyneeksi objektityypiksi ja superobjektityyppiä pääobjektityypiksi. Alla oleva syntaksi näyttää, kuinka pää- ja perityt objektityypit luodaan. Alla oleva kuvakaappaus näyttää päätyypin (SUPER) syntaksin, joka on merkitty NOT FINAL -merkinnällä.

CREATE TYPE -syntaksi periytymisessä käytettävälle NOT FINAL -pääobjektityypille

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

Syntaksiselitys:

  • Yllä oleva syntaksi näyttää SUPER-tyypin luomisen. NOT FINAL -lause mahdollistaa tyypin periytymisen.

Alla olevassa kuvakaappauksessa näkyy UNDER-avainsanalla luotu peritty (SUB) -tyypin syntaksi.

CREATE TYPE UNDER -syntaksi aliobjektityypille, joka periytyy pääobjektilta

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

Syntaksiselitys:

  • Yllä oleva syntaksi näyttää SUB-tyypin luomisen. Se sisältää kaikki pääobjektityypin jäsenet ja attribuutit.

Esimerkki 1: Alla olevassa esimerkissä käytämme periytymisominaisuutta lisätäksemme tietueen, jonka hallinnoijan tunnus on '1002', tietueelle ('RRR', 1007, 20000). Suoritamme ohjelman seuraavissa vaiheissa.

  • Vaihe 1: Luo SUPER-tyyppi.
  • Vaihe 2: Luo SUB-tyyppi ja runko.
  • Vaihe 3: Luo anonyymi lohko SUB-tyypin kutsumiseksi.

Vaihe 1) Luo SUPER-tyyppi tai Parent-tyyppi.

Alla olevassa kuvakaappauksessa näkyy emp_object-supertyypin luonti NOT FINAL -lausekkeella.

emp_object NOT FINAL -supertyypin luominen periytymisesimerkkiä varten

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 Selitys:

  • Code rivi 1–9: Luodaan 'emp_object'-objektityyppi, jossa on neljä attribuuttia ja kolme jäsentä. Se sisältää määritelmän konstruktorista, jossa on vain kolme parametria. Se on deklaroitu muodossa 'NOT FINAL', joten se on päätyyppi.

Vaihe 2) Luo SUB-tyyppi SUPER-tyypin alle.

Alla olevassa kuvakaappauksessa näkyy peritty sub_emp_object-tyyppi ja sen luotava runko.

Perityn sub_emp_object-tyypin ja sen rungon luominen insert_default_mgr-funktiolla

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 Selitys:

  • Code rivi 10–13: Luodaan peritty tyyppi 'sub_emp_object' yhdellä lisäattribuutilla 'default_manager' ja jäsenproseduurin määrittelyllä.
  • Code rivi 14: Perityn objektityypin rungon luominen.
  • Code rivi 16–21: Määritellään jäsenproseduuri, joka lisää tietueita 'emp'-taulukkoon SUPER-objektityypin arvoilla, lukuun ottamatta manager-arvoa. Manager-arvolle se käyttää SUB-tyypin 'default_manager'-arvoa.

Vaihe 3) Luodaan anonyymi lohko SUB-tyypin kutsumiseksi.

Alla olevassa kuvakaappauksessa näkyy anonyymi lohko, joka kutsuu SUB-tyyppiä ja lisää oletusarvoisen manageri-tunnuksen.

Anonyymi lohko, joka kutsuu sub_emp_object-tyyppiä oletusarvoisen manageri-tunnuksen lisäämiseksi

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 Selitys:

  • Code rivi 25: Määritellään 'guru_emp_det' tyypiksi 'sub_emp_object'.
  • Code rivi 27: Objektin alustaminen implisiittisellä konstruktorilla. Konstruktorilla on 5 parametria (4 PARENT-tyypin attribuuttia ja 1 SUB-tyypin attribuutti). Viimeinen parametri (1002) määrittää default_manager-attribuutin arvon.
  • Code rivi 28: Kutsutaan jäsentä 'insert_default_mgr' lisäämään tietue, jonka konstruktorissa on annettu oletusarvoinen hallinnoijan tunnus.

PL/SQL-objektien tasa-arvo

Samaan objektityyppiin kuuluvia objekti-instansseja voidaan verrata yhtäläisyyden varmistamiseksi. Tätä varten objektityypille tarvitaan erityinen ORDER-metodi.

Tämän ORDER-metodin tulisi olla funktio, joka palauttaa numeerisen tyypin. Se ottaa syötteeksi kaksi parametria (ensimmäinen parametri: itseobjekti-instanssin tunniste; toinen parametri: toisen objekti-instanssin tunniste).

Kahden objekti-instanssin tunnisteita verrataan ja tulos palautetaan numerona.

  • Positiivinen arvo osoittaa, että SELF-objekti-instanssi on suurempi kuin toinen instanssi.
  • Negatiivinen arvo osoittaa, että SELF-objekti-instanssi on pienempi kuin toinen instanssi.
  • Nolla osoittaa, että SELF-objekti-instanssi on yhtä suuri kuin toinen instanssi.
  • Jos jompikumpi instanssi on null, funktio palauttaa null-arvon.

Alla olevassa kuvakaappauksessa näkyy ORDER-jäsenfunktion syntaksi, joka on sisällytettävä tyyppirunkoon yhtäsuuruustarkistusta varten.

ORDER-jäsenfunktion syntaksi, jota käytetään objekti-instanssien vertailuun tasa-arvoisuuden varalta

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;
  .
  .
);
/

Syntaksiselitys:

  • Yllä oleva syntaksi näyttää ORDER-funktion, joka on sisällytettävä tyyppirunkoon yhtäsuuruustarkistusta varten.
  • Tämän funktion parametrin tulee olla saman objektityypin esiintymä.
  • Funktiota voidaan kutsua muodossa ”obj_instance_1.match(obj_instance_2)”, ja tämä lauseke palauttaa näytetyn numeerisen arvon, jossa obj_instance_1 ja obj_instance_2 ovat objektityypin instansseja.

Esimerkki 1: Seuraavassa esimerkissä vertaamme kahta oliota. Luomme kaksi instanssia ja vertaamme niiden 'salary'-attribuuttia. Teemme tämän kahdessa vaiheessa.

  • Vaihe 1: Luo objektityyppi ja runko.
  • Vaihe 2: Luo anonyymi lohko objekti-instanssien vertailemiseksi.

Vaihe 1) Objektityypin ja rungon luominen.

Alla olevat kuvakaappaukset näyttävät emp_object_equality-määrityksen ja sen rungon, joka määrittelee ORDER-funktion, joka vertailee salary-attribuuttia.

emp_object_equality-objektityyppimäärityksen luominen ORDER-funktiolla Salary-attribuuttia vertailevan emp_object_equality-tyyppirungon määrittely

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 Selitys:

  • Code rivi 1–4: Luodaan 'emp_object_equality'-objektityyppi yhdellä attribuutilla ja yhdellä jäsenellä.
  • Code rivi 6–16: Määritellään ORDER-funktio, joka vertaa SELF-instanssin ja parametri-instanssin 'salary'-attribuuttia. Se palauttaa negatiivisen arvon, jos SELF-palkka on pienempi, positiivisen arvon, jos SELF-palkka on suurempi, ja 0, jos palkat ovat yhtä suuret.

Code lähtö:

Tyyppi luotu

Vaihe 2) Anonyymin lohkon luominen objekti-instanssien vertailemiseksi.

Alla olevassa kuvakaappauksessa näkyy anonyymi lohko, joka vertaa kahta emp_object_equality-instanssia palkan mukaan.

Anonyymi lohko, joka vertaa kahta emp_object_equality-instanssia palkan mukaan

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;
/

ulostulo

Salary of second instance is greater

Code Selitys:

  • Code rivi 20: Määritellään 'l_obj_1', jonka tyyppi on 'emp_object_equality'.
  • Code rivi 21: Määritellään 'l_obj_2', jonka tyyppi on 'emp_object_equality'.
  • Code rivi 23: Alustataan 'l_obj_1' palkka-arvolla '15000'.
  • Code rivi 24: Alustataan 'l_obj_2' palkka-arvolla '17000'.
  • Code rivi 25–33: Viestin tulostaminen ORDER-funktion palauttaman luvun perusteella.

UKK

Objektityyppi mallintaa yhtä reaalimaailman oliota attribuuttien ja metodien avulla. kokoelma — VARRAY, sisäkkäinen taulukko tai assosiatiivinen taulukko — sisältää useita yhden tietotyypin elementtejä. Objektityypit kuvaavat rakennetta ja toimintaa, kun taas kokoelmat tallentavat useita arvoja.

Molemmat vertailevat objekti-instansseja. MAP-metodi palauttaa yhden skalaariarvon, joka Oracle käytetään objektien lajitteluun tai vertailuun, kun taas ORDER-metodi vertaa kahta instanssia suoraan ja palauttaa negatiivisen, nollan tai positiivisen luvun. Tyyppi voi määrittää jommankumman, ei molempia.

Kyllä. Voit luoda objektitaulukon, jossa jokainen rivi on objekti-instanssi, tai käyttää objektityyppiä taulukon sarakkeen tietotyyppinä. Tämä mahdollistaa Oracle säilyttää strukturoituja objekteja suoraan tietokannassa pelkän muistin sijaan.

NOT INSTANTIABLE -tyyppi ei voi luoda olioita suoraan; se toimii abs-objektina.tract-tyyppi, jota muut tyypit laajentavat. Yhdessä NOT FINAL -tyyppien kanssa se määrittelee supertyypin, jonka alityypit tarjoavat sen ilmoitettujen metodien konkreettisen toteutuksen.

Käytä ALTER TYPE -käskyä lisätäksesi tai poistaaksesi attribuutteja ja metodeja, lisää CASCADE-käsky riippuvaisten objektien päivittämiseen ja käytä DROP TYPE -käskyä tyypin poistamiseen. Taulukoiden tai muiden tyyppien edelleen käyttämää tyyppiä ei voida poistaa, ennen kuin kyseiset riippuvaiset objektit on ensin käsitelty.

Kysele tyyppien nimiä datakirjastonäkymistä USER_TYPES ja ALL_TYPES sekä niiden attribuutteja ja metodeja USER_TYPE_ATTRS ja USER_TYPE_METHODS. Näiden näkymien avulla voit tarkastaa olemassa olevan objektimallin lukematta lähdekoodia.

Kyllä. GitHub Copilot luonnokset Luo TYPE-määrityksiä, TYPE BODY -metodeja, konstruktoreita ja ORDER-funktioita kommentista. RevTarkista attribuuttien tietotyypit, konstruktoriparametrit ja periytymislausekkeet ennen luodun tyypin käyttöönottoa.

Tekoälyavustajat analysoivat taulukoitasi ja ehdottavat objektityyppejä ja attribuuttikarttaapingja periytymishierarkiat. Tämä koneoppimiseen perustuva tarkastelu merkitsee tarpeettomat attribuutit, puuttuvat konstruktorit ja liian syvän periytymisen ennen kuin objektimalli pääsee tuotantoon, mikä parantaa ylläpidettävyyttä.

Tiivistä tämä viesti seuraavasti: