Vodič za Vrste objekata Oracle PL / SQL s PRIMJERIMA

Sadržaj:

Anonim

Što je vrsta objekta u PL / SQL-u?

Objektno orijentirano programiranje posebno je pogodno za izgradnju komponenata za ponovnu upotrebu i složenih aplikacija. Oni su organizirani oko "objekata", a ne "radnji", tj. Programi su dizajnirani za rad i interakciju s cijelim objektom, a ne s jednom radnjom. Ovaj koncept omogućava programeru da popuni i manipulira detaljima na razini objektnih entiteta.

Ispod je prikazan primjer vrste predmeta u kojem se bankovni račun smatra objektom. Atributi objekta uključuju stvari koje sadrže neke vrijednosti atributa, na primjer na bankovnom računu; to je broj računa, stanje banke itd., dok objektne metode opisuju stvari poput izračunavanja kamatne stope, generiranja bankovnih izvoda itd. što zahtijeva dovršenje određenog postupka.

U PL / SQL objektno orijentirano programiranje temelji se na vrstama objekata.

Tip objekta može predstavljati bilo koji stvarni svijet. U ovom ćemo poglavlju razgovarati o više vrsta objekata.

U ovom vodiču - naučit ćete,

  • Komponente vrsta objekata
  • Stvorite objekt u Oracleu
  • Inicijalizacija deklaracije vrste objekta
  • Konstruktori
  • Nasljeđivanje u vrsti objekta
  • Jednakost PL / SQL objekata

Komponente vrsta objekata

Vrsta objekta PL / SQL sadrži uglavnom dvije komponente.

  1. Atributi
  2. Članovi / metode

Atributi

Atributi su stupac ili polje u kojem se pohranjuju podaci. Svaki će se atribut preslikati u tip podataka koji definira vrstu obrade i pohrane za taj atribut. Atribut može biti bilo kojeg valjanog PL / SQL tipa podataka ili može biti drugog tipa objekta.

Članovi / metode

Članovi ili metode su potprogrami koji su definirani u tipu objekta. Ne koriste se za pohranu podataka. Uglavnom se koriste za definiranje procesa unutar tipa objekta. Za primjere provjere valjanosti podataka prije popunjavanja vrste objekta. Oni su deklarirani u odjeljku tipa objekta i definirani u odjeljku tijela tipa objekta tipa objekta. Odjeljak tijela u tipu objekta neobavezan je dio. Ako nije prisutan nijedan član, tada vrsta objekta neće sadržavati dio tijela.

Stvorite objekt u Oracleu

Tip objekta ne može se stvoriti na razini potprograma, oni se mogu stvoriti samo na razini sheme. Jednom kada je tip objekta definiran u shemi, tada se isti može koristiti u potprogramima. Tip objekta može se stvoriti pomoću 'CREATE TYPE'. Tijelo tipa može se stvoriti tek nakon stvaranja njegovog tipa objekta.

CREATE TYPE AS OBJECT(,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION]ISBEGINEND;‭… ‬);/

Objašnjenje sintakse:

  • Gornja sintaksa prikazuje stvaranje 'OBJECT' s atributima i 'OBJECT-BODY' s metodama.
  • Metode se također mogu preopteretiti u tijelu objekta.

Inicijalizacija deklaracije vrste objekta

Kao i ostale komponente u PL / SQL-u, vrste objekata također je potrebno deklarirati prije upotrebe u programu.

Jednom kada se stvori tip objekta, može se koristiti u deklarativnom odjeljku potprograma za deklariranje varijable tog tipa objekta.

Kad god je bilo koja varijabla deklarirana u potprogramu kao tip objekta, u vrijeme izvođenja stvorit će se nova instanca tipa objekta, a ta se novostvorena instanca može uputiti na ime varijable. Na taj način, jedan tip objekta može pohraniti više vrijednosti u različitim instancama.

DECLARE ;BEGIN… END;/

Objašnjenje sintakse:

  • Gornja sintaksa prikazuje deklaraciju varijable kao tipa objekta u deklarativnom odjeljku.

Jednom kada je varijabla deklarirana kao tip objekta u potprogramu, ona će atomski biti nula, tj. Cijeli objekt sam po sebi nula. Potrebno ga je inicijalizirati vrijednostima da bi se koristile u programu. Mogu se inicijalizirati pomoću konstruktora.

Konstruktori su implicitna metoda objekta koja se može uputiti s istim imenom kao i vrsta objekta. Sintaksa u nastavku prikazuje inicijalizaciju tipa objekta.

DECLARE ;BEGIN:=();END;/

Objašnjenje sintakse:

  • Gornja sintaksa prikazuje inicijalizaciju instance tipa objekta s null vrijednošću.
  • Sad sam objekt nije nulan jer je inicijaliziran, ali atributi unutar objekta bit će nuli jer tim atributima nismo dodijelili nikakve vrijednosti.

Konstruktori

Konstruktori su implicitna metoda objekta koja se može uputiti s istim imenom kao i vrsta objekta. Kad god se objekt prvi put uputi, taj će se konstruktor pozvati implicitno.

Objekte također možemo inicijalizirati pomoću ovih konstruktora. Konstruktor se može eksplicitno definirati definiranjem člana u tijelu tipa objekta s istim imenom tipa objekta.

Primjer 1 : U sljedećem primjeru koristit ćemo člana tipa objekta za umetanje zapisa u emp tablicu s vrijednostima ('RRR', 1005, 20000, 1000) i ('PPP', 1006, 20000, 1001). Jednom kada su podaci umetnuti, prikazat ćemo iste pomoću člana tipa objekta. Također ćemo koristiti eksplicitni konstruktor za popunjavanje ID-a upravitelja prema zadanim postavkama s vrijednošću 1001 za drugi zapis.

Izvršit ćemo ga u donjim koracima.

  • Korak 1:
    • Stvori vrstu objekta
    • Tijelo tipa objekta
  • Korak2: Stvaranje anonimnog bloka za pozivanje stvorenog tipa objekta kroz implicitni konstruktor za emp_no 1005.
  • Korak 3: Stvaranje anonimnog bloka za pozivanje stvorenog tipa objekta putem eksplicitnog konstruktora za emp_no 1006.

Korak 1) Stvorite vrstu objekta i tijelo tipa objekta

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);/
CREATE OR REPLACE TYPE BODY emp_object ASCONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2,p_salary NUMBER)RETURN SELF AS RESULTISBEGINDbms_output.put_line(’Constructor fired… ');SELF.emp_no:=p_emp_no;|SELF.emp_name:=p_emp_name;SELF.salary:=p_salary;SELF.managerial:=1001;RETURN;END:MEMBER PROCEDURE insert_recordsISBEGININSERT INTO emp VALUES(emp_noemp_name,salary,manager);ENDMEMBER PROCEDURE display_recordsISBEGINDbms_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:/

Objašnjenje koda

  • Redak koda 1-9 : Stvaranje tipa objekta 'emp_object' s 4 atributa i 3 člana. Sadrži definiciju konstruktora sa samo 3 parametra. (Stvarni implicitni konstruktor sadržavat će broj parametara jednak broju atributa prisutnih u tipu objekta)
  • Redak koda 10 : Stvaranje tijela tipa.
  • Redak koda 11-21 : Definiranje eksplicitnog konstruktora. Dodjeljivanje vrijednosti parametra atributima i dodjeljivanje vrijednosti za atribut 'upravitelj' sa zadanom vrijednošću '1001'.
  • Redak koda 22-26 : Definiranje člana 'insert_records' u kojem su vrijednosti atributa umetnute u tablicu 'emp'.
  • Redak koda 27-34 : Definiranje člana 'display_records' u kojem se prikazuju vrijednosti atributa tipa objekta.

Izlaz

Tip stvoren

Stvoreno tijelo tipa

Korak 2) Stvaranje anonimnog bloka za pozivanje stvorenog tipa objekta kroz implicitni konstruktor za emp_no 1005

DECLAREguru_emp_det emp_object;BEGINguru_emp_det:=emp_object(1005,’RRR',20000,1000);guru_emp_det.display_records;guru_emp_det.insert_records;COMMIT;END;

Objašnjenje koda

  • Redak koda 37-45 : Umetanje zapisa pomoću implicitnog konstruktora. Poziv konstruktoru sadrži stvarni broj vrijednosti atributa.
  • Redak koda 38 : Deklarira guru_emp_det kao vrstu objekta 'emp_object'.
  • Redak koda 41 : Izjava 'guru_emp_det.display_records' koja se naziva funkcija člana 'diplay_records' i prikazuju se vrijednosti atributa
  • Redak koda 42 : Izjava 'guru_emp_det.insert_records' koja se zove funkcija člana 'insert_records' i vrijednosti atributa ubacuju se u tablicu.

Izlaz

Ime zaposlenika: RRR

Broj zaposlenika: 1005

Plaća: 20000

Voditelj: 1000

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

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

Izlaz

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

Objašnjenje koda:

  • Redak koda 46-53 : Umetanje zapisa pomoću eksplicitnog konstruktora.
  • Redak koda 46 : Deklarira guru_emp_det kao vrstu objekta 'emp_object'.
  • Redak koda 50 : Izjava 'guru_emp_det.display_records' koja se naziva funkcija člana 'display_records' i prikazuju se vrijednosti atributa
  • Redak koda 51 : Izjava 'guru_emp_det.insert_records' koja se naziva funkcija člana 'insert_records' i vrijednosti atributa ubacuju se u tablicu.

Nasljeđivanje u vrsti objekta

Svojstvo nasljeđivanja omogućuje podtipu da pristupi svim atributima i članovima tipa super objekta ili nadređenog tipa objekta.

Tip pod-objekta naziva se naslijeđeni tip objekta, a tip super-objekta naziva se roditeljski tip objekta. Sintaksa u nastavku prikazuje kako stvoriti nadređeni i naslijeđeni tip objekta.

CREATE TYPE  AS OBJECT(,… )NOT FINAL;/

Objašnjenje sintakse:

  • Gornja sintaksa prikazuje stvaranje SUPER tipa.
CREATE TYPEUNDER(,.);/

Objašnjenje sintakse:

  • Gornja sintaksa prikazuje stvaranje tipa SUB. Sadrži sve članove i atribute iz roditeljskog tipa objekta.

Primjer1: U donjem primjeru koristit ćemo nasljedno svojstvo za umetanje zapisa s ID-om upravitelja kao '1002' za sljedeći zapis ('RRR', 1007, 20000).

Izvršit ćemo gornji program u sljedećim koracima

  • Korak 1: Stvorite SUPER tip.
  • Korak 2: Stvorite tip i tijelo SUB-a.
  • Korak 3: Stvaranje anonimnog bloka za pozivanje tipa SUB.

Korak 1) Stvorite SUPER tip ili Roditeljski tip.

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

Objašnjenje koda:

  • Redak koda 1-9 : Stvaranje tipa objekta 'emp_object' s 4 atributa i 3 člana. Sadrži definiciju konstruktora sa samo 3 parametra. Proglašen je kao 'NIJE KONAČAN', pa je roditeljski tip.

Korak 2) Stvorite tip SUB pod tipom SUPER.

CREATE OR REPLACE TYPE sub_emp_objectUNDER emp_object(default_manager NUMBER,MEMBER PROCEDURE insert_default_mgr);/CREATE OR REPLACE TYPE BODY sub_emp_objectASMEMBER PROCEDURE insert_default_mgrISBEGININSERT INTO empVALUES(emp_no,emp_name:salary,manager):END;END;/

Objašnjenje koda:

  • Redak koda 10-13 : Stvaranje pod_emp_object kao naslijeđenog tipa s dodatnim jednim atributom 'default_manager' i deklaracijom procedure člana.
  • Redak koda 14 : Izrada tijela za naslijeđeni tip objekta.
  • Linijska šifra 1 6 -21 : Definiranje postupka člana koji umetanjem zapisa vrši u "emp" tablicu s vrijednostima tipa 'SUPER', osim vrijednosti upravitelja. Za vrijednost upravitelja koristi se 'default_manager' iz tipa 'SUB'.

Korak 3) Stvaranje anonimnog bloka za pozivanje tipa SUB

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

Objašnjenje koda:

  • Redak koda 25 : Deklariranje 'guru_emp_det' kao tipa 'sub_emp_object'.
  • Redak koda 27 : Inicijalizacija objekta implicitnim konstruktorom. Konstruktor ima 5 parametara (4 atributa iz PARENT tipa i 2 atributa iz SUB tipa). Posljednji parametar (1002) definira vrijednost za atribut default_manager
  • Linija koda 28 : Pozivanje člana 'insert_default_mgr' radi umetanja zapisa sa zadanim ID-om upravitelja proslijeđenim u konstruktoru.

Jednakost PL / SQL objekata

Primjer objekta koji pripada istim objektima može se usporediti radi jednakosti. Za to trebamo imati posebnu metodu u tipu objekta koja se naziva 'ORDER' metoda.

Ova metoda 'NARUČI' trebala bi biti funkcija koja vraća numerički tip. Za ulaz su potrebna dva parametra (prvi parametar: id instance samoobjekta, drugi parametar: id druge instance objekta).

ID dvije instance instance se uspoređuje, a rezultat se vraća numerički.

  • Pozitivna vrijednost predstavlja da je SELF instanca objekta veća od druge instance.
  • Negativna vrijednost predstavlja da je instanca SAMO objekt manja od druge instance.
  • Nula predstavlja da je instanca SAMO objekt jednaka drugoj instanci.
  • Ako je bilo koja instanca null, tada će ova funkcija vratiti nulu.
CREATE TYPE BODYAS OBJECT(ORDER MEMBER FUNCTION match(
 object_type_name_ 1)RETURN INTEGER IS BEGINIF parameter THENRETURN -1; --any negative number will doELSIF id>c.id THENRETURN 1; -any positive number will doELSERETURN 0;END IF;END;… );/

Objašnjenje sintakse:

  • Gornja sintaksa prikazuje funkciju ORDER koja treba biti uključena u tijelo tipa radi provjere jednakosti.
  • Parametar za ovu funkciju trebao bi biti instanca istog tipa objekta.
  • Gornja se funkcija može nazvati "obj_instance_1.match (obj_instance_2)" i ovaj će izraz vratiti numeričku vrijednost kako je prikazano, gdje su obj_instance_1 i obj_instance_2 instanca object_type_name.

Primjer1 : U sljedećem ćemo primjeru vidjeti kako usporediti dva objekta. Stvorit ćemo dvije instance i usporedit ćemo atribut 'plaća' između njih. Učinit ćemo dva koraka.

  • Korak 1: Stvaranje vrste i tijela objekta.
  • Korak 2: Stvaranje anonimnog bloka za pozivanje usporedite instancu objekta.

Korak 1) Stvaranje vrste i tijela objekta.

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 ASORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGERISBEGIN‭ ‬IF salaryc.salaryTHEN RETURN 1;ELSERETURN 0;END IF:‭ ‬END;END;/

Objašnjenje koda:

  • Redak koda 1-4: Stvaranje tipa objekta 'emp_object_equality' s 1 atributom i 1 članom.
  • Redak koda 6-16 : Definiranje funkcije ORDER koja uspoređuje atribut 'plaće' SAMO instance i tipa instance parametra. Vraća negativno ako je SAMO plaća manja ili pozitivno ako je SAMO plaća veća i 0 ako su plaće jednake.

Izlaz koda:

Tip stvoren

Korak 2) Stvaranje anonimnog bloka za pozivanje usporedite instancu objekta.

DECLAREl_obj_l emp_object_equality;l_obj_2 emp_object_equality;BEGINl_obj_l:=emp_object_equality(15000);l_obj_2:=emp_object_equality(17000);IF l_obj_1.equalS(l_obj_2)>0THENDbms_output.put_line(’Salary of first instance is greater’):ELSIF l_obj_l.equalS(l_obj_2)<0THENDbms_output.put_line(’Salary of second instance is greater’);ELSEDbms_output.put_line(’Salaries are equal’);END IF;END;/

Izlaz

Salary of second instance is greater

Objašnjenje koda:

  • Redak koda 20 : Deklariranje l_obj_1 tipa emp_object_equality.
  • Linija koda 21 : Deklariranje l_obj_2 tipa emp_object_equality.
  • Linija 23 : Inicijalizacija l_obj_1 s vrijednošću plaće kao '15000'
  • Redak koda 24 : Inicijalizacija l_obj_1 s vrijednošću plaće kao '17000'
  • Redak koda 25-33 : Ispišite poruku na temelju broja za povratak iz funkcije ORDER.

Sažetak

U ovom smo poglavlju vidjeli vrstu objekta i njihova svojstva. Također smo razgovarali o konstruktorima, članovima, atributima, nasljeđivanju i jednakosti u PL / SQL objektima.