Mis on objekti tüüp PL / SQL-is?
Objektorienteeritud programmeerimine sobib eriti korduvkasutatavate komponentide ja keerukate rakenduste ehitamiseks. Need on korraldatud pigem "objektide", mitte "toimingute" ümber, st programmid on loodud töötama ja suhtlema kogu objektiga, mitte ühe toiminguga. See kontseptsioon võimaldab programmeerijal objekti objektide tasandil detaile täita ja nendega manipuleerida.
Alloleval pildil on toodud näide objektitüübist, milles pangakontot peetakse objektiüksuseks. Objekti atribuudid sisaldavad asju, millel on mõned atribuudiväärtused, näiteks pangakontol; see on konto number, panga saldo jne. Objekti meetodid kirjeldavad näiteks intressimäära arvutamist, pangaväljavõtte loomist jne, mis nõuab teatud protsessi lõpuleviimist.
PL / SQL-is põhineb objektorienteeritud programmeerimine objektitüüpidel.
Objektitüüp võib tähistada mis tahes reaalse maailma üksust. Selles peatükis käsitleme rohkem objektitüüpe.
Selles õpetuses saate teada,
- Objektitüüpide komponendid
- Looge Oracle'is objekt
- Deklaratsioon objekti tüübi initsialiseerimine
- Konstruktorid
- Pärand objekti tüübis
- PL / SQL-objektide võrdsus
Objektitüüpide komponendid
PL / SQL objektitüüp sisaldab peamiselt kahte komponenti.
- Atribuudid
- Liikmed / meetodid
Atribuudid
Atribuudid on veerg või väli, kuhu andmed on salvestatud. Iga atribuut kaardistatakse andmetüübiga, mis määratleb selle atribuudi töötlemise ja salvestamise tüübi. Atribuut võib olla mis tahes kehtiva PL / SQL-tüüpi andmetüüp või see võib olla muud tüüpi objekt.
Liikmed / meetodid
Liikmed või meetodid on alamprogrammid, mis on määratletud objekti tüübis. Neid ei kasutata andmete salvestamiseks. Neid kasutatakse peamiselt objekti tüübi sees protsessi määratlemiseks. Näidete andmete kinnitamine enne objektitüübi täitmist. Need deklareeritakse objektitüübi jaotises ja määratletakse objektitüübi objektitüübi kehaosas. Objektitüübi kehaosa on valikuline osa. Kui ühtegi liiget pole kohal, ei sisalda objektitüüp kehaosa.
Looge Oracle'is objekt
Objekti tüüpi ei saa alamprogrammi tasemel luua, neid saab luua ainult skeemi tasemel. Kui skeemis on objektitüüp määratletud, saab seda sama kasutada ka alamprogrammides. Objektitüübi saab luua 'CREATE TYPE' abil. Tüübi keha saab luua alles pärast selle objektitüübi loomist.
CREATE TYPEAS OBJECT( ,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION] IS BEGIN END;… );/
Süntaksi selgitus:
- Ülaltoodud süntaks näitab atribuutidega 'OBJECT' ja meetoditega 'OBJECT-BODY' loomist.
- Meetodeid saab ka objekti kehas üle koormata.
Deklaratsioon objekti tüübi initsialiseerimine
Sarnaselt teiste PL / SQLi komponentidega tuleb ka objektitüübid enne nende programmis kasutamist deklareerida.
Kui objektitüüp on loodud, saab seda kasutada alamprogrammi deklaratiivses jaotises selle objektitüübi muutuja deklareerimiseks.
Alati, kui mõni muutuja deklareeritakse alamprogrammis objektitüübina, luuakse käitamise ajal uus objektitüübi eksemplar ja sellele äsja loodud eksemplarile saab viidata muutuja nimele. Sel viisil saab üks objektitüüp salvestada mitu eksemplari mitu väärtust.
DECLARE;BEGIN… END;/
Süntaksi selgitus:
- Ülaltoodud süntaks näitab muutuja deklaratsiooni objektitüübina deklaratiivses jaotises.
Kui muutuja on deklareeritud alamprogrammis objektitüübina, on see aatomlikult null, st kogu objekt ise null. Selle kasutamiseks programmis tuleb lähtestada väärtustega. Neid saab lähtestada konstruktorite abil.
Konstruktorid on objekti kaudne meetod, millele saab viidata sama nimega kui objekti tüübile. Allpool olev süntaks näitab objekti tüübi initsialiseerimist.
DECLARE;BEGIN := ();END;/
Süntaksi selgitus:
- Ülaltoodud süntaks näitab objekti tüübi eksemplari lähtestamist nullväärtusega.
- Nüüd pole objekt ise nullitud, kuna see on initsialiseeritud, kuid objekti sees olevad atribuudid on nullid, kuna me pole neile atribuutidele määranud ühtegi väärtust.
Konstruktorid
Konstruktorid on objekti kaudne meetod, millele saab viidata sama nimega kui objekti tüübile. Alati, kui objektile esimest korda viidatakse, kutsutakse seda konstruktorit kaudselt.
Nende konstruktorite abil saame ka objektid lähtestada. Konstruktori saab määratleda selgesõnaliselt, määrates objekti tüübi kehas liiki objektitüübi sama nimega.
Näide 1 : Järgmises näites kasutame objekti tüübi liiget, et sisestada kirje emp tabelisse väärtustega ('RRR', 1005, 20000, 1000) ja ('PPP', 1006, 20000, 1001). Kui andmed on sisestatud, kuvatakse sama objektitüübi liikme abil. Samuti kavatseme selgesõnalise konstruktori abil täita teise kirje jaoks vaikimisi halduri ID väärtusega 1001.
Me täidame selle järgmiste sammudega.
- Samm 1:
- Loo objekti tüüp
- Objekti tüüpi keha
- 2. samm: anonüümse ploki loomine loodud objekti tüübi kutsumiseks emp_no 1005 implitsiidse konstruktori kaudu.
- 3. samm: anonüümse ploki loomine loodud objekti tüübi kutsumiseks emp_no 1006 selgesõnalise konstruktori kaudu.
1. samm. Looge objekti tüüp ja objekti tüüp
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:/
Koodi selgitus
- Koodirida 1–9 : 4 atribuudi ja 3 liikmega objektitüübi „emp_object” loomine. See sisaldab ainult 3 parameetriga konstruktorite määratlust. (Tegelik kaudne konstruktor sisaldab parameetrite arvu, mis võrdub objektitüübis olevate atribuutide arvuga)
- Koodirida 10 : tüübi keha loomine.
- Koodirida 11–21 : selgesõnalise konstruktori määratlemine. Parameetri väärtuse määramine atribuutidele ja atribuudi „manager” väärtuse määramine vaikeväärtusega „1001”.
- Koodirida 22–26 : liikme „insert_records” määratlemine, kuhu atribuutide väärtused lisatakse tabelisse „emp”.
- Koodirida 27-34 : liikme 'display_records' määratlemine, kus kuvatakse objektitüübi atribuutide väärtused.
Väljund
Tüüp loodud
Tüübi keha loodud
Samm 2) Anonüümse ploki loomine loodud objekti tüübi kutsumiseks emp_no 1005 implitsiitse konstruktori kaudu
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;
Koodi selgitus
- Koodirida 37-45 : kirjete sisestamine kaudse konstruktori abil. Konstruktori kutse sisaldab atribuutide väärtuste tegelikku arvu.
- Koodirida 38 : kuulutab guru_emp_det objekti tüübiks 'emp_object'.
- Koodirida 41 : avaldus 'guru_emp_det.display_records', mida nimetatakse funktsiooni 'diplay_records' ja kuvatakse atribuutide väärtused
- Koodirida 42 : avaldus 'guru_emp_det.insert_records', mida nimetatakse liikmefunktsiooniks 'insert_records' ja atribuutide väärtused lisatakse tabelisse.
Väljund
Töötaja nimi: RRR
Töötaja number: 1005
Palk: 20000
Juht: 1000
Samm 3) Anonüümse ploki loomine loodud objekti tüübi kutsumiseks emp_no 1006 selgesõnalise konstruktori kaudu
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;/
Väljund
Employee Name:PPPEmployee Number:1006Salary:20000Manager:1001
Koodi selgitus:
- Koodirida 46-53 : kirjete sisestamine selgesõnalise konstruktori abil.
- Koodirida 46 : kuulutab guru_emp_det objekti tüübiks 'emp_object'.
- Koodirida 50 : avaldus 'guru_emp_det.display_records', mida nimetatakse funktsiooni 'display_records', ja kuvatakse atribuutide väärtused
- Koodirida 51 : Avaldis 'guru_emp_det.insert_records', mida nimetatakse funktsiooni 'insert_records' ja atribuutide väärtused lisatakse tabelisse.
Pärand objekti tüübis
Pärandvara võimaldab alamobjektitüübil juurde pääseda superobjekti või emaobjekti tüübi kõigile atribuutidele ja liikmetele.
Alamobjekti tüüpi nimetatakse päritud objekti tüübiks ja superobjekti tüüpi emaobjekti tüübiks. Allpool olev süntaks näitab, kuidas luua vanema ja päritud objekti tüüp.
CREATE TYPEAS OBJECT( ,… )NOT FINAL;/
Süntaksi selgitus:
- Ülaltoodud süntaks näitab SUPER-tüüpi loomist.
CREATE TYPEUNDER ( ,.);/
Süntaksi selgitus:
- Ülaltoodud süntaks näitab SUB-tüüpi loomist. See sisaldab kõiki liikmeid ja atribuute vanema objekti tüübist.
Näide1: Allpool toodud näites kasutame pärandvara, et sisestada järgmise kirje ('RRR', 1007, 20000) halduri ID-ga kirje kirjega '1002'.
Rakendame ülaltoodud programmi järgmiste sammudega
- 1. samm: looge SUPER-tüüp.
- 2. samm: looge SUB-i tüüp ja keha.
- 3. samm: anonüümse ploki loomine SUB-tüüpi helistamiseks.
Samm 1) Looge SUPER- või Parent-tüüp.
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;/
Koodi selgitus:
- Koodirida 1–9 : 4 atribuudi ja 3 liikmega objektitüübi „emp_object” loomine. See sisaldab ainult 3 parameetriga konstruktorite määratlust. See on deklareeritud kui „EI LÕPLIK”, seega on see vanematüüp.
Samm 2) Looge SUPERi tüübi alla SUB-tüüp.
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;/
Koodi selgitus:
- Koodirida 10-13 : Sub_emp_objecti loomine päritud tüübina koos täiendava ühe atribuudiga 'default_manager' ja liikme protseduuri deklaratsiooniga.
- Koodirida 14 : pärandi objektitüübi keha loomine.
- Koodirida 1 6 -21 : liikme protseduuri määratlemine, mis sisestab kirjed tabelisse "emp" objektitüübi "SUPER" väärtustega, välja arvatud halduri väärtus. Halduri väärtuse jaoks kasutab see tüüpi „default_manager” tüübist „SUB”.
Samm 3) SUB-tüüpi helistamiseks anonüümse ploki loomine
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;/
Koodi selgitus:
- Koodirida 25 : deklareeritakse „guru_emp_det” tüübiks „sub_emp_object”.
- Koodirida 27 : objekti initsialiseerimine kaudse konstruktoriga. Konstruktoril on 5 parameetrit (4 atribuuti tüübist PARENT ja 2 atribuuti tüübist SUB). Viimane parameeter (1002) määratleb atribuudi default_manager väärtuse
- Koodirida 28 : helistamine liikmele 'insert_default_mgr', et sisestada konstruktoris edastatud vaikehalduri IDga kirjed.
PL / SQL-objektide võrdsus
Samade objektide objektiobjekti võib võrrelda võrdsuse osas. Selleks peab meil olema objektitüübis spetsiaalne meetod nimega ORDER.
See meetod ORDER peaks olema funktsioon, mis tagastab arvulise tüübi. See võtab sisendina kaks parameetrit (esimene parameeter: iseobjekti eksemplari id, teine parameeter: teise objekti eksemplari id).
Võrreldakse kahe objekti eksemplari ID-d ja tulemus tagastatakse numbriliselt.
- Positiivne väärtus tähistab seda, et objekti SELF eksemplar on suurem kui teine eksemplar.
- Negatiivne väärtus tähistab seda, et objekti SELF eksemplar on väiksem kui teine eksemplar.
- Null tähistab, et objekti objekt SELF on võrdne teise eksemplariga.
- Kui mõni eksemplar on null, tagastatakse see funktsioon null.
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;… );/
Süntaksi selgitus:
- Ülaltoodud süntaks näitab funktsiooni ORDER, mis tuleb võrdsuse kontrollimiseks lisada tüübi kehasse.
- Selle funktsiooni parameeter peaks olema sama tüüpi objekt.
- Ülaltoodud funktsiooni võib nimetada "obj_instance_1.match (obj_instance_2)" ja see avaldis tagastab arvulise väärtuse, nagu näidatud, kus obj_instance_1 ja obj_instance_2 on objekti_tüübi_nimi eksemplar.
Näide1 : Järgmises näites näeme, kuidas võrrelda kahte objekti. Loome kaks eksemplari ja võrdleme nende vahel atribuuti "palk". Teeme kaks sammu.
- 1. samm: objekti tüübi ja keha loomine.
- 2. samm: anonüümse ploki loomine helistamiseks objekti eksemplari.
Samm 1) Objekti tüübi ja keha loomine.
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;/
Koodi selgitus:
- Koodirida 1–4: „Atribuutide ja 1 liikmega objektitüübi„ emp_object_equality ”loomine.
- Koodirida 6-16 : Funktsiooni ORDER määratlemine, mis võrdleb ISE eksemplari ja parameetri eksemplari tüübi atribuuti 'palk'. See annab negatiivse tulemuse, kui SELF-palk on väiksem või positiivne, kui SELF-palk on suurem, ja 0, kui palgad on võrdsed.
Koodi väljund:
Tüüp loodud
2. samm . Anonüümse ploki loomine helistamiseks objekti eksemplari.
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;/
Väljund
Salary of second instance is greater
Koodi selgitus:
- Koodirida 20 : deklareeritakse tüübi emp_object_equality l_obj_1.
- Koodirida 21 : deklareeritakse tüübi emp_object_equality l_obj_2.
- Koodirida 23 : l_obj_1 initsialiseerimine palgaväärtusega „15000”
- Koodirida 24 : l_obj_1 initsialiseerimine palgaväärtusega „17000”
- Koodirida 25-33 : printige sõnum funktsiooni ORDER tagastusnumbri põhjal.
Kokkuvõte
Selles peatükis oleme näinud objekti tüüpi ja nende omadusi. Oleme arutanud ka PL / SQL-objektide konstruktorite, liikmete, atribuutide, pärilikkuse ja võrdsuse teemadel.