Vad är objekttyp i PL / SQL?
Objektorienterad programmering är särskilt lämpad för att bygga återanvändbara komponenter och komplexa applikationer. De är organiserade kring "objekt" snarare än "åtgärder" dvs programmen är utformade för att fungera och interagera med hela objektet snarare än den enskilda åtgärden. Detta koncept gör det möjligt för programmeraren att fylla i och manipulera detaljerna på objektenhetsnivå.
Bilden nedan visar ett exempel på objekttypen där ett bankkonto betraktas som en objektenhet. Objektattributen innehåller saker som innehåller vissa attributvärden, till exempel på bankkonto; det är kontonummer, banksaldo etc. medan objektmetoderna beskriver saker som att räkna ut ränta, generera kontoutdrag, etc. som kräver att vissa processer ska slutföras.
I PL / SQL är objektorienterad programmering baserad på objekttyper.
En objekttyp kan representera vilken verklig enhet som helst. Vi ska diskutera fler objekttyper i detta kapitel.
I den här handledningen lär du dig,
- Komponenter av objekttyper
- Skapa objekt i Oracle
- Deklaration Initialisering av objekttyp
- Konstruktörer
- Arv i objekttyp
- Jämställdhet mellan PL / SQL-objekt
Komponenter av objekttyper
PL / SQL-objekttyp innehåller huvudsakligen två komponenter.
- Attribut
- Medlemmar / metoder
Attribut
Attribut är den kolumn eller det fält där data lagras. Varje attribut mappas till datatypen som definierar bearbetnings- och lagringstypen för det attributet. Attributet kan ha valfri PL / SQL-datatyp, eller så kan det ha en annan objekttyp.
Medlemmar / metoder
Medlemmar eller metoder är underprogram som definieras i objekttypen. De används inte för att lagra data. De används främst för att definiera process inuti objekttypen. För exempel som validerar data innan du fyller i objekttypen. De deklareras i objekttypsektionen och definieras i objekttypens kroppssektion av objekttypen. Kroppsdel i objekttyp är en valfri del. Om inga medlemmar är närvarande innehåller en objekttyp ingen kroppsdel.
Skapa objekt i Oracle
En objekttyp kan inte skapas på underprogramnivå, de kan bara skapas på schemanivå. När objekttypen har definierats i schemat kan samma användas i underprogram. Objekttypen kan skapas med 'CREATE TYPE'. Typkroppen kan skapas först efter att dess objekttyp har skapats.
CREATE TYPEAS OBJECT( ,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION] IS BEGIN END;… );/
Syntaxförklaring:
- Ovanstående syntax visar skapandet av 'OBJECT' med attribut och 'OBJECT-BODY' med metoder.
- Metoderna kan också överbelastas i objektkroppen.
Deklaration Initialisering av objekttyp
Liksom andra komponenter i PL / SQL behövs också objekttyper för att deklareras innan de används i programmet.
När objekttypen har skapats kan den användas i avsnittet om underprogramdeklaration för att deklarera en variabel av den objekttypen.
Närhelst någon variabel deklareras i underprogrammet som objekttyp skapas en ny instans av objekttypen under körning och denna nyskapade instans kan hänvisas till variabelnamnet. På så sätt kan en enda objekttyp lagra flera värden under olika instanser.
DECLARE;BEGIN… END;/
Syntaxförklaring:
- Ovanstående syntax visar deklarationen för en variabel som objekttyp i deklarationssektionen.
När variabeln deklareras som en objekttyp i ett underprogram blir den atomiskt noll, dvs. hela objektet i sig är ett null. Det måste initieras med värden för att använda dem i programmet. De kan initieras med hjälp av konstruktörer.
Konstruktörer är den implicita metoden för ett objekt som kan hänvisas med samma namn som för objekttypen. Syntaxen nedan visar initialiseringen av objekttypen.
DECLARE;BEGIN := ();END;/
Syntaxförklaring:
- Ovanstående syntax visar initialiseringen av objekttypsinstansen med ett nullvärde.
- Nu är själva objektet inte null eftersom det har initierats, men attributen inuti objektet kommer att vara null eftersom vi inte har tilldelat några värden till dessa attribut.
Konstruktörer
Konstruktörer är den implicita metoden för ett objekt som kan hänvisas med samma namn som för objekttypen. Närhelst objektet hänvisas för första gången kommer denna konstruktör att kallas implicit.
Vi kan också initialisera objekten med hjälp av dessa konstruktörer. Konstruktören kan definieras uttryckligen genom att definiera medlemmen i objekttypens kropp med samma namn som objekttypen.
Exempel 1 : I följande exempel ska vi använda objekttypmedlemmen för att infoga posten i emp-tabellen med värden ('RRR', 1005, 20000, 1000) och ('PPP', 1006, 20000, 1001). När data har infogats kommer vi att visa samma med hjälp av objekttypmedlem. Vi kommer också att använda den explicita konstruktorn för att fylla i manager-id som standard med 1001-värde för den andra posten.
Vi kommer att utföra det i nedanstående steg.
- Steg 1:
- Skapa objekttyp
- Objekt typ kropp
- Steg 2: Skapa ett anonymt block för att anropa skapad objekttyp genom implicit konstruktör för emp_no 1005.
- Steg 3: Skapa ett anonymt block för att anropa skapad objekttyp genom uttrycklig konstruktör för emp_no 1006.
Steg 1) Skapa objekttyp och objekttypsdel
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:/
Kodförklaring
- Kodrad 1-9 : Skapa objekttypen 'emp_object' med 4 attribut och 3 medlemmar. Den innehåller definitionen av konstruktörer med endast tre parametrar. (Faktisk implicit konstruktör kommer att innehålla antalet parametrar som är lika med antalet attribut som finns i objekttypen)
- Kodrad 10 : Skapa typkroppen.
- Kodrad 11-21 : Definiera den uttryckliga konstruktören. Tilldela parametervärdet till attributen och tilldela värdet för attribut 'manager' med standardvärdet '1001'.
- Kodrad 22-26 : Definiera medlemmen 'insert_records' där attributvärdena infogas i 'emp' -tabellen.
- Kodrad 27-34 : Definiera medlemmen 'display_records' i vilken värdena för objekttypattributen visas.
Produktion
Typ skapad
Skriv skapad kropp
Steg 2) Skapa anonymt block för att anropa skapad objekttyp genom implicit konstruktör för 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;
Kodförklaring
- Kodrad 37-45 : Infoga poster med den implicita konstruktorn. Call to constructor innehåller det faktiska antalet attributvärden.
- Kodrad 38 : Förklarar guru_emp_det som objekttyp 'emp_object'.
- Kodrad 41 : Uttalande 'guru_emp_det.display_records' som kallas 'diplay_records' medlemsfunktion och attributvärdena visas
- Kodrad 42 : Uttalande 'guru_emp_det.insert_records' kallas 'insert_records' medlemsfunktion och attributvärdena infogas i tabellen.
Produktion
Anställds namn: RRR
Anställd: 1005
Lön: 20000
Chef: 1000
Steg 3) Skapa anonymt block för att anropa skapad objekttyp genom explicita konstruktörer för 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;/
Produktion
Employee Name:PPPEmployee Number:1006Salary:20000Manager:1001
Kodförklaring:
- Kodrad 46-53 : Infoga poster med den explicita konstruktorn.
- Kodrad 46 : Förklarar guru_emp_det som objekttyp 'emp_object'.
- Kodrad 50 : Uttalande 'guru_emp_det.display_records' kallas 'display_records' medlemsfunktion och attributvärdena visas
- Kodrad 51 : Uttalande 'guru_emp_det.insert_records' kallad 'insert_records' medlemsfunktion och attributvärdena infogas i tabellen.
Arv i objekttyp
Inheritance-egenskapen ger sub-objekttypen åtkomst till alla attribut och medlemmar av super-objekttypen eller den överordnade objekttypen.
Underobjektypen kallas ärvt objekttyp och superobjektypen kallas överordnad objekttyp. Nedanstående syntax visar hur man skapar förälder och ärftlig objekttyp.
CREATE TYPEAS OBJECT( ,… )NOT FINAL;/
Syntaxförklaring:
- Ovanstående syntax visar skapandet av SUPER-typen.
CREATE TYPEUNDER ( ,.);/
Syntaxförklaring:
- Ovanstående syntax visar skapandet av SUB-typen. Den innehåller alla medlemmar och attribut från den överordnade objekttypen.
Exempel 1: I exemplet nedan kommer vi att använda arvsegenskapen för att infoga posten med manager-id som '1002' för följande post ('RRR', 1007, 20000).
Vi kommer att genomföra ovanstående program i följande steg
- Steg 1: Skapa SUPER-typ.
- Steg 2: Skapa SUB-typ och kropp.
- Steg 3: Skapa ett anonymt block för att ringa SUB-typen.
Steg 1) Skapa SUPER-typ eller överordnad typ.
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;/
Kodförklaring:
- Kodrad 1-9 : Skapa objekttypen 'emp_object' med 4 attribut och 3 medlemmar. Den innehåller definitionen av konstruktörer med endast tre parametrar. Det har förklarats som 'INTE FINAL' så det är föräldratyp.
Steg 2) Skapa SUB-typ under SUPER-typ.
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;/
Kodförklaring:
- Kodrad 10-13 : Skapa sub_emp_object som ärvtyp med ytterligare ett attribut 'default_manager' och medlemsförfarandedeklaration.
- Kodrad 14 : Skapa kroppen för den ärvda objekttypen.
- Kodrad 1 6 -21 : Definiera medlemsproceduren som infogar posterna i "emp" -tabellen med värdena från 'SUPER' objekttyp, med undantag för managervärde. För chefsvärde använder den 'default_manager' från 'SUB' -typ.
Steg 3) Skapa anonymt block för att ringa SUB-typen
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;/
Kodförklaring:
- Kodrad 25 : Deklarerar 'guru_emp_det' som 'sub_emp_object' typ.
- Kodrad 27 : Initiera objektet med den implicita konstruktorn. Konstruktören har 5 parametrar (4 attribut från PARENT-typ och 2 attribut från SUB-typ). Den sista parametern (1002) definierar värdet för attributet default_manager
- Kodrad 28 : Anropar medlemmen 'insert_default_mgr' för att infoga poster med standardhanterings-id skickat i konstruktören.
Jämställdhet mellan PL / SQL-objekt
Objektinstansen som tillhör samma objekt kan jämföras för jämlikhet. För detta måste vi ha den speciella metoden i objekttypen som kallas 'ORDER'-metoden.
Denna "ORDER" -metod ska vara den funktion som returnerar numerisk typ. Det krävs två parametrar som inmatning, (första parameter: id för självobjektinstansen, andra parameter: id för en annan objektinstans).
Id för de två objektinstanserna jämförs och resultatet returneras i numerisk.
- Positivt värde representerar att SELF-objektinstansen är större än en annan instans.
- Negativt värde representerar att SELF-objektinstansen är mindre än en annan instans.
- Noll representerar att SELF-objektinstansen är lika med en annan instans.
- Om någon av instanserna är null kommer denna funktion att returnera 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;… );/
Syntaxförklaring:
- Ovanstående syntax visar ORDER-funktionen som måste ingå i typkroppen för jämställdhetskontroll.
- Parametern för denna funktion ska vara en instans av samma objekttyp.
- Ovanstående funktion kan kallas "obj_instance_1.match (obj_instance_2)" och detta uttryck returnerar det numeriska värdet som visas, där obj_instance_1 och obj_instance_2 är förekomsten av object_type_name.
Exempel 1 : I följande exempel ska vi se hur man jämför två objekt. Vi ska skapa två instanser och vi kommer att jämföra attribut 'lön' mellan dem. Vi ska göra int två steg.
- Steg 1: Skapa objekttyp och kropp.
- Steg 2: Skapa det anonyma blocket för att ringa, jämför objektinstansen.
Steg 1) Skapa objekttyp och kropp.
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;/
Kodförklaring:
- Kodrad 1-4: Skapa objekttypen 'emp_object_equality' med 1 attribut och 1 medlem.
- Kodrad 6-16 : Definiera ORDER-funktionen som jämför attributet 'lön' för SELF-instans och parameterinstanstyp. Den returnerar negativ om SELF-lönen är lägre eller positiv om SELV-lönen är större och 0 om lönerna är lika.
Kodutgång:
Typ skapad
Steg 2) Skapa det anonyma blocket för att ringa jämför objektinstansen.
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;/
Produktion
Salary of second instance is greater
Kodförklaring:
- Kodrad 20 : Förklarar l_obj_1 av typen emp_object_equality.
- Kodrad 21 : Deklarerar l_obj_2 av typen emp_object_equality.
- Kodrad 23 : Initiera l_obj_1 med lönevärdet som '15000'
- Kodrad 24 : Initiera l_obj_1 med lönevärde som '17000'
- Kodrad 25-33 : Skriv ut meddelandet baserat på returnumret från ORDER-funktionen.
Sammanfattning
I det här kapitlet har vi sett objekttypen och deras egenskaper. Vi har också diskuterat om konstruktörer, medlemmar, attribut, arv och jämlikhet i PL / SQL-objekt.