Kas ir objekta tips PL / SQL?
Uz objektu orientēta programmēšana ir īpaši piemērota atkārtoti lietojamu komponentu un sarežģītu lietojumu veidošanai. Tie ir sakārtoti ap "objektiem", nevis "darbībām", ti, programmas ir paredzētas darbam un mijiedarbībai ar visu objektu, nevis ar vienu darbību. Šī koncepcija ļauj programmētājam aizpildīt un manipulēt ar detaļām objektu entītiju līmenī.
Zemāk attēlā parādīts objekta veida piemērs, kurā bankas konts tiek uzskatīts par objekta entītiju. Objekta atribūtos ietilpst lietas, kurām ir dažas atribūtu vērtības, piemēram, bankas kontā; tas ir konta numurs, bankas atlikums utt., savukārt objekta metodes apraksta tādas lietas kā procentu likmes aprēķināšana, bankas izraksta ģenerēšana utt., kurām ir nepieciešams pabeigt noteiktu procesu.
PL / SQL objektorientētā programmēšana ir balstīta uz objektu tipiem.
Objekta tips var attēlot jebkuru reālās pasaules vienību. Šajā nodaļā mēs apspriedīsim vairāk objektu tipu.
Šajā apmācībā jūs uzzināsiet,
- Objekta tipu sastāvdaļas
- Izveidojiet objektu Oracle
- Deklarācija Objekta tipa inicializēšana
- Konstruktori
- Mantojums objekta tipā
- PL / SQL objektu vienādība
Objekta tipu sastāvdaļas
PL / SQL objektu tips satur galvenokārt divas sastāvdaļas.
- Atribūti
- Locekļi / metodes
Atribūti
Atribūti ir kolonna vai lauks, kurā dati tiek glabāti. Katrs atribūts tiks kartēts ar datu tipu, kas nosaka šī atribūta apstrādes un glabāšanas veidu. Atribūts var būt jebkura derīga PL / SQL datu tipa vai cita veida objekta.
Locekļi / metodes
Locekļi vai Metodes ir apakšprogrammas, kas definētas objekta tipā. Tie netiek izmantoti nekādu datu glabāšanai. Tos galvenokārt izmanto, lai definētu procesu objekta tipā. Piemēri datu pārbaudei pirms objekta tipa aizpildīšanas. Tie ir deklarēti objekta tipa sadaļā un definēti objekta tipa ķermeņa sadaļā. Objekta tipa ķermeņa sadaļa ir izvēles daļa. Ja neviena dalībnieka nav, objekta tipā nebūs ķermeņa daļas.
Izveidojiet objektu Oracle
Objekta tipu nevar izveidot apakšprogrammas līmenī, tos var izveidot tikai shēmas līmenī. Kad shēmā ir definēts objekta tips, to pašu var izmantot arī apakšprogrammās. Objekta tipu var izveidot, izmantojot 'CREATE TYPE'. Tipa tipu var izveidot tikai pēc tā objekta veida izveidošanas.
CREATE TYPEAS OBJECT( ,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION] IS BEGIN END;… );/
Sintakses skaidrojums:
- Iepriekš minētā sintakse parāda “OBJECT” ar atribūtiem un “OBJECT-BODY” izveidi ar metodēm.
- Metodes var arī pārslogot objekta ķermenī.
Deklarācija Objekta tipa inicializēšana
Tāpat kā citi PL / SQL komponenti, arī objektu tipi ir jādeklarē pirms to izmantošanas programmā.
Kad objekta tips ir izveidots, to var izmantot apakšprogrammas deklaratīvajā sadaļā, lai deklarētu šī objekta tipa mainīgo.
Ikreiz, kad kāds mainīgais apakšprogrammā tiek deklarēts kā objekta tips, izpildes laikā tiks izveidots jauns objekta tipa gadījums, un šo jaunizveidoto gadījumu var attiecināt uz mainīgā nosaukumu. Tādā veidā viens objekta tips var saglabāt vairākas vērtības dažādās instancēs.
DECLARE;BEGIN… END;/
Sintakses skaidrojums:
- Iepriekš minētā sintakse parāda mainīgā kā objekta tipa deklarāciju deklaratīvajā sadaļā.
Kad mainīgais tiks deklarēts kā objekta tips apakšprogrammā, tas būs atomu ziņā nulle, ti, viss pats objekts būs nulle. Tas ir jāinicializē ar vērtībām, lai tās izmantotu programmā. Tos var inicializēt, izmantojot konstruktorus.
Konstruktori ir netieša objekta metode, uz kuru var atsaukties ar tādu pašu nosaukumu kā objekta tipam. Zemāk esošajā sintaksē parādīta objekta veida inicializēšana.
DECLARE;BEGIN := ();END;/
Sintakses skaidrojums:
- Iepriekš minētā sintakse parāda objekta tipa instances inicializāciju ar nulles vērtību.
- Tagad pats objekts nav nulle, jo tas ir inicializēts, bet atribūti objekta iekšpusē būs nulle, jo mēs šiem atribūtiem neesam piešķīruši nevienu vērtību.
Konstruktori
Konstruktori ir netieša objekta metode, uz kuru var atsaukties ar tādu pašu nosaukumu kā objekta tipam. Ikreiz, kad objekts tiek pārsūtīts pirmo reizi, šis konstruktors tiks netieši izsaukts.
Mēs varam arī inicializēt objektus, izmantojot šo konstruktoru. Konstruktoru var precīzi definēt, objekta tipa ķermenī definējot dalībnieku ar tādu pašu objekta tipa nosaukumu.
1. piemērs : Šajā piemērā mēs izmantosim objekta tipa locekli, lai ierakstu ievietotu emp tabulā ar vērtībām ('RRR', 1005, 20000, 1000) un ('PPP', 1006, 20000, 1001). Kad dati ir ievietoti, mēs parādīsim to pašu, izmantojot objekta tipa locekli. Mēs arī izmantosim nepārprotamu konstruktoru, lai pārvaldnieka ID pēc noklusējuma aizpildītu ar 1001 vērtību otrajam ierakstam.
Mēs to izpildīsim, veicot tālāk norādītās darbības.
- 1. solis:
- Izveidot objekta veidu
- Objekta tipa korpuss
- 2. solis: izveidojot anonīmu bloku, lai izsauktu izveidoto objekta tipu, izmantojot implic konstruktoru emp_no 1005.
- 3. solis: izveidojot anonīmu bloku, lai izsauktu izveidoto objektu tipu, izmantojot nepārprotamu konstruktoru emp_no 1006.
1. solis) Izveidojiet objekta veidu un objekta tipa ķermeni
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:/
Kods Paskaidrojums
- Kodu rinda 1-9 : Objekta tipa 'emp_object' izveidošana ar 4 atribūtiem un 3 dalībniekiem. Tas satur konstruktoru definīciju tikai ar 3 parametriem. (Faktiskajā netiešajā konstruktorā būs parametru skaits, kas vienāds ar objekta tipā esošo atribūtu skaitu)
- 10. koda rindiņa : Tipa teksta izveide.
- Kodu rinda 11-21 : skaidra konstruktora definēšana. Parametra vērtības piešķiršana atribūtiem un atribūta “manager” vērtības piešķiršana ar noklusējuma vērtību “1001”.
- Kodu rinda 22-26 : definē dalībnieku 'insert_records', kurā atribūtu vērtības tiek ievietotas tabulā 'emp'.
- Kodu rinda 27-34 : definē dalībnieku 'display_records', kurā parāda objekta tipa atribūtu vērtības.
Rezultāts
Veids izveidots
Izveidots teksta tips
2. solis. Anonīma bloka izveide, lai izsauktu izveidoto objekta tipu, izmantojot implic konstruktoru 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;
Kods Paskaidrojums
- Kodu rinda 37-45 : ierakstu ievietošana, izmantojot netiešo konstruktoru. Zvans uz konstruktoru satur faktisko atribūtu vērtību skaitu.
- 38. koda rindiņa : paziņo, ka guru_emp_det ir objekta tips “emp_object”.
- 41. koda rindiņa : paziņojums “guru_emp_det.display_records”, ko sauc par “diplay_records” dalībnieka funkciju, un tiek parādītas atribūtu vērtības
- 42. koda rinda : paziņojums 'guru_emp_det.insert_records', ko sauc par locekļa funkciju 'insert_records', un atribūtu vērtības tiek ievietotas tabulā.
Rezultāts
Darbinieka vārds: RRR
Darbinieka numurs: 1005
Alga: 20000
Vadītājs: 1000
3. solis. Anonīma bloka izveide, lai izsauktu izveidoto objekta veidu, izmantojot nepārprotamu konstruktoru 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;/
Rezultāts
Employee Name:PPPEmployee Number:1006Salary:20000Manager:1001
Koda skaidrojums:
- Kodu rinda 46-53 : ierakstu ievietošana, izmantojot skaidru konstruktoru.
- 46. koda rindiņa : guru_emp_det tiek pasludināts par objekta tipu 'emp_object'.
- 50. koda rindiņa : paziņojums 'guru_emp_det.display_records', ko sauc par dalībnieka funkciju 'display_records', un tiek parādītas atribūtu vērtības
- 51. koda rinda : Izraksts 'guru_emp_det.insert_records', ko sauc par locekļa funkciju 'insert_records', un atribūtu vērtības tiek ievietotas tabulā.
Mantojums objekta tipā
Īpašums Mantošana ļauj apakšobjektu tipam piekļūt visiem superobjektu vai vecāku objektu tipa atribūtiem un dalībniekiem.
Apakšobjektu tipu sauc par iedzimtu objekta tipu, bet superobjektu tipu - par vecāku objekta tipu. Zemāk esošajā sintaksē parādīts, kā izveidot vecāku un mantoto objektu tipu.
CREATE TYPEAS OBJECT( ,… )NOT FINAL;/
Sintakses skaidrojums:
- Iepriekš minētā sintakse parāda SUPER veida izveidi.
CREATE TYPEUNDER ( ,.);/
Sintakses skaidrojums:
- Iepriekš minētā sintakse parāda SUB tipa izveidi. Tas satur visus vecāku objekta tipa dalībniekus un atribūtus.
1. piemērs . Zemāk esošajā piemērā mēs izmantosim mantojuma rekvizītu, lai ierakstam ar vadītāja ID būtu “1002” ievietot šādu ierakstu (“RRR”, 1007, 20000).
Mēs izpildīsim iepriekš minēto programmu šādās darbībās
- 1. darbība: izveidojiet SUPER tipu.
- 2. solis: izveidojiet SUB tipu un pamattekstu.
- 3. darbība: izveidojiet anonīmu bloku, lai izsauktu SUB tipu.
1. darbība. Izveidojiet SUPER tipu vai vecāku tipu.
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;/
Koda skaidrojums:
- Kodu rinda 1-9 : Objekta tipa 'emp_object' izveidošana ar 4 atribūtiem un 3 dalībniekiem. Tas satur konstruktoru definīciju tikai ar 3 parametriem. Tas ir pasludināts par “NOT FINAL”, tāpēc tas ir vecāku tips.
2. solis. Izveidojiet SUB tipu sadaļā 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;/
Koda skaidrojums:
- Kodu rinda 10-13 : Sub_emp_object izveidošana kā iedzimta tipa ar papildu vienu atribūtu "default_manager" un dalībnieka procedūras deklarāciju.
- 14. koda rindiņa : Mantotā objekta tipa pamatteksta izveide.
- Kods līnija 1 6 -21 : definēšana biedra procedūru, kas ievietojot ierakstus "EMP" galda ar vērtībām no "Super" objekta tipam, izņemot vadītāja vērtību. Pārvaldnieka vērtībai tas izmanto “default_manager” no “SUB” veida.
3. solis. Anonīma bloka izveide, lai izsauktu SUB tipu
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;/
Koda skaidrojums:
- 25. koda rindiņa : “guru_emp_det” deklarēšana par “sub_emp_object” tipu.
- 27. koda rindiņa : Objekta inicializēšana ar netiešo konstruktoru. Konstruktoram ir 5 parametri (4 atribūti no PARENT tipa un 2 atribūti no SUB tipa). Pēdējais parametrs (1002) nosaka atribūta default_manager vērtību
- 28. koda rindiņa : Zvanīšana dalībniekam “insert_default_mgr”, lai ievietotu ierakstus ar noklusējuma pārvaldnieka ID, kas nodots konstruktorā.
PL / SQL objektu vienādība
Objektu instanci, kas pieder vieniem un tiem pašiem objektiem, var salīdzināt ar vienlīdzību. Lai to izdarītu, mums objekta tipā ir jābūt īpašai metodei, ko sauc par “ORDER” metodi.
Šai metodei ORDER jābūt funkcijai, kas atgriež skaitlisko tipu. Kā ievade ir nepieciešami divi parametri (pirmais parametrs: pašobjekta instances id, otrais parametrs: cita objekta instances ID).
Abu objektu instances ID tiek salīdzināts, un rezultāts tiek atgriezts skaitliski.
- Pozitīva vērtība norāda, ka SELF objekta eksemplārs ir lielāks par citu gadījumu.
- Negatīvā vērtība norāda, ka SELF objekta eksemplārs ir mazāks par citu gadījumu.
- Nulle nozīmē, ka SELF objekta gadījums ir vienāds ar citu gadījumu.
- Ja kāds no gadījumiem ir nulle, šī funkcija atgriezīsies nulle.
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;… );/
Sintakses skaidrojums:
- Iepriekš minētā sintakse parāda funkciju ORDER, kas vienlīdzības pārbaudei jāiekļauj tipa pamattekstā.
- Šīs funkcijas parametram jābūt viena un tā paša objekta tipa gadījumam.
- Iepriekš minēto funkciju var saukt par "obj_instance_1.match (obj_instance_2)", un šī izteiksme atgriezīs skaitlisko vērtību, kā parādīts, kur obj_instance_1 un obj_instance_2 ir objekta_tipa_nosaukums.
1. piemērs : Šajā piemērā mēs redzēsim, kā salīdzināt divus objektus. Mēs izveidosim divus gadījumus un salīdzināsim atribūtu “alga” starp tiem. Mēs veiksim divus soļus.
- 1. solis: Objekta veida un ķermeņa izveide.
- 2. darbība: izveidojiet anonīmu bloku, lai izsauktu objekta instanci.
1. solis) Objekta veida un ķermeņa izveide.
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;/
Koda skaidrojums:
- Kodu rinda 1-4: Objekta tipa “emp_object_equality” izveidošana ar 1 atribūtiem un 1 dalībnieku.
- Kodu rinda 6-16 : Funkcijas ORDER definēšana, kas salīdzina SELF instances un parametru instances tipa atribūtu “alga”. Tas atgriež negatīvu, ja SELF alga ir mazāka vai pozitīva, ja SELF alga ir lielāka, un 0, ja algas ir vienādas.
Koda izvade:
Veids izveidots
2. solis. Anonīmā bloka izveide, lai izsauktu objekta instanci.
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;/
Rezultāts
Salary of second instance is greater
Koda skaidrojums:
- 20. koda rindiņa : deklarējot emp_object_equality tipa l_obj_1.
- 21. koda rindiņa : emp_object_equality tipa l_obj_2 deklarēšana.
- 23. koda rindiņa : L_obj_1 inicializēšana ar algas vērtību “15000”
- 24. koda rindiņa : L_obj_1 inicializēšana ar algas vērtību “17000”
- Kodu rinda 25-33 : izdrukājiet ziņojumu, pamatojoties uz atgriešanās numuru no funkcijas ORDER.
Kopsavilkums
Šajā nodaļā mēs esam redzējuši objekta tipu un to īpašības. Mēs esam apsprieduši arī PL / SQL objektu konstruktorus, dalībniekus, atribūtus, mantojumu un vienlīdzību.