Čo je typ objektu v PL / SQL?
Objektovo orientované programovanie je zvlášť vhodné na vytváranie opakovane použiteľných komponentov a zložitých aplikácií. Sú usporiadané skôr okolo „objektov“ ako „akcií“, tj programy sú navrhnuté tak, aby fungovali a interagovali s celým objektom a nie s jedinou akciou. Táto koncepcia umožňuje programátorovi vyplniť a manipulovať s podrobnosťami na úrovni entít objektov.
Na nasledujúcom obrázku je znázornený príklad typu objektu, v ktorom je bankový účet považovaný za entitu objektu. Medzi atribúty objektov patria veci, ktoré obsahujú niektoré hodnoty atribútov, napríklad na bankovom účte; je to číslo účtu, bankový zostatok atď., zatiaľ čo objektové metódy popisujú napríklad výpočet úrokovej sadzby, generovanie bankového výpisu atď., ktoré si vyžadujú dokončenie určitého procesu.
V PL / SQL je objektovo orientované programovanie založené na typoch objektov.
Typ objektu môže predstavovať akúkoľvek entitu v reálnom svete. V tejto kapitole rozoberieme viac typov objektov.
V tomto návode - naučíte sa,
- Komponenty typov objektov
- Vytvorte objekt v systéme Oracle
- Inicializácia deklarácie typu objektu
- Konštruktéri
- Dedenie v type objektu
- Rovnosť PL / SQL objektov
Komponenty typov objektov
Typ objektu PL / SQL obsahuje hlavne dve zložky.
- Atribúty
- Členovia / metódy
Atribúty
Atribúty sú stĺpec alebo pole, v ktorom sú uložené údaje. Každý atribút bude namapovaný na dátový typ, ktorý definuje typ spracovania a ukladania pre tento atribút. Atribút môže mať akýkoľvek platný údajový typ PL / SQL alebo môže mať iný typ objektu.
Členovia / metódy
Členovia alebo metódy sú podprogramy definované v type objektu. Nepoužívajú sa na ukladanie akýchkoľvek údajov. Používajú sa hlavne na definovanie procesu vo vnútri typu objektu. Príklady overenia údajov pred vyplnením typu objektu. Sú deklarované v sekcii typ objektu a definované v sekcii tela typu objektu typu objektu. Sekcia tela v type objektu je voliteľnou súčasťou. Ak nie sú prítomní žiadni členovia, potom typ objektu nebude obsahovať žiadnu časť tela.
Vytvorte objekt v systéme Oracle
Typ objektu nemožno vytvoriť na úrovni podprogramu. Je ich možné vytvoriť iba na úrovni schémy. Keď je v schéme definovaný typ objektu, potom to isté možno použiť v podprogramoch. Typ objektu je možné vytvoriť pomocou nástroja „CREATE TYPE“. Telo typu je možné vytvoriť až po vytvorení jeho typu objektu.
CREATE TYPEAS OBJECT( ,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION] IS BEGIN END;… );/
Vysvetlenie syntaxe:
- Vyššie uvedená syntax ukazuje vytvorenie objektu „OBJECT“ s atribútmi a typu „OBJECT-BODY“ pomocou metód.
- Metódy môžu byť tiež preťažené v tele objektu.
Inicializácia deklarácie typu objektu
Rovnako ako ostatné komponenty v PL / SQL, aj pred použitím v programe je potrebné deklarovať typy objektov.
Po vytvorení typu objektu ho možno v deklaratívnej časti podprogramu použiť na vyhlásenie premennej tohto typu objektu.
Kedykoľvek je ktorákoľvek premenná deklarovaná v podprograme ako typ objektu, za behu programu sa vytvorí nová inštancia typu objektu a táto novovytvorená inštancia sa môže odkázať na názov premennej. Týmto spôsobom môže jeden typ objektu uložiť viac hodnôt v rôznych inštanciách.
DECLARE;BEGIN… END;/
Vysvetlenie syntaxe:
- Vyššie uvedená syntax zobrazuje deklaráciu premennej ako typ objektu v deklaratívnej časti.
Keď je premenná v podprograme deklarovaná ako typ objektu, bude atómovo nulová, tj. Celý objekt bude mať hodnotu null. Aby ich bolo možné v programe použiť, je potrebné ich inicializovať. Môžu byť inicializované pomocou konštruktorov.
Konštruktory sú implicitnou metódou objektu, ktorú možno označiť rovnakým menom ako objektového typu. Nasledujúca syntax zobrazuje inicializáciu typu objektu.
DECLARE;BEGIN := ();END;/
Vysvetlenie syntaxe:
- Vyššie uvedená syntax zobrazuje inicializáciu inštancie typu objektu s nulovou hodnotou.
- Samotný objekt teraz nie je nulový, pretože bol inicializovaný, ale atribúty vo vnútri objektu budú nulové, pretože sme týmto atribútom nepriradili žiadne hodnoty.
Konštruktéri
Konštruktory sú implicitnou metódou objektu, ktorú možno označiť rovnakým menom ako objektového typu. Kedykoľvek sa na objekt odkazuje prvýkrát, tento konštruktor sa zavolá implicitne.
Pomocou tohto konštruktora môžeme tiež inicializovať objekty. Konštruktor je možné definovať explicitne definovaním člena v tele typu objektu s rovnakým názvom typu objektu.
Príklad 1 : V nasledujúcom príklade použijeme člena typu objektu na vloženie záznamu do tabuľky emp s hodnotami ('RRR', 1005, 20000, 1000) a ('PPP', 1006, 20000, 1001). Po vložení údajov zobrazíme to isté pomocou člena typu objektu. Budeme tiež používať explicitný konštruktor na predvolené vyplnenie ID manažéra hodnotou 1001 pre druhý záznam.
Vykonáme to v nasledujúcich krokoch.
- Krok 1:
- Vytvorte typ objektu
- Telo typu objektu
- Krok 2: Vytvorenie anonymného bloku na volanie typu vytvoreného objektu prostredníctvom implicitného konštruktora pre emp_no 1005.
- Krok 3: Vytvorenie anonymného bloku na volanie typu vytvoreného objektu prostredníctvom explicitného konštruktora pre emp_no 1006.
Krok 1) Vytvorte typ objektu a telo typu objektu
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:/
Vysvetlenie kódu
- Riadok kódu 1-9 : Vytvorenie typu objektu 'emp_object' so 4 atribútmi a 3 členmi. Obsahuje definíciu konštruktorov iba s 3 parametrami. (Skutočný implicitný konštruktor bude obsahovať počet parametrov rovný počtu atribútov prítomných v type objektu)
- Riadok kódu 10 : Vytvorenie tela typu.
- Riadok kódu 11-21 : Definovanie explicitného konštruktora. Priradenie hodnoty parametra k atribútom a priradenie hodnoty pre atribút „manager“ s predvolenou hodnotou „1001“.
- Riadok kódu 22-26 : Definovanie člena „insert_records“, v ktorom sú hodnoty atribútov vložené do tabuľky „emp“.
- Riadok kódu 27-34 : Definovanie člena 'display_records', v ktorom sa zobrazujú hodnoty atribútov typu objektu.
Výkon
Typ bol vytvorený
Telo textu bolo vytvorené
Krok 2) Vytvorenie anonymného bloku na volanie typu vytvoreného objektu prostredníctvom implicitného konštruktora pre 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;
Vysvetlenie kódu
- Riadok kódu 37-45 : Vkladanie záznamov pomocou implicitného konštruktora. Volanie konštruktora obsahuje skutočný počet hodnôt atribútov.
- Riadok kódu 38 : Deklaruje guru_emp_det ako typ objektu 'emp_object'.
- Riadok kódu 41 : Príkaz „guru_emp_det.display_records“ nazvaný členská funkcia „diplay_records“ a hodnoty atribútov sa zobrazia
- Riadok kódu 42 : Príkaz 'guru_emp_det.insert_records' sa volá členská funkcia 'insert_records' a hodnoty atribútov sa vložia do tabuľky.
Výkon
Meno zamestnanca: RRR
Počet zamestnancov: 1005
Plat: 20000
Manažér: 1 000
Krok 3) Vytvorenie anonymného bloku na volanie typu vytvoreného objektu prostredníctvom explicitného konštruktora pre 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;/
Výkon
Employee Name:PPPEmployee Number:1006Salary:20000Manager:1001
Vysvetlenie kódu:
- Riadok kódu 46-53 : Vkladanie záznamov pomocou explicitného konštruktora.
- Riadok kódu 46 : Deklaruje guru_emp_det ako typ objektu 'emp_object'.
- Riadok kódu 50 : Príkaz „guru_emp_det.display_records“ nazvaný členská funkcia „display_records“ a hodnoty atribútov sa zobrazia
- Riadok kódu 51 : Príkaz 'guru_emp_det.insert_records' sa nazýva členská funkcia 'insert_records' a hodnoty atribútov sa vložia do tabuľky.
Dedenie v type objektu
Vlastnosť dedenia umožňuje typu podobjektu prístup ku všetkým atribútom a členom typu superobjektu alebo nadradeného typu objektu.
Typ čiastkového objektu sa nazýva typ zdedeného objektu a typ superobjektu sa nazýva typ nadradeného objektu. Nasledujúca syntax ukazuje, ako vytvoriť rodičovský a zdedený typ objektu.
CREATE TYPEAS OBJECT( ,… )NOT FINAL;/
Vysvetlenie syntaxe:
- Vyššie uvedená syntax ukazuje vytvorenie typu SUPER.
CREATE TYPEUNDER ( ,.);/
Vysvetlenie syntaxe:
- Vyššie uvedená syntax ukazuje vytvorenie typu SUB. Obsahuje všetkých členov a atribúty z typu nadradeného objektu.
Príklad 1: V nasledujúcom príklade použijeme vlastnosť dedičstvo na vloženie záznamu s ID manažéra ako „1002“ pre nasledujúci záznam („RRR“, 1007, 20000).
Vyššie uvedený program vykonáme v nasledujúcich krokoch
- Krok 1: Vytvorte typ SUPER.
- Krok 2: Vytvorte typ a telo SUB.
- Krok 3: Vytvorenie anonymného bloku na volanie typu SUB.
Krok 1) Vytvorte typ SUPER alebo typ rodič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;/
Vysvetlenie kódu:
- Riadok kódu 1-9 : Vytvorenie typu objektu 'emp_object' so 4 atribútmi a 3 členmi. Obsahuje definíciu konštruktorov iba s 3 parametrami. Bol deklarovaný ako „NEKONEČNÝ“, takže ide o nadradený typ.
Krok 2) Vytvorte typ SUB pod SUPER typom.
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;/
Vysvetlenie kódu:
- Riadok kódu 10-13 : Vytvorenie sub_emp_object ako zdedeného typu s ďalším jedným atribútom 'default_manager' a deklaráciou procedúry člena.
- Riadok kódu 14 : Vytvorenie tela pre zdedený typ objektu.
- Riadok kódu 1 6 -21 : Definovanie procedúry člena, ktorá vkladá záznamy do tabuľky „emp“ s hodnotami z typu objektu „SUPER“, s výnimkou hodnoty správcu. Pre hodnotu správcu sa používa typ „default_manager“ typu „SUB“.
Krok 3) Vytvorenie anonymného bloku pre volanie typu 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;/
Vysvetlenie kódu:
- Riadok kódu 25 : Deklarovanie typu „guru_emp_det“ ako typu „sub_emp_object“.
- Riadok kódu 27 : Inicializácia objektu pomocou implicitného konštruktora. Konštruktor má 5 parametrov (4 atribúty typu PARENT a 2 atribúty typu SUB). Posledný parameter (1002) definuje hodnotu pre atribút default_manager
- Riadok kódu 28 : Volanie člena „insert_default_mgr“, aby vložil záznamy s predvoleným ID manažéra odovzdaným v konštruktore.
Rovnosť PL / SQL objektov
Inštanciu objektu, ktorá patrí k rovnakým objektom, je možné porovnať z hľadiska rovnosti. Na tento účel musíme mať v type objektu špeciálnu metódu s názvom „OBJEDNAŤ“.
Táto metóda „OBJEDNAŤ“ by mala byť funkciou, ktorá vracia číselný typ. Ako vstup trvá dva parametre (prvý parameter: id inštancie samostatného objektu, druhý parameter: id inštancie iného objektu).
Porovná sa ID inštancie dvoch objektov a výsledok sa vráti v číselnej podobe.
- Kladná hodnota predstavuje, že inštancia objektu SELF je väčšia ako iná inštancia.
- Záporná hodnota predstavuje, že inštancia objektu SELF je menšia ako iná inštancia.
- Nula predstavuje, že inštancia objektu SELF sa rovná inej inštancii.
- Ak je niektorá z inštancií nulová, potom táto funkcia vráti hodnotu 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;… );/
Vysvetlenie syntaxe:
- Vyššie uvedená syntax zobrazuje funkciu OBJEDNAŤ, ktorú je potrebné zahrnúť do tela typu pre kontrolu rovnosti.
- Parametrom pre túto funkciu by mala byť inštancia rovnakého typu objektu.
- Vyššie uvedenú funkciu možno nazvať ako „obj_instance_1.match (obj_instance_2)“ a tento výraz vráti číselnú hodnotu, ako je znázornené, kde obj_instance_1 a obj_instance_2 sú inštanciou typu_objektu_objektu.
Príklad1 : V nasledujúcom príklade sa dozvieme, ako porovnať dva objekty. Vytvoríme dve inštancie a porovnáme medzi nimi atribút „plat“. Urobíme dva kroky.
- Krok 1: Vytvorenie typu a tela objektu.
- Krok 2: Vytvorenie anonymného bloku na volanie porovnajte inštanciu objektu.
Krok 1) Vytvorenie typu a tela objektu.
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;/
Vysvetlenie kódu:
- Riadok kódu 1-4: Vytvorenie typu objektu 'emp_object_equality' s 1 atribútmi a 1 členom.
- Riadok kódu 6-16 : Definovanie funkcie OBJEDNÁVKA, ktorá porovnáva atribút 'plat' inštancie SELF a typu inštancie parametra. Záporná je, ak je SAMOSTATNÝ plat nižší alebo kladný, ak je SAMOVÝ plat vyšší a 0, ak sú platy rovnaké.
Výstup kódu:
Typ bol vytvorený
Krok 2) Vytvorenie anonymného bloku na volanie porovnajte inštanciu objektu.
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ýkon
Salary of second instance is greater
Vysvetlenie kódu:
- Riadok kódu 20 : Deklarovanie l_obj_1 typu emp_object_equality.
- Riadok kódu 21 : Deklarovanie l_obj_2 typu emp_object_equality.
- Riadok kódu 23 : Inicializácia l_obj_1 s hodnotou platu ako „15000“
- Riadok kódu 24 : Inicializácia l_obj_1 s hodnotou platu ako „17000“
- Riadok kódu 25-33 : Vytlačte správu na základe návratového čísla z funkcie OBJEDNAŤ.
Zhrnutie
V tejto kapitole sme videli typ objektu a jeho vlastnosti. Diskutovali sme tiež o konštruktoroch, členoch, atribútoch, dedičnosti a rovnosti v objektoch PL / SQL.