Kaj je vrsta predmeta v PL / SQL?
Objektno usmerjeno programiranje je še posebej primerno za izdelavo komponent za večkratno uporabo in zapletenih aplikacij. Organizirani so okrog "predmetov" in ne "akcij", tj. Programi so zasnovani tako, da delajo in delujejo s celotnim predmetom in ne z enim samim dejanjem. Ta koncept omogoča programerju, da zapolni in manipulira s podrobnostmi na ravni objektnih entitet.
Spodnja slika prikazuje primer vrste predmeta, pri katerem se bančni račun šteje za predmetno entiteto. Atributi predmeta vključujejo stvari, ki vsebujejo nekatere vrednosti atributov, na primer na bančnem računu; to je številka računa, stanje na banki itd., medtem ko objektne metode opisujejo stvari, kot so izračun obrestne mere, ustvarjanje bančnega izpiska itd., ki zahteva dokončanje določenega postopka.
V PL / SQL objektno usmerjeno programiranje temelji na vrstah predmetov.
Tip predmeta lahko predstavlja katero koli resnično entiteto. V tem poglavju bomo razpravljali o več vrstah predmetov.
V tej vadnici boste izvedeli,
- Komponente vrst predmetov
- Ustvari objekt v Oracle
- Deklaracija Inicializacija vrste predmeta
- Konstruktorji
- Dedovanje v vrsti predmeta
- Enakost PL / SQL objektov
Komponente vrst predmetov
Vrsta objekta PL / SQL vsebuje predvsem dve komponenti.
- Lastnosti
- Člani / metode
Lastnosti
Atributi so stolpec ali polje, v katerem so shranjeni podatki. Vsak atribut bo preslikan v podatkovni tip, ki določa vrsto obdelave in shranjevanja za ta atribut. Atribut je lahko katerega koli veljavnega tipa podatkov PL / SQL ali pa je drugega tipa objekta.
Člani / metode
Člani ali metode so podprogrami, ki so definirani v vrsti predmeta. Ne uporabljajo se za shranjevanje podatkov. Uporabljajo se predvsem za definiranje procesa znotraj vrste predmeta. Za primere preverjanja veljavnosti podatkov pred zapolnitvijo vrste predmeta. Deklarirani so v razdelku vrste predmeta in definirani v odseku telesa tipa objekta. Razdelek telesa v vrsti predmeta je neobvezen del. Če ni nobenega člana, vrsta predmeta ne vsebuje nobenega dela telesa.
Ustvari objekt v Oracle
Tip predmeta ni mogoče ustvariti na ravni podprograma, ustvariti jih je mogoče le na ravni sheme. Ko je vrsta predmeta definirana v shemi, lahko isto uporabimo v podprogramih. Tip predmeta lahko ustvarite s pomočjo 'CREATE TYPE'. Telo tipa je mogoče ustvariti šele po izdelavi njegovega predmeta.
CREATE TYPEAS OBJECT( ,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION] IS BEGIN END;… );/
Pojasnilo sintakse:
- Zgornja sintaksa prikazuje ustvarjanje 'OBJECT' z atributi in 'OBJECT-BODY' z metodami.
- Metode so lahko tudi preobremenjene v telesu predmeta.
Deklaracija Inicializacija vrste predmeta
Tako kot druge komponente v PL / SQL je tudi tipe predmetov treba navesti, preden jih uporabite v programu.
Ko je vrsta predmeta ustvarjena, jo lahko uporabimo v deklarativnem odseku podprograma za razglasitev spremenljivke tega tipa predmeta.
Kadar koli je katera koli spremenljivka v podprogramu deklarirana kot tip objekta, bo v času izvajanja ustvarjen nov primerek vrste predmeta in ta novo ustvarjeni primerek se lahko sklicuje na ime spremenljivke. Na ta način lahko en tip predmeta shrani več vrednosti pod različnimi primerki.
DECLARE;BEGIN… END;/
Pojasnilo sintakse:
- Zgornja sintaksa prikazuje deklaracijo spremenljivke kot vrsto predmeta v deklarativnem odseku.
Ko je spremenljivka v podprogramu razglašena za vrsto predmeta, bo atomsko nična, tj. Celoten objekt sam bo nič. Za uporabo v programu ga je treba inicializirati z vrednostmi. Inicializirati jih je mogoče s pomočjo konstruktorjev.
Konstruktorji so implicitna metoda predmeta, na katero se lahko sklicuje z istim imenom kot na vrsto predmeta. Spodnja sintaksa prikazuje inicializacijo vrste predmeta.
DECLARE;BEGIN := ();END;/
Pojasnilo sintakse:
- Zgornja sintaksa prikazuje inicializacijo primerka tipa predmeta z nično vrednostjo.
- Zdaj objekt sam ni nič, saj je bil inicializiran, vendar bodo atributi znotraj predmeta nični, saj tem atributom nismo dodelili nobenih vrednosti.
Konstruktorji
Konstruktorji so implicitna metoda predmeta, na katero se lahko sklicuje z istim imenom kot na vrsto predmeta. Kadarkoli je objekt prvič napoten, bo ta konstruktor implicitno poklican.
Objekte lahko tudi inicializiramo s pomočjo tega konstruktorja. Konstruktor je mogoče eksplicitno definirati z definiranjem člana v telesu tipa objekta z enakim imenom tipa predmeta.
Primer 1 : V naslednjem primeru bomo uporabili člana tipa objekta za vstavljanje zapisa v tabelo emp z vrednostmi ('RRR', 1005, 20000, 1000) in ('PPP', 1006, 20000, 1001). Ko so podatki vstavljeni, jih bomo prikazali s pomočjo člana tipa objekta. Z eksplicitnim konstruktorjem bomo privzeto izpolnili ID upravitelja za vrednost 1001 za drugi zapis.
Izvedli ga bomo v spodnjih korakih.
- Korak 1:
- Ustvari vrsto predmeta
- Telo tipa predmeta
- 2. korak: Ustvarjanje anonimnega bloka za klic ustvarjene vrste predmeta prek implicitnega konstruktorja za emp_no 1005.
- Korak 3: Ustvarjanje anonimnega bloka za klic ustvarjene vrste predmeta prek eksplicitnega konstruktorja za emp_no 1006.
Korak 1) Ustvari vrsto predmeta in telo tipa predmeta
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:/
Razlaga kode
- Vrstica kode 1-9 : Ustvarjanje vrste predmeta 'emp_object' s 4 atributi in 3 člani. Vsebuje definicijo konstruktorjev s samo 3 parametri. (Dejanski implicitni konstruktor bo vseboval število parametrov, ki je enako številu atributov, ki so prisotni v vrsti predmeta)
- Vrstica kode 10 : Ustvarjanje telesa tipa.
- Vrstica kode 11-21 : Določitev eksplicitnega konstruktorja. Dodelitev vrednosti parametra atributom in dodelitev vrednosti za atribut 'manager' s privzeto vrednostjo '1001'.
- Vrstica kode 22-26 : Določitev člana 'insert_records', v katerem so vrednosti atributov vstavljene v tabelo 'emp'.
- Koda 27-34 : Določitev člana 'display_records', v katerem so prikazane vrednosti atributov vrste predmeta.
Izhod
Tip ustvarjen
Ustvarjeno telo tipa
Korak 2) Ustvarjanje anonimnega bloka za klic ustvarjene vrste predmeta prek implicitnega konstruktorja 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;
Razlaga kode
- Vrstica kode 37-45 : vstavljanje zapisov z implicitnim konstruktorjem. Klic konstruktorja vsebuje dejansko število vrednosti atributov.
- Vrstica kode 38 : razglasi guru_emp_det kot vrsto predmeta 'emp_object'.
- Vrstica kode 41 : Izjava 'guru_emp_det.display_records', imenovana funkcija člana 'diplay_records', in vrednosti atributov so prikazane
- Vrstica kode 42 : Stavek "guru_emp_det.insert_records", imenovan funkcija člana "insert_records", vrednosti atributov pa se vstavijo v tabelo.
Izhod
Ime zaposlenega: RRR
Številka zaposlenega: 1005
Plača: 20000
Upravitelj: 1000
Korak 3) Ustvarjanje anonimnega bloka za klic ustvarjene vrste predmeta prek eksplicitnega konstruktorja 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;/
Izhod
Employee Name:PPPEmployee Number:1006Salary:20000Manager:1001
Razlaga kode:
- Vrstica kode 46-53 : Vstavljanje zapisov z uporabo eksplicitnega konstruktorja.
- Vrstica kode 46 : razglasi guru_emp_det kot vrsto predmeta 'emp_object'.
- Vrstica kode 50 : Izjava 'guru_emp_det.display_records', imenovana funkcija člana 'display_records', in vrednosti atributov so prikazane
- Vrstica kode 51 : Izjava "guru_emp_det.insert_records", imenovana funkcija člana "insert_records", vrednosti atributov pa se vstavijo v tabelo.
Dedovanje v vrsti predmeta
Lastnost dedovanja omogoča podtipu, da dostopa do vseh atributov in članov vrste super objekta ali nadrejenega objekta.
Tip podobjekta se imenuje podedovani tip objekta, tip super objekta pa nadrejeni objekt. Spodnja sintaksa prikazuje, kako ustvariti nadrejeni in podedovani tip predmeta.
CREATE TYPEAS OBJECT( ,… )NOT FINAL;/
Pojasnilo sintakse:
- Zgornja sintaksa prikazuje ustvarjanje tipa SUPER.
CREATE TYPEUNDER ( ,.);/
Pojasnilo sintakse:
- Zgornja sintaksa prikazuje ustvarjanje tipa SUB. Vsebuje vse člane in atribute iz nadrejenega tipa objekta.
Primer 1: V spodnjem primeru bomo z lastnostjo dedovanja vstavili zapis z ID-jem upravitelja kot '1002' za naslednji zapis ('RRR', 1007, 20000).
Zgornji program bomo izvedli v naslednjih korakih
- 1. korak: Ustvari tip SUPER.
- 2. korak: Ustvarite tip in telo SUB.
- Korak 3: Ustvarjanje anonimnega bloka za klic tipa SUB.
Korak 1) Ustvari tip SUPER ali tip starša.
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;/
Razlaga kode:
- Vrstica kode 1-9 : Ustvarjanje vrste predmeta 'emp_object' s 4 atributi in 3 člani. Vsebuje definicijo konstruktorjev s samo 3 parametri. Razglašen je kot "NI KONČAN", zato je nadrejeni.
Korak 2) Ustvari tip SUB pod SUPER type.
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;/
Razlaga kode:
- Vrstica kode 10-13 : Ustvarjanje predmeta sub_emp_object kot podedovanega tipa z dodatnim enim atributom 'default_manager' in izjavo o postopku člana.
- Vrstica kode 14 : Ustvarjanje telesa za podedovani tip objekta.
- Vrstica kode 1 6 -21 : Določitev postopka člana, ki vstavlja zapise v tabelo "emp" z vrednostmi iz tipa predmeta 'SUPER', razen za vrednost upravitelja. Za vrednost upravitelja uporablja 'default_manager' iz tipa 'SUB'.
Korak 3) Ustvarjanje anonimnega bloka za klic 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;/
Razlaga kode:
- Vrstica kode 25 : Razglasitev 'guru_emp_det' kot vrste 'sub_emp_object'.
- Kodijska vrstica 27 : Inicializacija predmeta z implicitnim konstruktorjem. Konstruktor ima 5 parametrov (4 atributa iz vrste PARENT in 2 atributa iz vrste SUB). Zadnji parameter (1002) definira vrednost za atribut default_manager
- Vrstica kode 28 : Klic člana 'insert_default_mgr', da vstavi zapise s privzetim ID-jem upravitelja, posredovanim v konstruktorju.
Enakost PL / SQL objektov
Primer predmeta, ki pripada istim predmetom, lahko primerjamo za enakost. Za to moramo imeti posebno metodo v vrsti predmeta, imenovano 'ORDER' metoda.
Ta metoda 'ORDER' bi morala biti funkcija, ki vrne številski tip. Kot vhod vzame dva parametra (prvi parameter: id primerka samoobjekta, drugi parameter: id drugega primerka objekta).
Primerja se ID primerka dveh objektov in rezultat se vrne v številčnem številu.
- Pozitivna vrednost pomeni, da je primerek predmeta SAMO večji od drugega primerka.
- Negativna vrednost pomeni, da je primerek SAMO objekt manjši od drugega primerka.
- Nič predstavlja, da je primerek predmeta SAMO enak drugemu primerku.
- Če je kateri koli primerek ničen, bo ta funkcija vrnila nič.
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;… );/
Pojasnilo sintakse:
- Zgornja sintaksa prikazuje funkcijo ORDER, ki jo je treba vključiti v telo tipa za preverjanje enakosti.
- Parameter za to funkcijo mora biti primerek istega tipa objekta.
- Zgornjo funkcijo lahko pokličete kot "obj_instance_1.match (obj_instance_2)" in ta izraz bo vrnil številsko vrednost, kot je prikazano, kjer sta obj_instance_1 in obj_instance_2 primerek object_type_name.
Primer1 : V naslednjem primeru bomo videli, kako primerjati dva predmeta. Ustvarili bomo dva primerka in primerjali atribut "plača" med njimi. Naredili bomo dva koraka.
- 1. korak: Ustvarjanje vrste in telesa predmeta.
- 2. korak: Ustvarjanje anonimnega bloka za klic primerjajte primerek predmeta.
Korak 1) Ustvarjanje vrste in telesa predmeta.
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;/
Razlaga kode:
- Vrstica kode 1-4: Ustvarjanje vrste predmeta 'emp_object_equality' z 1 atributom in 1 članom.
- Vrstica kode 6-16 : Določitev funkcije ORDER, ki primerja atribut 'plača' primerka SAMO in tipa primerka parametra. Vrne negativno, če je SAMO plača manjša, ali pozitivno, če je SAMO plača večja, in 0, če so plače enake.
Izhod kode:
Tip ustvarjen
Korak 2) Ustvarjanje anonimnega bloka za klic primerjajte primerek predmeta.
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;/
Izhod
Salary of second instance is greater
Razlaga kode:
- Vrstica kode 20 : prijava l_obj_1 vrste emp_object_equality.
- Vrstica kode 21 : razglasitev l_obj_2 vrste emp_object_equality.
- Koda vrstica 23 : Inicializacija l_obj_1 z vrednostjo plače kot '15000'
- Vrstica kode 24 : Inicializacija l_obj_1 z vrednostjo plače kot '17000'
- Vrstica kode 25-33 : natisnite sporočilo na podlagi povratne številke iz funkcije ORDER.
Povzetek
V tem poglavju smo videli vrsto predmeta in njihove lastnosti. Govorili smo tudi o konstruktorjih, članih, atributih, dedovanju in enakosti v PL / SQL objektih.