Kas yra objekto tipas PL / SQL?
Objektinis programavimas ypač tinka daugkartinių komponentų kūrimui ir sudėtingoms programoms. Jie yra išdėstyti aplink „objektus“, o ne „veiksmus“, ty programos yra skirtos veikti ir sąveikauti su visu objektu, o ne su vienu veiksmu. Ši koncepcija leidžia programuotojui užpildyti ir manipuliuoti detalėmis objekto objektų lygiu.
Žemiau esančiame paveikslėlyje pavaizduotas objekto tipo, kuriame banko sąskaita laikoma objekto objektu, pavyzdys. Objektų atributai apima dalykus, kurie turi tam tikras atributų vertes, pavyzdžiui, banko sąskaitoje; tai yra sąskaitos numeris, banko likutis ir kt., o objekto metodai apibūdina tokius dalykus kaip palūkanų normos apskaičiavimas, banko išrašo sudarymas ir kt., kuriems atlikti reikia tam tikro proceso.
PL / SQL objektinis programavimas yra pagrįstas objektų tipais.
Objekto tipas gali atstovauti bet kokį realaus pasaulio objektą. Šiame skyriuje aptarsime daugiau objektų tipų.
Šioje pamokoje sužinosite,
- Objektų tipų komponentai
- Sukurkite objektą „Oracle“
- Deklaracija Objekto tipo inicijavimas
- Konstruktoriai
- Paveldėjimas objekto tipu
- PL / SQL objektų lygybė
Objektų tipų komponentai
PL / SQL objekto tipą sudaro daugiausia du komponentai.
- Atributai
- Nariai / metodai
Atributai
Atributai yra stulpelis arba laukas, kuriame saugomi duomenys. Kiekvienas atributas bus susietas su duomenų tipu, apibrėžiančiu to atributo apdorojimo ir saugojimo tipą. Atributas gali būti bet kokio galiojančio PL / SQL duomenų tipo arba kito tipo objekto.
Nariai / metodai
Nariai arba metodai yra paprogramės, apibrėžtos objekto tipe. Jie nėra naudojami jokiems duomenims saugoti. Jie daugiausia naudojami objekto tipo procesui apibrėžti. Duomenų tikrinimo pavyzdžiai prieš pildant objekto tipą. Jie deklaruojami objekto tipo skiltyje ir apibrėžiami objekto tipo kūno skiltyje. Objekto tipo kūno dalis yra neprivaloma dalis. Jei nėra narių, tada objekto tipe nebus kūno dalių.
Sukurkite objektą „Oracle“
Objekto tipo negalima sukurti paprogramės lygiu, juos galima sukurti tik schemos lygiu. Kai schemoje apibrėžtas objekto tipas, tą patį galima naudoti ir subprogramose. Objekto tipą galima sukurti naudojant „CREATE TYPE“. Tipo turinį galima sukurti tik sukūrus jo objekto tipą.
CREATE TYPEAS OBJECT( ,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION] IS BEGIN END;… );/
Sintaksės paaiškinimas:
- Pirmiau pateikta sintaksė rodo, kaip sukurta „OBJECT“ su atributais, o „OBJECT-BODY“ - su metodais.
- Metodai taip pat gali būti perkrauti objekto kūne.
Deklaracija Objekto tipo inicijavimas
Kaip ir kitus PL / SQL komponentus, taip pat reikia deklaruoti objektų tipus prieš juos naudojant programoje.
Sukūrus objekto tipą, jį galima naudoti deklaruojamojoje paprogramės dalyje deklaruoti to objekto tipo kintamąjį.
Kai bet koks kintamasis yra nurodomas paprogramėje kaip objekto tipas, vykdymo metu bus sukurtas naujas objekto tipo egzempliorius ir šį naujai sukurtą egzempliorių bus galima nurodyti kintamojo pavadinimu. Tokiu būdu vienas objekto tipas gali saugoti kelias reikšmes skirtingais atvejais.
DECLARE;BEGIN… END;/
Sintaksės paaiškinimas:
- Pirmiau nurodyta sintaksė rodo kintamojo deklaravimą kaip objekto tipą deklaratyviniame skyriuje.
Kai kintamasis bus paskelbtas kaip objekto tipas antrinėje programoje, jis bus atomiškai nulis, ty visas objektas bus nulis. Norint jas naudoti programoje, reikia inicijuoti reikšmes. Jie gali būti inicializuoti naudojant konstruktorius.
Konstruktoriai yra numanomas objekto metodas, kurį galima vadinti tuo pačiu pavadinimu kaip ir objekto tipą. Žemiau esančioje sintaksėje rodomas objekto tipo inicijavimas.
DECLARE;BEGIN := ();END;/
Sintaksės paaiškinimas:
- Aukščiau pateikta sintaksė rodo objekto tipo egzemplioriaus inicijavimą su nuline verte.
- Dabar pats objektas nėra niekinis, nes jis buvo inicijuotas, tačiau objekto viduje esantys atributai bus niekiniai, nes mes šiems atributams nepriskyrėme jokių reikšmių.
Konstruktoriai
Konstruktoriai yra numanomas objekto metodas, kurį galima vadinti tuo pačiu pavadinimu kaip ir objekto tipą. Kai objektas bus nukreiptas pirmą kartą, šis konstruktorius bus vadinamas netiesiogiai.
Mes taip pat galime inicializuoti objektus naudodami šį konstruktorių. Konstruktorius gali būti aiškiai apibrėžtas apibrėžiant narį objekto tipo kūne tuo pačiu objekto tipo pavadinimu.
1 pavyzdys : Šiame pavyzdyje naudosime objekto tipo narį įrašui įterpti į emp lentelę su reikšmėmis ('RRR', 1005, 20000, 1000) ir ('PPP', 1006, 20000, 1001). Kai duomenys bus įterpti, tą patį rodysime naudodami objekto tipo narį. Mes taip pat ketiname naudoti aiškų konstruktorių, kad pagal numatytuosius nustatymus valdytojo ID užpildytume 1001 reikšme antram įrašui.
Mes tai vykdysime atlikdami toliau nurodytus veiksmus.
- 1 žingsnis:
- Sukurti objekto tipą
- Objekto tipo kūnas
- 2 žingsnis: sukurkite anoniminį bloką, kad paskambintumėte sukurtam objekto tipui per numanomą konstruktorių „emp_no 1005“.
- 3 žingsnis: sukurkite anoniminį bloką, kad paskambintumėte sukurtam objekto tipui per aiškų konstruktorių „emp_no 1006“.
1 žingsnis) Sukurkite Object type ir Object type body
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:/
Kodo paaiškinimas
- Kodo eilutė 1–9 : „Emp_object“ objekto tipo su 4 atributais ir 3 nariais kūrimas. Jame pateikiamas konstruktorių apibrėžimas tik su 3 parametrais. (Tikrame numanomame konstruktoriuje bus parametrų skaičius, lygus objekto tipe esančių atributų skaičiui)
- 10 kodo eilutė : tipo turinio sukūrimas.
- Kodo eilutė 11-21 : apibrėžtas aiškus konstruktorius. Parametro vertės priskyrimas atributams ir atributo „manager“ vertės priskyrimas numatytajai vertei „1001“.
- Kodo eilutė 22-26 : apibrėžti narį „insert_records“, kuriame atributų reikšmės įterpiamos į lentelę „emp“.
- Kodo eilutė 27-34 : apibrėžti narį „display_records“, kuriame rodomos objekto tipo atributų vertės.
Rezultatas
Sukurtas tipas
Sukurtas tipo kūnas
2 žingsnis. Sukurkite anoniminį bloką, kad paskambintumėte sukurtam objekto tipui per numanomą konstruktorių „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;
Kodo paaiškinimas
- Kodo eilutė 37-45 : Įrašų įterpimas naudojant numanomą konstruktorių. Skambinant konstruktoriui nurodomas tikrasis atributų verčių skaičius.
- Kodo eilutė 38 : „guru_emp_det“ paskelbia „emp_object“ objekto tipu.
- Kodo eilutė 41 : Pareiškimas „guru_emp_det.display_records“ vadinamas „diplay_records“ nario funkcija ir rodomos atributų vertės
- 42 kodo eilutė : pareiškimas „guru_emp_det.insert_records“, vadinamas „nario funkcija„ insert_records “, ir atributų reikšmės įterpiamos į lentelę.
Rezultatas
Darbuotojo vardas: RRR
Darbuotojo numeris: 1005
Atlyginimas: 20000
Vadybininkas: 1000
3 žingsnis. Sukurkite anoniminį bloką, kad paskambintumėte sukurtam objekto tipui per aiškų konstruktorių, skirtą „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;/
Rezultatas
Employee Name:PPPEmployee Number:1006Salary:20000Manager:1001
Kodo paaiškinimas:
- Kodo eilutė 46–53 : Įrašų įterpimas naudojant aiškų konstruktorių.
- Kodo 46 eilutė : „guru_emp_det“ paskelbia „emp_object“ objekto tipu.
- 50 kodo eilutė : Pareiškimas „guru_emp_det.display_records“ vadinamas „display_records“ nario funkcija ir rodomos atributų vertės
- 51 kodo eilutė : pareiškimas „guru_emp_det.insert_records“, vadinamas „nario funkcija„ insert_records “, ir atributų reikšmės įterpiamos į lentelę.
Paveldėjimas objekto tipu
Paveldėjimo ypatybė leidžia subobjekto tipui pasiekti visus superobjekto tipo arba pirminio objekto tipo atributus ir narius.
Papunkčio tipas vadinamas paveldėtu objekto tipu, o super objekto tipas - pirminiu objekto tipu. Žemiau esančioje sintaksėje parodyta, kaip sukurti pirminį ir paveldimą objekto tipą.
CREATE TYPEAS OBJECT( ,… )NOT FINAL;/
Sintaksės paaiškinimas:
- Aukščiau pateikta sintaksė rodo SUPER tipo sukūrimą.
CREATE TYPEUNDER ( ,.);/
Sintaksės paaiškinimas:
- Aukščiau pateikta sintaksė rodo SUB tipo sukūrimą. Jame yra visi pirminio objekto tipo nariai ir atributai.
1 pavyzdys: Žemiau pateiktame pavyzdyje mes naudosime paveldėjimo ypatybę, kad įterptume įrašą su valdytojo ID kaip „1002“ šiam įrašui („RRR“, 1007, 20000).
Mes vykdysime pirmiau nurodytą programą atlikdami šiuos veiksmus
- 1 žingsnis: sukurkite SUPER tipą.
- 2 žingsnis: sukurkite SUB tipą ir turinį.
- 3 žingsnis: sukurkite anoniminę bloką, kad paskambintumėte SUB tipui.
1 žingsnis) Sukurkite SUPER tipą arba tėvų 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;/
Kodo paaiškinimas:
- Kodo eilutė 1–9 : „Emp_object“ objekto tipo su 4 atributais ir 3 nariais kūrimas. Jame pateikiamas konstruktorių apibrėžimas tik su 3 parametrais. Jis buvo paskelbtas kaip „NE GALUTINIS“, todėl yra pirminis tipas.
2 žingsnis) Sukurkite SUB tipą pagal SUPER tipą.
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;/
Kodo paaiškinimas:
- Kodo eilutė 10-13 : Sub_emp_object kaip paveldėto tipo sukūrimas su papildomu vienu atributu „default_manager“ ir nario procedūros deklaracija.
- 14 kodo eilutė : paveldėto objekto tipo kūno kūrimas.
- Kodas linija 1 6 -21 : Apibrėžti nario procedūrą, kuri įdėjimas įrašus į "EMP" stalo su vertėmis iš "super" objekto tipo, išskyrus vadybininkas vertės. Valdytojo vertei jis naudoja „default_manager“ iš „SUB“ tipo.
3 žingsnis) Sukurkite anoniminę bloką, kad paskambintumėte į SUB tipą
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;/
Kodo paaiškinimas:
- 25 kodo eilutė : „guru_emp_det“ deklaruojama kaip „sub_emp_object“ tipo.
- 27 kodo eilutė : objekto inicijavimas implicitiniu konstruktoriumi. Konstruktorius turi 5 parametrus (4 atributus iš PARENT tipo ir 2 atributus iš SUB tipo). Paskutinis parametras (1002) apibrėžia „default_manager“ atributo vertę
- 28 kodo eilutė : Skambinant nariui „insert_default_mgr“ įterpti įrašus su numatytuoju valdytojo ID, perduotu konstruktoriuje.
PL / SQL objektų lygybė
Objektų egzempliorius, priklausantis tiems patiems objektams, gali būti lyginamas. Tam turime turėti specialų objekto tipo metodą, vadinamą „ORDER“ metodu.
Šis „ORDER“ metodas turėtų būti funkcija, kuri pateikia skaitinį tipą. Kaip įvestį reikia dviejų parametrų (pirmasis parametras: savarankiško objekto egzemplioriaus ID, antrasis parametras: kito objekto egzemplioriaus ID).
Palyginamas dviejų objektų egzemplioriaus ID ir rezultatas pateikiamas skaitmenimis.
- Teigiama vertė reiškia, kad SELF objekto egzempliorius yra didesnis už kitą egzempliorių.
- Neigiama reikšmė reiškia, kad SELF objekto egzempliorius yra mažesnis už kitą egzempliorių.
- Nulis reiškia, kad SELF objekto egzempliorius yra lygus kitam egzemplioriui.
- Jei kuri nors iš egzempliorių yra nulinė, ši funkcija grąžins nulį.
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;… );/
Sintaksės paaiškinimas:
- Aukščiau pateikta sintaksė rodo funkciją UŽSAKYTI, kurią reikia įtraukti į tipo turinį norint patikrinti lygybę.
- Šios funkcijos parametras turėtų būti to paties objekto tipo egzempliorius.
- Pirmiau pateiktą funkciją galima vadinti „obj_instance_1.match (obj_instance_2)“, ir ši išraiška grąžins skaitinę vertę, kaip parodyta, kur obj_instance_1 ir obj_instance_2 yra objekto_tipo_pavadinimas.
1 pavyzdys : Šiame pavyzdyje mes pamatysime, kaip palyginti du objektus. Kursime du atvejus ir palyginsime jų atributą „atlyginimas“. Mes ketiname atlikti du veiksmus.
- 1 veiksmas: sukurkite objekto tipą ir turinį.
- 2 žingsnis: sukurkite anoniminį bloką, kad paskambintumėte, palyginkite objekto egzempliorių.
1 žingsnis) Objekto tipo ir kūno sukūrimas.
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;/
Kodo paaiškinimas:
- Kodo eilutė 1–4: „Emp_object_equality“ objekto tipo su 1 atributu ir 1 nariu kūrimas.
- Kodo eilutė 6-16 : Apibrėžkite funkciją UŽSAKYTI, kuri lygina SELF egzemplioriaus ir parametro egzemplioriaus tipo „atlyginimas“ atributą. Jis grąžina neigiamą rezultatą, jei SELF atlyginimas yra mažesnis, arba teigiamą, jei SELF atlyginimas yra didesnis, ir 0, jei atlyginimai yra vienodi.
Kodo išvestis:
Sukurtas tipas
2 žingsnis. Sukurkite anoniminį bloką, kad galėtumėte skambinti, palyginti objektų egzempliorių.
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;/
Rezultatas
Salary of second instance is greater
Kodo paaiškinimas:
- 20 kodo eilutė : deklaruojame emp_object_equality tipo l_obj_1.
- Kodo 21 eilutė : deklaruojame emp_object_equality tipo l_obj_2.
- 23 kodo eilutė : inicijuojamas „l_obj_1“, kai atlyginimo vertė yra „15000“
- 24 kodo eilutė : inicijuojamas „l_obj_1“, kai atlyginimo vertė yra „17000“
- Kodo eilutė 25-33 : išspausdinkite pranešimą pagal grąžinimo numerį iš funkcijos ORDER.
Santrauka
Šiame skyriuje mes matėme objekto tipą ir jų savybes. Mes taip pat aptarėme apie konstruktorius, narius, atributus, paveldėjimą ir lygybę PL / SQL objektuose.