Hvad er objekttype i PL / SQL?
Objektorienteret programmering er især velegnet til bygning af genanvendelige komponenter og komplekse applikationer. De er organiseret omkring "objekter" snarere end "handlinger", dvs. programmerne er designet til at arbejde og interagere med hele objektet snarere end den enkelte handling. Dette koncept giver programmøren mulighed for at udfylde og manipulere detaljerne på objektenhedsniveau.
Nedenstående billede viser et eksempel på den objekttype, hvor en bankkonto betragtes som en objektenhed. Objektattributterne inkluderer ting, der indeholder nogle attributværdier, for eksempel på bankkonto; det er kontonummer, banksaldo osv., mens objektmetoder beskriver ting som beregning af rentesats, generering af kontoudtog osv., som kræver, at en bestemt proces skal gennemføres.
I PL / SQL er objektorienteret programmering baseret på objekttyper.
En objekttype kan repræsentere enhver virkelighed. Vi vil diskutere flere objekttyper i dette kapitel.
I denne vejledning - du lærer,
- Komponenter af objekttyper
- Opret objekt i Oracle
- Erklæring Initialisering af objekttype
- Konstruktører
- Arv i objekttype
- Lighed med PL / SQL-objekter
Komponenter af objekttyper
PL / SQL-objekttype indeholder hovedsageligt to komponenter.
- Egenskaber
- Medlemmer / metoder
Egenskaber
Attributter er den kolonne eller det felt, hvor data er gemt. Hver attribut kortlægges til datatypen, der definerer bearbejdnings- og lagringstypen for den attribut. Attributten kan være af en hvilken som helst gyldig PL / SQL-datatype, eller den kan være af en anden objekttype.
Medlemmer / metoder
Medlemmer eller metoder er underprogrammer, der er defineret i objekttypen. De bruges ikke til at gemme nogen data. De bruges hovedsageligt til at definere proces inde i objekttypen. For eksempler på validering af data, før objekttypen udfyldes. De erklæres i afsnittet objekttype og defineres i objekttypens kropssektion af objekttypen. Kropssektion i objekttype er en valgfri del. Hvis der ikke er nogen medlemmer til stede, indeholder en objekttype ingen kropsdel.
Opret objekt i Oracle
En objekttype kan ikke oprettes på underprogramniveau, de kan kun oprettes på skemaniveau. Når objekttypen er defineret i skemaet, kan det samme bruges i underprogrammer. Objektypen kan oprettes ved hjælp af 'CREATE TYPE'. Typekroppen kan kun oprettes efter oprettelse af objekttypen.
CREATE TYPEAS OBJECT( ,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION] IS BEGIN END;… );/
Syntaks Forklaring:
- Ovenstående syntaks viser oprettelsen af 'OBJECT' med attributter og 'OBJECT-BODY' med metoder.
- Metoderne kan også overbelastes i objektlegemet.
Erklæring Initialisering af objekttype
Som andre komponenter i PL / SQL er det også nødvendigt at deklarere objekttyper, før de bruges i programmet.
Når objekttypen er oprettet, kan den bruges i underprogram deklarativ sektion til at erklære en variabel af den objekttype.
Hver gang en variabel erklæres i underprogrammet som objekttype, oprettes der ved kørsel en ny forekomst af objekttypen, og denne nyoprettede forekomst kan henvises til variabelnavnet. På denne måde kan en enkelt objekttype gemme flere værdier under forskellige forekomster.
DECLARE;BEGIN… END;/
Syntaks Forklaring:
- Ovenstående syntaks viser deklarationen af en variabel som en objekttype i det deklarative afsnit.
Når variablen er deklareret som en objekttype i et underprogram, vil den være atomisk nul, dvs. hele objektet i sig selv er et null. Det skal initialiseres med værdier for at bruge dem i programmet. De kan initialiseres ved hjælp af konstruktører.
Konstruktører er den implicitte metode til et objekt, der kan henvises med samme navn som objekttypen. Nedenstående syntaks viser initialiseringen af objekttypen.
DECLARE;BEGIN := ();END;/
Syntaks Forklaring:
- Ovenstående syntaks viser initialiseringen af objekttypeforekomsten med en nulværdi.
- Nu er selve objektet ikke nul, da det er blevet initialiseret, men attributterne inde i objektet vil være nul, da vi ikke har tildelt nogen værdier til disse attributter.
Konstruktører
Konstruktører er den implicitte metode til et objekt, der kan henvises med samme navn som objekttypen. Hver gang objektet henvises for første gang, kaldes denne konstruktiv implicit.
Vi kan også initialisere objekterne ved hjælp af disse konstruktører. Konstruktøren kan defineres eksplicit ved at definere medlemmet i objekttypekroppen med det samme navn på objekttypen.
Eksempel 1 : I det følgende eksempel skal vi bruge objekttypemedlemmet til at indsætte posten i emp-tabellen med værdier ('RRR', 1005, 20000, 1000) og ('PPP', 1006, 20000, 1001). Når dataene er indsat, skal vi vise det samme ved hjælp af objekttypemedlem. Vi vil også bruge den eksplicitte konstruktør til at udfylde manager-id'et som standard med 1001-værdi for den anden post.
Vi vil udføre det i nedenstående trin.
- Trin 1:
- Opret objekttype
- Objekt type krop
- Trin2: Oprettelse af en anonym blokering for at kalde oprettet objekttype gennem implicit konstruktør til emp_no 1005.
- Trin 3: Oprettelse af en anonym blokering for at kalde oprettet objekttype gennem eksplicit konstruktør til emp_no 1006.
Trin 1) Opret objekttype og objektteksttekst
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 : Oprettelse af objekttypen 'emp_object' med 4 attributter og 3 medlemmer. Den indeholder definitionen af konstruktører med kun 3 parametre. (Faktisk implicit konstruktør vil indeholde antallet af parametre svarende til antallet af attributter til stede i objekttypen)
- Kodelinje 10 : Oprettelse af typekroppen.
- Kodelinje 11-21 : Definition af den eksplicitte konstruktør. Tildeling af parameterværdien til attributterne og tildeling af værdien for attribut 'manager' med standardværdien '1001'.
- Kodelinje 22-26 : Definition af medlemmet 'insert_records', hvor attributværdierne indsættes i 'emp' -tabellen.
- Kodelinje 27-34 : Definition af medlemmet 'display_records', hvor visning af værdierne for objekttypeattributterne vises.
Produktion
Type oprettet
Skriv krop oprettet
Trin 2) Oprettelse af anonym blokering for at kalde oprettet objekttype gennem implicit konstruktør til 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 : Indsættelse af poster ved hjælp af den implicitte konstruktør. Opkald til konstruktør indeholder det faktiske antal attributværdier.
- Kodelinje 38 : Erklærer guru_emp_det som objekttype 'emp_object'.
- Kodelinje 41 : Erklæring 'guru_emp_det.display_records' kaldet 'diplay_records' medlemsfunktion og attributværdierne vises
- Kodelinje 42 : Erklæring 'guru_emp_det.insert_records' kaldet 'insert_records' medlemsfunktionen, og attributværdierne indsættes i tabellen.
Produktion
Medarbejdernavn: RRR
Medarbejdernummer: 1005
Løn: 20000
Manager: 1000
Trin 3) Oprettelse af anonym blokering for at kalde oprettet objekttype gennem eksplicit konstruktør til 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
Kode Forklaring:
- Kodelinje 46-53 : Indsættelse af poster ved hjælp af den eksplicitte konstruktør.
- Kodelinje 46 : Erklærer guru_emp_det som objekttype 'emp_object'.
- Kodelinje 50 : Erklæring 'guru_emp_det.display_records' kaldet 'display_records' medlemsfunktion, og attributværdierne vises
- Kodelinje 51 : Erklæring 'guru_emp_det.insert_records' kaldet 'insert_records' medlemsfunktionen, og attributværdierne indsættes i tabellen.
Arv i objekttype
Arveegenskab giver underobjektypen adgang til alle attributter og medlemmer af superobjektypen eller den overordnede objekttype.
Underobjektypen kaldes arvet objekttype, og superobjektypen kaldes overordnet objekttype. Nedenstående syntaks viser, hvordan man opretter en overordnet og arvet objekttype.
CREATE TYPEAS OBJECT( ,… )NOT FINAL;/
Syntaks Forklaring:
- Ovenstående syntaks viser oprettelsen af SUPER-typen.
CREATE TYPEUNDER ( ,.);/
Syntaks Forklaring:
- Ovenstående syntaks viser oprettelse af SUB-typen. Den indeholder alle medlemmer og attributter fra den overordnede objekttype.
Eksempel 1: I nedenstående eksempel skal vi bruge arveegenskaben til at indsætte posten med manager-id som '1002' for den følgende post ('RRR', 1007, 20000).
Vi vil udføre ovenstående program i de følgende trin
- Trin 1: Opret SUPER-type.
- Trin2: Opret SUB-type og brødtekst.
- Trin 3: Oprettelse af en anonym blokering for at ringe til SUB-typen.
Trin 1) Opret 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 : Oprettelse af objekttypen 'emp_object' med 4 attributter og 3 medlemmer. Den indeholder definitionen af konstruktører med kun 3 parametre. Det er blevet erklæret som 'IKKE FINAL', så det er overordnet type.
Trin 2) Opret 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 : Oprettelse af sub_emp_object som arvet type med yderligere en attribut 'default_manager' og erklæring om medlemsprocedure.
- Kodelinje 14 : Oprettelse af kroppen til den arvede objekttype.
- Kodelinje 1 6 -21 : Definition af medlemsproceduren, der indsætter posterne i "emp" -tabellen med værdierne fra 'SUPER' objekttype undtagen managerværdi. For managerværdi bruger den 'default_manager' fra 'SUB' -typen.
Trin 3) Oprettelse af anonym blokering for at ringe til 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æring om 'guru_emp_det' som 'sub_emp_object' type.
- Kodelinje 27 : Initialisering af objektet med den implicitte konstruktør. Konstruktøren har 5 parametre (4 attributter fra PARENT-typen og 2 attributter fra SUB-typen). Den sidste parameter (1002) definerer værdien for attribut default_manager
- Kodelinje 28 : Opkald til medlemmet 'insert_default_mgr' for at indsætte poster med standard manager-id sendt i konstruktøren.
Lighed med PL / SQL-objekter
Objektinstansen, der hører til de samme objekter, kan sammenlignes for lighed. Til dette skal vi have den specielle metode i objekttypen kaldet 'ORDER' -metoden.
Denne 'ORDER'-metode skal være den funktion, der returnerer numerisk type. Det tager to parametre som input, (første parameter: id for selvobjektinstansen, anden parameter: id for en anden objektforekomst).
Id'et for de to objektinstanser sammenlignes, og resultatet returneres i numerisk.
- Positiv værdi repræsenterer, at SELF-objektforekomsten er større end en anden forekomst.
- Negativ værdi repræsenterer, at SELF-objektforekomsten er mindre end en anden forekomst.
- Nul repræsenterer, at SELF-objektforekomsten er lig med en anden forekomst.
- Hvis nogen af forekomsterne er nul, returnerer denne funktion nul.
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:
- Ovennævnte syntaks viser den ORDER-funktion, der skal inkluderes i typeorganet for ligestillingskontrol.
- Parameteren for denne funktion skal være en forekomst af samme objekttype.
- Ovenstående funktion kan kaldes "obj_instance_1.match (obj_instance_2)", og dette udtryk returnerer den numeriske værdi som vist, hvor obj_instance_1 og obj_instance_2 er forekomsten af object_type_name.
Eksempel 1 : I det følgende eksempel skal vi se, hvordan man sammenligner to objekter. Vi opretter to forekomster, og vi sammenligner attribut 'løn' mellem dem. Vi vil gøre int to trin.
- Trin 1: Oprettelse af objekttype og krop.
- Trin 2: Oprettelse af den anonyme blok til opkald sammenlign objektforekomsten.
Trin 1) Oprettelse af objekttype og krop.
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: Oprettelse af objekttypen 'emp_object_equality' med 1 attributter og 1 medlem.
- Kodelinje 6-16 : Definition af ORDER-funktionen, der sammenligner 'løn' -attributten for SELF-forekomst og parameterinstanstype. Den returnerer negativ, hvis SELF-lønnen er mindre eller positiv, hvis SELF-lønnen er større, og 0, hvis lønnen er ens.
Kodeoutput:
Type oprettet
Trin 2) Oprettelse af den anonyme blok til opkald sammenlign 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;/
Produktion
Salary of second instance is greater
Kode Forklaring:
- Kodelinje 20 : Erklærer l_obj_1 af typen emp_object_equality.
- Kodelinje 21 : Erklærer l_obj_2 af typen emp_object_equality.
- Kodelinje 23 : Initialisering af l_obj_1 med lønværdi som '15000'
- Kodelinje 24 : Initialisering af l_obj_1 med lønværdi som '17000'
- Kodelinje 25-33 : Udskriv meddelelsen baseret på returnummeret fra ORDER-funktionen.
Resumé
I dette kapitel har vi set objekttypen og deres egenskaber. Vi har også diskuteret om konstruktører, medlemmer, attributter, arv og ligestilling i PL / SQL-objekter.