Hva er objekttype i PL / SQL?
Objektorientert programmering er spesielt egnet for å bygge gjenbrukbare komponenter og komplekse applikasjoner. De er organisert rundt "objekter" i stedet for "handlinger", dvs. programmene er designet for å fungere og samhandle med hele objektet i stedet for den eneste handlingen. Dette konseptet lar programmereren fylle ut og manipulere detaljene på objektnivånivå.
Bildet nedenfor viser et eksempel på objekttypen der en bankkonto regnes som en objektenhet. Objektattributtene inkluderer ting som inneholder noen attributtverdier, for eksempel i bankkonto; det er kontonummer, banksaldo osv. mens objektmetoder beskriver ting som å beregne renten, generere kontoutskrift osv. som krever at en viss prosess skal fullføres.
I PL / SQL er objektorientert programmering basert på objekttyper.
En objekttype kan representere en hvilken som helst virkelig enhet. Vi skal diskutere flere objekttyper i dette kapittelet.
I denne veiledningen - vil du lære,
- Komponenter av objekttyper
- Lag objekt i Oracle
- Erklæring Initialisering av objekttype
- Konstruktører
- Arv i objekttype
- Likhet mellom PL / SQL-objekter
Komponenter av objekttyper
PL / SQL objekttype inneholder hovedsakelig to komponenter.
- Attributter
- Medlemmer / Metoder
Attributter
Attributter er kolonnen eller feltet der data lagres. Hvert attributt blir kartlagt til datatypen som definerer prosesserings- og lagringstypen for det attributtet. Attributtet kan ha en hvilken som helst gyldig PL / SQL-datatype, eller det kan være av en annen objekttype.
Medlemmer / Metoder
Medlemmer eller metoder er underprogrammer som er definert i objekttypen. De brukes ikke til å lagre data. De brukes hovedsakelig til å definere prosess inne i objekttypen. For eksempler på validering av data før objekttypen fylles ut. De er erklært i objekttypeseksjonen og definert i objekttypens kroppsdel av objekttypen. Kroppsseksjon i objekttype er en valgfri del. Hvis ingen medlemmer er til stede, vil en objekttype ikke inneholde noen kroppsdel.
Lag objekt i Oracle
En objekttype kan ikke opprettes på underprogramnivå, de kan bare opprettes på skjemanivå. Når objekttypen er definert i skjemaet, kan det samme brukes i underprogrammer. Objekttypen kan opprettes ved hjelp av 'CREATE TYPE'. Type kroppen kan bare opprettes etter at den har opprettet objekttypen.
CREATE TYPEAS OBJECT( ,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION] IS BEGIN END;… );/
Syntaks Forklaring:
- Ovennevnte syntaks viser etableringen av 'OBJECT' med attributter og 'OBJECT-BODY' med metoder.
- Metodene kan også overbelastes i objektlegemet.
Erklæring Initialisering av objekttype
Som andre komponenter i PL / SQL, er det også nødvendig å deklarere objekttyper før de brukes i programmet.
Når objekttypen er opprettet, kan den brukes i underprogramerklæringsdelen for å erklære en variabel av den objekttypen.
Hver gang en variabel blir deklarert i underprogrammet som objekttype, vil det under kjøretid opprettes en ny forekomst av objekttypen, og denne nyopprettede forekomsten kan henvises til variabelnavnet. På denne måten kan en enkelt objekttype lagre flere verdier under forskjellige forekomster.
DECLARE;BEGIN… END;/
Syntaks Forklaring:
- Syntaksen ovenfor viser deklarasjonen av en variabel som objekttype i den deklarative delen.
Når variabelen er deklarert som en objekttype i et underprogram, vil den være atomisk null, dvs. hele objektet i seg selv er et null. Det må initialiseres med verdier for å bruke dem i programmet. De kan initialiseres ved hjelp av konstruktører.
Konstruktører er den implisitte metoden til et objekt som kan henvises med samme navn som objekttypen. Syntaksen nedenfor viser initialiseringen av objekttypen.
DECLARE;BEGIN := ();END;/
Syntaks Forklaring:
- Ovennevnte syntaks viser initialiseringen av objekttypeforekomsten med en nullverdi.
- Nå er ikke selve objektet null som det ble initialisert, men attributtene inne i objektet vil være null da vi ikke har tildelt noen verdier til disse attributtene.
Konstruktører
Konstruktører er den implisitte metoden til et objekt som kan henvises med samme navn som objekttypen. Hver gang objektet blir henvist for første gang, vil denne konstruktøren kalles implisitt.
Vi kan også initialisere objektene ved hjelp av disse konstruktøren. Konstruktøren kan defineres eksplisitt ved å definere medlemmet i objekttypekroppen med samme navn på objekttypen.
Eksempel 1 : I det følgende eksemplet skal vi bruke objekttypemedlemmet til å sette inn posten i emp-tabellen med verdier ('RRR', 1005, 20000, 1000) og ('PPP', 1006, 20000, 1001). Når dataene er satt inn, skal vi vise det samme ved hjelp av objekttypemedlem. Vi skal også bruke den eksplisitte konstruktøren til å fylle ut leder-ID som standard med 1001-verdi for den andre posten.
Vi skal utføre det i trinnene nedenfor.
- Trinn 1:
- Lag objekttype
- Objekt type kropp
- Trinn 2: Opprette en anonym blokk for å ringe opprettet objekttype gjennom implisitt konstruktør for emp_no 1005.
- Steg 3: Opprette en anonym blokk for å ringe til opprettet objekttype gjennom eksplisitt konstruktør for emp_no 1006.
Trinn 1) Lag objekttype og objekttype-brødtekst
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:/
Kode Forklaring
- Kodelinje 1-9 : Opprette objekttypen 'emp_object' med 4 attributter og 3 medlemmer. Den inneholder definisjonen av konstruktører med bare 3 parametere. (Faktisk implisitt konstruktør vil inneholde antall parametere som er like antall attributter som er tilstede i objekttypen)
- Kodelinje 10 : Opprette typekroppen.
- Kodelinje 11-21 : Definere den eksplisitte konstruktøren. Tilordne parameterverdien til attributtene og tilordne verdien for attributt 'manager' med standardverdien '1001'.
- Kodelinje 22-26 : Definere medlemmet 'insert_records' der attributtverdiene settes inn i 'emp' -tabellen.
- Kodelinje 27-34 : Definere medlemmet 'display_records' som viser verdiene til objekttypeattributtene.
Produksjon
Type opprettet
Type kropp opprettet
Trinn 2) Opprette anonym blokk for å ringe opprettet objekttype gjennom implisitt konstruktør for 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;
Kode Forklaring
- Kodelinje 37-45 : Sette inn postene ved hjelp av den implisitte konstruktøren. Call to constructor inneholder det faktiske antallet attributtverdier.
- Kodelinje 38 : Erklærer guru_emp_det som objekttype 'emp_object'.
- Kodelinje 41 : Uttalelse 'guru_emp_det.display_records' kalt 'diplay_records' medlemsfunksjon og attributtverdiene vises
- Kodelinje 42 : Uttalelse 'guru_emp_det.insert_records' kalt 'insert_records' medlemsfunksjon og attributtverdiene settes inn i tabellen.
Produksjon
Ansattes navn: RRR
Ansatt nummer: 1005
Lønn: 20000
Leder: 1000
Trinn 3) Opprette anonym blokk for å ringe opprettet objekttype gjennom eksplisitt konstruktør for 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;/
Produksjon
Employee Name:PPPEmployee Number:1006Salary:20000Manager:1001
Kode Forklaring:
- Kodelinje 46-53 : Sette inn postene ved hjelp av den eksplisitte konstruktøren.
- Kodelinje 46 : Erklærer guru_emp_det som objekttype 'emp_object'.
- Kodelinje 50 : Uttalelse 'guru_emp_det.display_records' kalt 'display_records' medlemsfunksjon og attributtverdiene vises
- Kodelinje 51 : Uttalelse 'guru_emp_det.insert_records' kalt medlemsfunksjonen 'insert_records' og attributtverdiene settes inn i tabellen.
Arv i objekttype
Arvegenskap gir underobjektypen tilgang til alle attributtet og medlemmene av superobjektypen eller den overordnede objekttypen.
Underobjektypen kalles arvet objekttype, og superobjektypen kalles overordnet objekttype. Syntaksen nedenfor viser hvordan du oppretter en overordnet og arvet objekttype.
CREATE TYPEAS OBJECT( ,… )NOT FINAL;/
Syntaks Forklaring:
- Ovennevnte syntaks viser opprettelsen av SUPER-typen.
CREATE TYPEUNDER ( ,.);/
Syntaks Forklaring:
- Syntaksen ovenfor viser oppretting av SUB-typen. Den inneholder alle medlemmene og attributtene fra den overordnede objekttypen.
Eksempel1: I eksemplet nedenfor skal vi bruke arveegenskapen til å sette inn posten med manager-ID som '1002' for følgende post ('RRR', 1007, 20000).
Vi skal kjøre programmet ovenfor i følgende trinn
- Trinn 1: Opprett SUPER-type.
- Trinn 2: Opprett SUB-type og brødtekst.
- Trinn 3: Opprette en anonym blokk for å ringe SUB-typen.
Trinn 1) Opprett SUPER-type eller overordnet type.
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;/
Kode Forklaring:
- Kodelinje 1-9 : Opprette objekttypen 'emp_object' med 4 attributter og 3 medlemmer. Den inneholder definisjonen av konstruktører med bare 3 parametere. Det er blitt erklært som 'IKKE FINAL', så det er foreldretype.
Trinn 2) Opprett SUB-type under SUPER-type.
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;/
Kode Forklaring:
- Kodelinje 10-13 : Opprette sub_emp_object som arvet type med ytterligere ett attributt 'default_manager' og erklæring om medlemsprosedyre.
- Kodelinje 14 : Opprette kroppen for den arvede objekttypen.
- Kodelinje 1 6 -21 : Definere medlemsprosedyren som setter inn postene i "emp" -tabellen med verdiene fra 'SUPER' objekttype, bortsett fra lederverdi. For lederverdi bruker den 'default_manager' fra 'SUB' -typen.
Trinn 3) Opprette anonym blokk for å ringe 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;/
Kode Forklaring:
- Kodelinje 25 : Erklærer 'guru_emp_det' som 'sub_emp_object' type.
- Kodelinje 27 : Initialisering av objektet med den implisitte konstruktøren. Konstruktøren har 5 parametere (4 attributter fra PARENT-typen og 2 attributter fra SUB-typen). Den siste parameteren (1002) definerer verdien for attributtet default_manager
- Kodelinje 28 : Kaller medlemmet 'insert_default_mgr' for å sette inn postene med standard manager-ID sendt i konstruktøren.
Likhet mellom PL / SQL-objekter
Objektforekomsten som tilhører de samme objektene kan sammenlignes for likhet. For dette må vi ha den spesielle metoden i objekttypen kalt 'ORDER' -metoden.
Denne 'BESTILL' -metoden skal være funksjonen som returnerer numerisk type. Det tar to parametere som inngang, (første parameter: id for selvobjektforekomsten, andre parameter: id for en annen objektforekomst).
IDen til de to objektforekomstene sammenlignes, og resultatet returneres i numerisk.
- Positiv verdi representerer at SELF-objektforekomsten er større enn en annen forekomst.
- Negativ verdi representerer at SELF-objektforekomsten er mindre enn en annen forekomst.
- Null representerer at SELF-objektforekomsten er lik en annen forekomst.
- Hvis noen av forekomsten er null, vil denne funksjonen returnere 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;… );/
Syntaks Forklaring:
- Ovennevnte syntaks viser ORDER-funksjonen som må inkluderes i typen kroppen for likhetskontroll.
- Parameteren for denne funksjonen skal være en forekomst av samme objekttype.
- Ovennevnte funksjon kan kalles "obj_instance_1.match (obj_instance_2)", og dette uttrykket vil returnere den numeriske verdien som vist, der obj_instance_1 og obj_instance_2 er forekomsten av object_type_name.
Eksempel1 : I det følgende eksemplet skal vi se hvordan vi kan sammenligne to objekter. Vi skal lage to forekomster, og vi skal sammenligne attributtlønn mellom dem. Vi skal gjøre int to trinn.
- Trinn 1: Opprette objekttype og kropp.
- Trinn 2: Opprette den anonyme blokken for å ringe sammenligne objektforekomsten.
Trinn 1) Opprette objekttype og 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;/
Kode Forklaring:
- Kodelinje 1-4: Opprette objekttypen 'emp_object_equality' med 1 attributter og 1 medlem.
- Kodelinje 6-16 : Definere ORDER-funksjonen som sammenligner attributtet 'lønn' for SELF-forekomst og parameterforekomsttype. Den returnerer negativ hvis SELF-lønn er mindre eller positiv hvis SELF-lønn er større og 0 hvis lønn er lik.
Kodeutgang:
Type opprettet
Trinn 2) Opprette den anonyme blokken for å ringe sammenligne objektforekomsten.
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;/
Produksjon
Salary of second instance is greater
Kode Forklaring:
- Kodelinje 20 : Deklarerer l_obj_1 av typen emp_object_equality.
- Kodelinje 21 : Erklærer l_obj_2 av emp_object_equality-typen.
- Kodelinje 23 : Initialiserer l_obj_1 med lønnsverdi som '15000'
- Kodelinje 24 : Initialiserer l_obj_1 med lønnsverdi som '17000'
- Kodelinje 25-33 : Skriv ut meldingen basert på returnummeret fra ORDER-funksjonen.
Sammendrag
I dette kapittelet har vi sett objekttypen og deres egenskaper. Vi har også diskutert om konstruktører, medlemmer, attributter, arv og likhet i PL / SQL-objekter.