Oracle PL/SQL tipovi objekata: CREATE TYPE s primjerima

โšก Pametni saลพetak

Objektni tipovi u PL/SQL-u donose objektno orijentirano programiranje u Oracle, ลกto vam omoguฤ‡uje modeliranje entiteta iz stvarnog svijeta s atributima i metodama. Podrลพavaju konstruktore, nasljeฤ‘ivanje i usporedbu jednakosti, tako da jedan tip na razini sheme moลพe pohranjivati โ€‹โ€‹i obraฤ‘ivati โ€‹โ€‹strukturirane podatke.

  • ๐Ÿงฑ Komponente tipa objekta: Objektni tip kombinira atribute koji pohranjuju podatke i ฤlanove, ili metode, koje definiraju njegovu logiku obrade.
  • ๐Ÿ—๏ธ Stvori objekt: Tipovi objekata stvaraju se na razini sheme pomoฤ‡u CREATE TYPE, a njihove metode definirane su u zasebnom CREATE TYPE BODY-ju.
  • ๐Ÿ”ง Konstruktori: Svaki tip objekta ima implicitni konstruktor nazvan po tipu, a moลพete definirati eksplicitni konstruktor za postavljanje zadanih vrijednosti.
  • ๐Ÿงฌ nasljedstvo: Nadreฤ‘eni tip koji nije FINAL proลกiruje se s UNDER, pa podtip nasljeฤ‘uje sve roditeljske atribute i ฤlanove.
  • โš–๏ธ Jednakost: Funkcija ฤlanica ORDER usporeฤ‘uje dvije instance objekta i vraฤ‡a negativni, nula ili pozitivan broj.
  • ๐Ÿค– AI pomoฤ‡: AI asistenti poput GitHub Copilota izraฤ‘uju CREATE TYPE definicije, konstruktore i ORDER metode iz komentara.

Oracle PL/SQL tipovi objekata koji prikazuju CREATE TYPE s atributima i metodama

ล to je vrsta objekta u PL/SQL?

Objektno orijentirano programiranje posebno je prikladno za izgradnju viลกekratno upotrebljivih komponenti i sloลพenih aplikacija. Programi su organizirani oko "objekata", a ne oko "akcija"; to jest, dizajnirani su za rad i interakciju s cijelim objektom, a ne s jednom akcijom. Ovaj pristup omoguฤ‡uje programeru popunjavanje i manipuliranje detaljima na razini objekta i entiteta.

Donja slika prikazuje primjer tipa objekta u kojem se bankovni raฤun tretira kao entitet objekta. Atributi objekta sadrลพe vrijednosti - za bankovni raฤun to su broj raฤuna, stanje na bankovnom raฤunu i tako dalje - dok metode objekta opisuju radnje poput izraฤuna kamatne stope ili generiranja bankovnog izvoda, od kojih svaka zahtijeva dovrลกetak procesa.

Bankovni raฤun modeliran kao objektni tip s atributima i metodama u PL/SQL-u

In PL / SQLObjektno orijentirano programiranje temelji se na tipovima objekata. Tip objekta moลพe predstavljati bilo koji entitet iz stvarnog svijeta. U donjim odjeljcima istraลพuju se tipovi objekata, njihove komponente te kako ih stvoriti i koristiti.

Komponente tipova objekata

PL/SQL objektni tip sadrลพi uglavnom dvije komponente.

  1. Znaฤajke
  2. ฤŒlanovi/Metode

Znaฤajke

Atributi su stupci ili polja u kojima se pohranjuju podaci. Svaki atribut je mapiran na tip podataka koji definira tip obrade i pohrane za taj atribut. Atribut moลพe biti bilo kojeg valjanog PL/SQL tip podataka, ili moลพe biti drugog tipa objekta.

ฤŒlanovi/Metode

ฤŒlanovi ili metode su potprogrami definirani unutar tipa objekta. Ne koriste se za pohranu podataka; umjesto toga definiraju obradu koja se izvodi unutar tipa objekta - na primjer, provjeru valjanosti podataka prije popunjavanja objekta. Deklarirani su u specifikaciji tipa objekta i definirani u tijelu tipa objekta. Tijelo je opcionalno: ako nema ฤlanova, tip objekta nema dio tijela.

Stvori objekt u Oracle

Tip objekta ne moลพe se stvoriti na razini potprograma; moลพe se stvoriti samo na razini sheme. Nakon ลกto je tip objekta definiran u shemi, moลพe se koristiti u potprogramima. Tip objekta stvara se pomoฤ‡u naredbe โ€žCREATE TYPEโ€œ, a tijelo tipa moลพe se stvoriti tek nakon ลกto njegov tip objekta postoji.

Snimke zaslona u nastavku prikazuju sintaksu CREATE TYPE za specifikaciju objekta i sintaksu CREATE TYPE BODY koja definira njegove metode.

Sintaksa CREATE TYPE koja definira specifikaciju objekta s atributima u Oracle Sintaksa CREATE TYPE BODY koja definira metode PL/SQL objektnog tipa

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

Objaลกnjenje sintakse:

  • Gornja sintaksa prikazuje stvaranje OBJEKTA s atributima i TIJELA OBJEKTA s metodama.
  • Metode takoฤ‘er mogu biti preoptereฤ‡ene u tijelu objekta.

Inicijalizacija deklaracije tipa objekta

Kao i druge komponente u PL/SQL-u, tipovi objekata moraju se deklarirati prije nego ลกto se koriste u programu. Nakon ลกto je tip objekta kreiran, moลพe se koristiti u deklarativnom dijelu potprograma za deklariranje varijable tog tipa objekta.

Kad god se varijabla deklarira kao objektni tip, tijekom izvoฤ‘enja programa stvara se nova instanca objektnog tipa, a na tu novostvorenu instancu se referira naziv varijable. Na taj naฤin, jedan objektni tip moลพe pohraniti viลกe vrijednosti pod razliฤitim instancama.

Snimka zaslona u nastavku prikazuje varijablu deklariranu kao objektni tip unutar PL/SQL blok.

Deklariranje varijable objektnog tipa u deklarativnom dijelu PL/SQL bloka

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

Objaลกnjenje sintakse:

  • Gornja sintaksa prikazuje deklaraciju varijabla kao tip objekta u deklarativnom dijelu.

Nakon ลกto je varijabla deklarirana kao objektni tip u potprogramu, ona je atomski null - cijeli objekt je sam po sebi null. Mora se inicijalizirati vrijednostima prije nego ลกto se moลพe koristiti u programu. Objekti se inicijaliziraju pomoฤ‡u konstruktora.

Konstruktori su implicitne metode objekta na koje se moลพe referirati s istim imenom kao i tip objekta. Snimka zaslona u nastavku prikazuje inicijalizaciju instance tipa objekta.

Inicijalizacija instance objektnog tipa na null pomoฤ‡u konstruktora

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

Objaลกnjenje sintakse:

  • Gornja sintaksa prikazuje inicijalizaciju instance tipa objekta s null vrijednoลกฤ‡u.
  • Sam objekt viลกe nije null nakon ลกto je inicijaliziran, ali atributi unutar objekta ostaju null sve dok im se ne dodijele vrijednosti.

Konstruktori

Konstruktori su implicitne metode objekta na koje se moลพe referirati s istim imenom kao i tip objekta. Kad god se na objekt referira prvi put, ovaj konstruktor se implicitno poziva.

Objekte moลพete inicijalizirati i pomoฤ‡u ovih konstruktora. Konstruktor se moลพe eksplicitno definirati definiranjem ฤlana u tijelu tipa objekta s istim imenom kao i tip objekta.

Primjer 1: U sljedeฤ‡em primjeru koristimo ฤlan tipa objekta za umetanje zapisa u emp tablicu s vrijednostima ('RRR', 1005, 20000, 1000) i ('PPP', 1006, 20000, 1001). Nakon ลกto su podaci umetnuti, prikazujemo ih pomoฤ‡u ฤlana tipa objekta. Takoฤ‘er koristimo eksplicitni konstruktor za popunjavanje ID-a upravitelja zadanom vrijednoลกฤ‡u 1001 za drugi zapis.

Izvrลกavamo ga u sljedeฤ‡im koracima.

  • Korak 1: Izradite tip objekta i tijelo tipa objekta.
  • Korak 2: Izradite anonimni blok za pozivanje tipa objekta putem implicitnog konstruktora za emp_no 1005.
  • Korak 3: Izradite anonimni blok za pozivanje tipa objekta putem eksplicitnog konstruktora za emp_no 1006.

Korak 1) Izradite tip objekta i tijelo tipa objekta.

Snimka zaslona u nastavku prikazuje specifikaciju tipa objekta emp_object koja se stvara s njezinim atributima i ฤlanovima.

Izrada specifikacije tipa objekta emp_object s atributima i ฤlanovima

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

Snimka zaslona u nastavku prikazuje tijelo tipa emp_object koje se stvara pomoฤ‡u eksplicitnog konstruktora i procedura ฤlanova.

Definiranje tijela tipa emp_object s eksplicitnim konstruktorom i procedurama ฤlanova

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 Objaลกnjenje

  • Code redak 1-9: Izrada objekta tipa 'emp_object' s 4 atributa i 3 ฤlana. Sadrลพi definiciju konstruktora sa samo 3 parametra. (Stvarni implicitni konstruktor sadrลพi broj parametara jednak broju atributa prisutnih u objektu tipa.)
  • Code redak 10: Izrada tijela tipa.
  • Code redak 11-21: Definiranje eksplicitnog konstruktora. Dodjeljivanje vrijednosti parametara atributima i dodjeljivanje atributu 'manager' zadane vrijednosti '1001'.
  • Code redak 22-26: Definiranje ฤlana 'insert_records', u kojem se vrijednosti atributa ubacuju u tablicu 'emp'.
  • Code redak 27-34: Definiranje ฤlana 'display_records', koji prikazuje vrijednosti atributa tipa objekta.

Izlaz:

Vrsta je stvorena

Tijelo tipa stvoreno

Korak 2) Stvaranje anonimnog bloka za pozivanje kreiranog tipa objekta putem implicitnog konstruktora za emp_no 1005.

Snimka zaslona u nastavku prikazuje anonimni blok koji poziva emp_object putem implicitnog konstruktora.

Anonimni blok poziva emp_object putem implicitnog konstruktora za emp_no 1005

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 Objaลกnjenje

  • Code redak 37-45: Umetanje zapisa pomoฤ‡u implicitnog konstruktora. Poziv konstruktora sadrลพi stvarni broj vrijednosti atributa.
  • Code redak 38: Deklarira 'guru_emp_det' kao tip objekta 'emp_object'.
  • Code redak 41: Naredba 'guru_emp_det.display_records' poziva ฤlan 'display_records' i prikazuju se vrijednosti atributa.
  • Code redak 42: Naredba 'guru_emp_det.insert_records' poziva ฤlan 'insert_records' i vrijednosti atributa se ubacuju u tablicu. Blok zatim potvrฤ‘uje (commit) transakcija.

Izlaz:

Ime zaposlenika: RRR

Broj zaposlenika: 1005

Plaฤ‡a: 20000

Voditelj: 1000

Korak 3) Stvaranje anonimnog bloka za pozivanje kreiranog tipa objekta putem eksplicitnog konstruktora za emp_no 1006.

Snimka zaslona u nastavku prikazuje anonimni blok koji poziva emp_object putem eksplicitnog konstruktora s tri argumenta.

Anonimni blok poziva emp_object putem eksplicitnog konstruktora za emp_no 1006

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

Izlaz

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

Code Objaลกnjenje:

  • Code redak 46-53: Umetanje zapisa pomoฤ‡u eksplicitnog konstruktora.
  • Code redak 46: Deklarira 'guru_emp_det' kao tip objekta 'emp_object'.
  • Code redak 50: Naredba 'guru_emp_det.display_records' poziva ฤlan 'display_records' i prikazuju se vrijednosti atributa.
  • Code redak 51: Naredba 'guru_emp_det.insert_records' poziva ฤlan 'insert_records' i vrijednosti atributa se ubacuju u tablicu. Buduฤ‡i da se prosljeฤ‘uju samo tri argumenta, eksplicitni konstruktor postavlja ID upravitelja na njegovu zadanu vrijednost 1001.

Nasljeฤ‘ivanje u tipu objekta

Svojstvo nasljeฤ‘ivanja omoguฤ‡uje podobjektovom tipu pristup svim atributima i ฤlanovima nadreฤ‘enog tipa objekta ili nadreฤ‘enog tipa objekta.

Tip podobjekta naziva se naslijeฤ‘eni tip objekta, a tip nadreฤ‘enog objekta naziva se tip roditeljskog objekta. Sintaksa u nastavku prikazuje kako stvoriti roditeljske i naslijeฤ‘ene tipove objekata. Snimka zaslona u nastavku prikazuje sintaksu roditeljskog (SUPER) tipa oznaฤenu kao NIJE KONAฤŒNO.

Sintaksa CREATE TYPE za NOT FINAL nadreฤ‘eni tip objekta koji se koristi u nasljeฤ‘ivanju

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

Objaลกnjenje sintakse:

  • Gornja sintaksa prikazuje stvaranje tipa SUPER. Klauzula NOT FINAL omoguฤ‡uje nasljeฤ‘ivanje tipa.

Snimka zaslona u nastavku prikazuje naslijeฤ‘enu sintaksu tipa (SUB) stvorenu kljuฤnom rijeฤi UNDER.

Sintaksa CREATE TYPE UNDER za tip podobjekta koji nasljeฤ‘uje od roditelja

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

Objaลกnjenje sintakse:

  • Gornja sintaksa prikazuje stvaranje SUB tipa. Sadrลพi sve ฤlanove i atribute iz nadreฤ‘enog tipa objekta.

Primjer 1: U donjem primjeru koristimo svojstvo nasljeฤ‘ivanja za umetanje zapisa s ID-om upravitelja '1002' za zapis ('RRR', 1007, 20000). Program izvrลกavamo u sljedeฤ‡im koracima.

  • Korak 1: Kreirajte tip SUPER.
  • Korak 2: Izradite SUB tip i tijelo.
  • Korak 3: Izradite anonimni blok za pozivanje tipa SUB.

Korak 1) Kreirajte SUPER tip ili Parent tip.

Snimka zaslona u nastavku prikazuje kako se supertip emp_object stvara pomoฤ‡u klauzule NOT FINAL.

Stvaranje nadtipa emp_object NOT FINAL za primjer nasljeฤ‘ivanja

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 Objaลกnjenje:

  • Code redak 1-9: Izrada tipa objekta 'emp_object' s 4 atributa i 3 ฤlana. Sadrลพi definiciju konstruktora sa samo 3 parametra. Deklariran je kao 'NOT FINAL', pa je roditeljski tip.

Korak 2) Kreirajte SUB tip pod SUPER tipom.

Snimka zaslona u nastavku prikazuje naslijeฤ‘eni tip sub_emp_object i njegovo tijelo koje se stvara.

Stvaranje naslijeฤ‘enog tipa sub_emp_object i njegovog tijela pomoฤ‡u 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 Objaลกnjenje:

  • Code redak 10-13: Stvaranje 'sub_emp_object' kao naslijeฤ‘enog tipa s jednim dodatnim atributom 'default_manager' i deklaracijom procedure ฤlana.
  • Code redak 14: Stvaranje tijela za naslijeฤ‘eni tip objekta.
  • Code redak 16-21: Definiranje procedure ฤlana koja ubacuje zapise u tablicu 'emp' s vrijednostima iz objekta tipa SUPER, osim vrijednosti upravitelja. Za vrijednost upravitelja koristi se 'default_manager' iz tipa SUB.

Korak 3) Izrada anonimnog bloka za pozivanje SUB tipa.

Snimka zaslona u nastavku prikazuje anonimni blok koji poziva tip SUB i umeฤ‡e zadani ID upravitelja.

Anonimni blok poziva tip sub_emp_object za umetanje zadanog ID-a upravitelja

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 Objaลกnjenje:

  • Code redak 25: Deklariranje 'guru_emp_det' kao tipa 'sub_emp_object'.
  • Code redak 27: Inicijalizacija objekta implicitnim konstruktorom. Konstruktor ima 5 parametara (4 atributa tipa PARENT i 1 atribut tipa SUB). Posljednji parametar (1002) definira vrijednost atributa default_manager.
  • Code redak 28: Pozivanje ฤlana 'insert_default_mgr' za umetanje zapisa s zadanim ID-om upravitelja proslijeฤ‘enim u konstruktoru.

Jednakost PL/SQL objekata

Instance objekata koje pripadaju istom tipu objekta mogu se usporeฤ‘ivati โ€‹โ€‹radi jednakosti. Za to je tipu objekta potrebna posebna metoda koja se naziva ORDER metoda.

Ova ORDER metoda trebala bi biti funkcija koja vraฤ‡a numeriฤki tip. Uzima dva parametra kao ulaz (prvi parametar: ID instance samog objekta; drugi parametar: ID druge instance objekta).

Usporeฤ‘uju se ID-ovi dviju instanci objekta, a rezultat se vraฤ‡a kao broj.

  • Pozitivna vrijednost oznaฤava da je instanca SELF objekta veฤ‡a od druge instance.
  • Negativna vrijednost oznaฤava da je instanca SELF objekta manja od druge instance.
  • Nula oznaฤava da je instanca SELF objekta jednaka drugoj instanci.
  • Ako je bilo koja instanca null, funkcija vraฤ‡a null.

Snimka zaslona u nastavku prikazuje sintaksu funkcije ฤlanice ORDER koja mora biti ukljuฤena u tijelo tipa za provjeru jednakosti.

Sintaksa ORDER funkcije ฤlanice koja se koristi za usporedbu instanci objekata radi jednakosti

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

Objaลกnjenje sintakse:

  • Gornja sintaksa prikazuje funkciju ORDER koja mora biti ukljuฤena u tijelo tipa za provjeru jednakosti.
  • Parametar za ovu funkciju trebao bi biti instanca istog tipa objekta.
  • Funkcija se moลพe pozvati kao โ€žobj_instance_1.match(obj_instance_2)โ€œ, a ovaj izraz vraฤ‡a prikazanu numeriฤku vrijednost, gdje su obj_instance_1 i obj_instance_2 instance tipa objekta.

Primjer 1: U sljedeฤ‡em primjeru usporeฤ‘ujemo dva objekta. Stvaramo dvije instance i usporeฤ‘ujemo atribut 'plaฤ‡a' izmeฤ‘u njih. To radimo u dva koraka.

  • Korak 1: Kreirajte tip i tijelo objekta.
  • Korak 2: Izradite anonimni blok za usporedbu instanci objekta.

Korak 1) Izrada tipa i tijela objekta.

Snimke zaslona u nastavku prikazuju specifikaciju emp_object_equality i njezino tijelo, koje definira funkciju ORDER koja usporeฤ‘uje atribut salary.

Izrada specifikacije tipa objekta emp_object_equality pomoฤ‡u funkcije ORDER Definiranje tijela tipa emp_object_equality koje usporeฤ‘uje atribut salary

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 Objaลกnjenje:

  • Code redak 1-4: Izrada objekta tipa 'emp_object_equality' s 1 atributom i 1 ฤlanom.
  • Code redak 6-16: Definiranje funkcije ORDER koja usporeฤ‘uje atribut 'plaฤ‡a' instance SELF i instance parametra. Vraฤ‡a negativnu vrijednost ako je SELF plaฤ‡a manja, pozitivnu vrijednost ako je SELF plaฤ‡a veฤ‡a i 0 ako su plaฤ‡e jednake.

Code Izlaz:

Vrsta je stvorena

Korak 2) Izrada anonimnog bloka za usporedbu instanci objekta.

Snimka zaslona u nastavku prikazuje anonimni blok koji usporeฤ‘uje dvije instance emp_object_equality prema plaฤ‡i.

Anonimni blok koji usporeฤ‘uje dvije instance emp_object_equality prema plaฤ‡i

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

Izlaz

Salary of second instance is greater

Code Objaลกnjenje:

  • Code redak 20: Deklariranje 'l_obj_1' tipa 'emp_object_equality'.
  • Code redak 21: Deklariranje 'l_obj_2' tipa 'emp_object_equality'.
  • Code redak 23: Inicijalizacija 'l_obj_1' s vrijednoลกฤ‡u plaฤ‡e '15000'.
  • Code redak 24: Inicijalizacija 'l_obj_2' s vrijednoลกฤ‡u plaฤ‡e '17000'.
  • Code redak 25-33: Ispis poruke na temelju broja koji je vratila funkcija ORDER.

Pitanja i odgovori

Objektni tip modelira jedan entitet iz stvarnog svijeta s atributima i metodama. zbirka โ€” VARRAY, ugnijeลพฤ‘ena tablica ili asocijativni niz โ€” sadrลพi mnogo elemenata jednog tipa podataka. Tipovi objekata opisuju strukturu i ponaลกanje, dok kolekcije pohranjuju viลกe vrijednosti.

Obje usporeฤ‘uju instance objekata. MAP metoda vraฤ‡a jednu skalarnu vrijednost koja Oracle koristi se za sortiranje ili usporedbu objekata, dok metoda ORDER izravno usporeฤ‘uje dvije instance i vraฤ‡a negativni, nulti ili pozitivni broj. Tip moลพe definirati jedan ili drugi, ne oba.

Da. Moลพete stvoriti tablicu objekata gdje je svaki redak instanca objekta ili koristiti tip objekta kao tip podataka stupca tablice. To omoguฤ‡uje Oracle pohraniti strukturirane objekte izravno u bazi podataka, a ne samo u memoriji.

Tip koji nije instantiable ne moลพe izravno stvarati objekte; djeluje kao abs.tract baza koju proลกiruju drugi tipovi. U kombinaciji s NOT FINAL, definira nadtip ฤiji podtipovi pruลพaju konkretnu implementaciju njegovih deklariranih metoda.

Koristite ALTER TYPE za dodavanje ili uklanjanje atributa i metoda, dodajte CASCADE za aลพuriranje zavisnih objekata i koristite DROP TYPE za uklanjanje tipa. Tip koji joลก uvijek koriste tablice ili drugi tipovi ne moลพe se ukloniti dok se prvo ne obrade ti ovisni objekti.

Upitajte prikaze rjeฤnika podataka USER_TYPES i ALL_TYPES za nazive tipova te USER_TYPE_ATTRS i USER_TYPE_METHODS za njihove atribute i metode. Ovi prikazi omoguฤ‡uju vam reviziju postojeฤ‡eg objektnog modela bez ฤitanja izvornog koda.

Da. GitHub kopilot iz komentara izraฤ‘uje specifikacije CREATE TYPE, metode TYPE BODY, konstruktore i funkcije ORDER. RevPrije implementacije generiranog tipa pregledajte tipove podataka atributa, parametre konstruktora i klauzule nasljeฤ‘ivanja.

AI asistenti analiziraju vaลกe tablice i predlaลพu tipove objekata, mapu atributapingi hijerarhije nasljeฤ‘ivanja. Ovaj pregled strojnog uฤenja oznaฤava redundantne atribute, nedostajuฤ‡e konstruktore i preduboko nasljeฤ‘ivanje prije nego ลกto objektni model dosegne produkciju, poboljลกavajuฤ‡i odrลพavanje.

Saลพmite ovu objavu uz: