Mi az Object Type a PL / SQL-ben?
Az objektumorientált programozás különösen alkalmas újrafelhasználható alkatrészek és összetett alkalmazások felépítésére. "Objektumok" köré szerveződnek, nem pedig "cselekvések" köré, azaz a programokat úgy tervezték, hogy az egész művelettel működjenek és kölcsönhatásba lépjenek, nem pedig az egyetlen művelettel. Ez a koncepció lehetővé teszi a programozó számára, hogy objektum entitások szintjén feltöltse és manipulálja a részleteket.
Az alábbi kép azt az objektumtípust ábrázolja, amelyben a bankszámla objektum entitásnak számít. Az objektumattribútumok olyan dolgokat tartalmaznak, amelyek bizonyos attribútumértékeket tartalmaznak, például a bankszámlán; ez a számlaszám, a bankszámlaegyenleg stb., míg az objektum módszerek olyan dolgokat írnak le, mint a kamatláb kiszámítása, bankszámlakivonat készítése stb., amelyek bizonyos folyamatokat megkövetelnek.
A PL / SQL-ben az objektumorientált programozás objektumtípusokon alapul.
Az objektumtípus bármely valós entitást képviselhet. További tárgytípusokat fogunk megvitatni ebben a fejezetben.
Ebben az oktatóanyagban - megtanulod,
- Az objektumtípusok összetevői
- Hozzon létre objektumot az Oracle-ben
- Nyilatkozat az objektumtípus inicializálása
- Kivitelezők
- Öröklés objektumtípusban
- A PL / SQL objektumok egyenlősége
Az objektumtípusok összetevői
A PL / SQL objektumtípus főleg két összetevőt tartalmaz.
- Attribútumok
- Tagok / módszerek
Attribútumok
Az attribútumok azok az oszlopok vagy mezők, amelyekben az adatokat tárolják. Minden attribútum hozzárendelésre kerül az adattípushoz, amely meghatározza az adott attribútum feldolgozási és tárolási típusát. Az attribútum lehet bármilyen érvényes PL / SQL adattípus, vagy lehet egy másik objektumtípus.
Tagok / módszerek
A tagok vagy metódusok az alprogramok, amelyeket az objektumtípus határoz meg. Nem használnak semmilyen adatot. Főleg az objektumtípuson belüli folyamat meghatározására szolgálnak. Példák az adatok ellenőrzésére az objektumtípus feltöltése előtt. Az objektumtípus szakaszban vannak deklarálva, és az objektumtípus objektumtörzs szakaszában vannak meghatározva. Az objektumtípusú testrész opcionális rész. Ha nincsenek tagok, akkor egy objektumtípus nem tartalmaz testrészt.
Hozzon létre objektumot az Oracle-ben
Objektumtípus nem hozható létre alprogram szinten, csak séma szinten hozható létre. Miután az objektumtípust meghatározták a sémában, akkor ugyanez használható az alprogramokban is. Az objektumtípus a „CREATE TYPE” használatával hozható létre. A típusú törzs csak objektumtípusának létrehozása után hozható létre.
CREATE TYPEAS OBJECT( ,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION] IS BEGIN END;… );/
Szintaxis Magyarázat:
- A fenti szintaxis bemutatja az „OBJECT” létrehozását attribútumokkal és az „OBJECT-BODY” létrehozását módszerekkel.
- A módszerek túlterhelhetők az objektum testében is.
Nyilatkozat az objektumtípus inicializálása
A PL / SQL többi összetevőjéhez hasonlóan az objektumtípusokat is deklarálni kell, mielőtt felhasználnák őket a programban.
Az objektumtípus létrehozása után az alprogram deklaratív szakaszában deklarálható az adott objektumtípus változója.
Amikor az alprogramban bármely változó objektumtípusként van deklarálva, futás közben létrejön az objektumtípus új példánya, és ez az újonnan létrehozott példány a változó nevére hivatkozhat. Ily módon egyetlen objektumtípus több értéket is tárolhat különböző példányokban.
DECLARE;BEGIN… END;/
Szintaxis Magyarázat:
- A fenti szintaxis egy változó deklarálását objektumtípusként mutatja a deklaratív szakaszban.
Amint a változó objektumtípusként van deklarálva egy alprogramban, atomilag null, azaz maga az egész objektum null. Értékekkel kell inicializálni, hogy felhasználhassa őket a programban. Konstruktorok segítségével inicializálhatók.
A konstruktorok egy objektum implicit módszere, amelyre az objektumtípus nevével azonos névvel lehet hivatkozni. Az alábbi szintaxis az objektumtípus inicializálását mutatja be.
DECLARE;BEGIN := ();END;/
Szintaxis Magyarázat:
- A fenti szintaxis az objektumtípus-példány null értékű inicializálását mutatja.
- Most maga az objektum sem null, mivel inicializálták, de az objektumon belüli attribútumok nullák lesznek, mivel nem rendeltünk értékeket ezekhez az attribútumokhoz.
Kivitelezők
A konstruktorok egy objektum implicit módszere, amelyre az objektumtípus nevével azonos névvel lehet hivatkozni. Amikor az objektumot először hivatkozják, ezt a konstruktort implicit módon hívják meg.
Ezeket a konstruktorokat inicializálhatjuk is. A konstruktort kifejezetten definiálhatjuk úgy, hogy definiáljuk a tagot az objektumtípus törzsében az objektumtípus azonos nevével.
1. példa : A következő példában az objektumtípust használjuk a rekord beillesztésére az emp táblába, amelynek értéke ('RRR', 1005, 20000, 1000) és ('PPP', 1006, 20000, 1001). Az adatok beillesztése után ugyanazt fogjuk megjeleníteni az objektumtípus tag használatával. Az explicit konstruktort arra is felhasználjuk, hogy alapértelmezés szerint 1001 értékkel töltsük fel a manager azonosítót a második rekordhoz.
Az alábbi lépésekben fogjuk végrehajtani.
- 1. lépés:
- Objektumtípus létrehozása
- Objektumtípus törzs
- 2. lépés: Névtelen blokk létrehozása a létrehozott objektumtípus hívásához az impl_ konstruktoron keresztül az emp_no 1005 számára.
- 3. lépés: Névtelen blokk létrehozása a létrehozott objektumtípus hívására az explicit konstruktoron keresztül az emp_no 1006 számára.
1. lépés: Hozzon létre objektumtípust és objektumtípustörzset
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:/
Kód Magyarázat
- 1-9 kódsor: Az 'emp_object' objektumtípus létrehozása 4 attribútummal és 3 taggal. Csak 3 paraméterrel tartalmazza a konstruktorok definícióját. (A tényleges implicit konstruktor tartalmazza az objektumtípusban lévő attribútumok számával megegyező paraméterek számát)
- 10. kódsor: A típus törzsének létrehozása.
- 11-21 kódsor : Az explicit konstruktor meghatározása. A paraméterérték hozzárendelése az attribútumokhoz, és a „manager” attribútum értékének hozzárendelése az alapértelmezett „1001” értékhez.
- Kódsor 22-26 : Annak a tagnak az 'insert_records' meghatározása, amelybe az attribútumértékeket beillesztik az 'emp' táblába.
- Kódsor 27-34 : A 'display_records' tag meghatározása, amelyben megjeleníti az objektumtípus attribútumainak értékeit.
Kimenet
Típus létrehozva
Típus létrehozva
2. lépés: Névtelen blokk létrehozása a létrehozott objektumtípus hívásához az impl_ konstruktoron keresztül az emp_no 1005 számára
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;
Kód Magyarázat
- 37-45 kódsor : A rekordok beszúrása az implicit konstruktor segítségével. A konstruktor hívása tartalmazza az attribútumok értékének tényleges számát.
- 38. kódsor: A guru_emp_det deklarálja az 'emp_object' objektumtípusának.
- 41. kódsor: A „guru_emp_det.display_records” utasítás a „diplay_records” tagfüggvényt hívja, és az attribútumok értékei megjelennek
- 42. kódsor: A „guru_emp_det.insert_records” utasítás az „insert_records” tagfüggvényt hívja, és az attribútumértékek beillesztésre kerülnek a táblázatba.
Kimenet
Munkavállaló neve: RRR
Munkavállalói szám: 1005
Fizetés: 20000
Menedzser: 1000
3. lépés: Névtelen blokk létrehozása a létrehozott objektumtípus hívásához az explicit konstruktoron keresztül az emp_no 1006 számára
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;/
Kimenet
Employee Name:PPPEmployee Number:1006Salary:20000Manager:1001
Kód Magyarázat:
- Kódsor 46-53 : A rekordok beszúrása az explicit konstruktor segítségével.
- 46. kódsor: A guru_emp_det deklarálja az 'emp_object' objektumtípusának.
- 50. kódsor: A „guru_emp_det.display_records” utasítás, amelyet a „display_records” tagfüggvénynek hívnak, és az attribútumok értékei megjelennek
- 51. kódsor: A „guru_emp_det.insert_records” utasítás az „insert_records” tagfüggvényt hívja, és az attribútumértékek beillesztésre kerülnek a táblázatba.
Öröklés objektumtípusban
Az öröklődési tulajdonság lehetővé teszi, hogy az alobjektum-típus elérje a szuperobjektumtípus vagy a szülőobjektumtípus összes attribútumát és tagját.
Az alobjektumtípust öröklött objektumtípusnak, a szuperobjektumtípust pedig szülőobjektumtípusnak nevezzük. Az alábbi szintaxis bemutatja a szülő és az örökölt objektumtípus létrehozásának módját.
CREATE TYPEAS OBJECT( ,… )NOT FINAL;/
Szintaxis Magyarázat:
- A fenti szintaxis a SUPER típus létrehozását mutatja be.
CREATE TYPEUNDER ( ,.);/
Szintaxis Magyarázat:
- A fenti szintaxis a SUB típus létrehozását mutatja. Ez tartalmazza a szülő objektumtípus összes tagját és attribútumát.
1. példa : Az alábbi példában az öröklési tulajdonságot arra használjuk, hogy a következő rekordhoz („RRR”, 1007, 20000) beillesszük a rekordot, amelynek kezelői azonosítója „1002”.
A fenti programot a következő lépésekben fogjuk végrehajtani
- 1. lépés: Hozzon létre SUPER típust.
- 2. lépés: Hozzon létre SUB típust és törzset.
- 3. lépés: Névtelen blokk létrehozása a SUB típus hívásához.
1. lépés: Hozzon létre SUPER vagy szülő típust.
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;/
Kód Magyarázat:
- 1-9 kódsor: Az 'emp_object' objektumtípus létrehozása 4 attribútummal és 3 taggal. Csak 3 paraméterrel tartalmazza a konstruktorok definícióját. „NEM VÉGLEGES” -nek nyilvánították, tehát szülőtípus.
2. lépés: Hozzon létre SUB típust a SUPER típus alatt.
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;/
Kód Magyarázat:
- Kódsor 10-13 : Az sub_emp_object létrehozása örökölt típusként további egy "default_manager" attribútummal és tag eljárási deklarációval.
- 14. kódsor: Törzs létrehozása az öröklött objektumtípushoz.
- Kódsor 1 6 -21 : Annak a tagnak az eljárás meghatározása, amely beilleszti a rekordokat az "emp" táblába a "SUPER" objektumtípus értékeivel, a kezelői érték kivételével. A menedzser értékéhez a 'SUB' típusú 'default_manager' szót használja.
3. lépés: Névtelen blokk létrehozása a SUB típus hívásához
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;/
Kód Magyarázat:
- 25. kódsor: A „guru_emp_det” deklarálása „sub_emp_object” típusnak.
- 27. kódsor: Az objektum inicializálása az implicit konstruktorral. A konstruktor 5 paraméterrel rendelkezik (4 PARENT típusú és 2 SUB típusú attribútum). Az utolsó paraméter (1002) meghatározza az default_manager attribútum értékét
- 28. kódsor: A 'insert_default_mgr' tag meghívása a konstruktorban átadott alapértelmezett kezelőazonosítóval rendelkező rekordok beszúrására.
A PL / SQL objektumok egyenlősége
Az azonos objektumokhoz tartozó objektumpéldány összehasonlítható az egyenlőség szempontjából. Ehhez rendelkeznünk kell az objektumtípus speciális metódusával, az úgynevezett „ORDER” módszerrel.
Ennek az 'ORDER' metódusnak a numerikus típust adó függvénynek kell lennie. Két paraméterre van szükség bemenetként (az első paraméter: az önobjektum-példány azonosítója, a második paraméter: egy másik objektumpéldány azonosítója).
A két objektumpéldány azonosítóját összehasonlítjuk, és az eredményt numerikusan adjuk vissza.
- A pozitív érték azt jelzi, hogy az SELF objektum példány nagyobb, mint egy másik példány.
- A negatív érték azt jelzi, hogy az SELF objektum példány kisebb, mint egy másik példány.
- A nulla azt jelenti, hogy az SELF objektumpéldány egyenlő egy másik példánnyal.
- Ha bármelyik példány null, akkor ez a függvény null értéket ad vissza.
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;… );/
Szintaxis Magyarázat:
- A fenti szintaxis megmutatja az ORDER függvényt, amelyet az egyenlőség ellenőrzéséhez fel kell venni a típus törzsébe.
- A függvény paraméterének azonos objektumtípusú példánynak kell lennie.
- A fenti függvény "obj_instance_1.match (obj_instance_2)" néven hívható, és ez a kifejezés a megadott számértéket adja vissza, ahol az obj_instance_1 és az obj_instance_2 az object_type_name példány.
1. példa: A következő példában megnézzük, hogyan lehet összehasonlítani két objektumot. Két példányt fogunk létrehozni, és összehasonlítani fogjuk a „fizetés” attribútumot. Két lépést fogunk megtenni.
- 1. lépés: Az objektum típusának és törzsének létrehozása.
- 2. lépés: A névtelen blokk létrehozása a hívás összehasonlításához az objektumpéldányt.
1. lépés: Az objektum típusának és törzsének létrehozása.
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;/
Kód Magyarázat:
- 1-4. Kódsor : Az 'emp_object_equality' objektumtípus létrehozása 1 attribútummal és 1 taggal.
- Kódsor 6-16 : Az ORDER függvény meghatározása, amely összehasonlítja az SELF példány és a paraméter példány típusának „fizetése” attribútumát. Negatív eredményt ad, ha az ÖNBÉL kisebb, vagy pozitív, ha az ÖNFÉL nagyobb, és 0, ha a fizetések megegyeznek.
Kód kimenet:
Típus létrehozva
2. lépés: A névtelen blokk létrehozása a hívás összehasonlításához az objektumpéldányt.
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;/
Kimenet
Salary of second instance is greater
Kód Magyarázat:
- 20. kódsor: Az emp_object_equality típusú l_obj_1 deklarálása.
- 21. kódsor: Az emp_object_equality típusú l_obj_2 deklarálása.
- 23. kódsor: Az l_obj_1 inicializálása „15000” fizetési értékkel
- 24. kódsor: Az l_obj_1 inicializálása '17000' fizetési értékkel
- Kódsor 25-33 : Az üzenet nyomtatása az ORDER függvény visszatérési száma alapján.
Összegzés
Ebben a fejezetben láthattuk az objektumtípust és azok tulajdonságait. Megbeszéltük a PL / SQL objektumok konstruktőreit, tagjait, attribútumait, öröklődését és egyenlőségét is.