Oracle PL / SQL objekttyper opplæring med EKSEMPLER

Innholdsfortegnelse:

Anonim

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.

  1. Attributter
  2. 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 TYPE AS OBJECT(,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION]ISBEGINEND;‭… ‬);/

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 TYPE  AS 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.