Oracle PL / SQL -kohdetyyppien opetusohjelma ESIMERKEJÄ

Sisällysluettelo:

Anonim

Mikä on objektityyppi PL / SQL: ssä?

Kohdesuuntautunut ohjelmointi soveltuu erityisesti uudelleenkäytettävien komponenttien ja monimutkaisten sovellusten rakentamiseen. Ne on järjestetty "esineiden" eikä "toimintojen" ympärille, ts. Ohjelmat on suunniteltu toimimaan ja vuorovaikutuksessa koko objektin eikä yksittäisen toiminnan kanssa. Tämän käsitteen avulla ohjelmoija voi täyttää ja manipuloida yksityiskohtia objektikokonaisuuksien tasolla.

Alla oleva kuva kuvaa esimerkkiä objektityypistä, jossa pankkitiliä pidetään objektikokonaisuutena. Objektimääritteet sisältävät asioita, joilla on joitain määritearvoja, esimerkiksi pankkitilillä; se on tilin numero, pankkitase jne., kun taas objektimenetelmät kuvaavat esimerkiksi korkojen laskemista, tiliotteiden luomista jne., mikä edellyttää tietyn prosessin suorittamista.

PL / SQL: ssä olio-ohjelmointi perustuu objektityyppeihin.

Kohdetyyppi voi edustaa mitä tahansa reaalimaailman kokonaisuutta. Aiomme keskustella lisää objektityyppejä tässä luvussa.

Tässä opetusohjelmassa - opit,

  • Kohdetyyppien komponentit
  • Luo objekti Oraclessa
  • Julistus objektityypin alustaminen
  • Rakentajat
  • Perintö objektityypissä
  • PL / SQL-objektien tasa-arvo

Kohdetyyppien komponentit

PL / SQL-objektityyppi sisältää pääasiassa kaksi komponenttia.

  1. Määritteet
  2. Jäsenet / menetelmät

Määritteet

Attribuutit ovat sarake tai kenttä, johon tiedot on tallennettu. Jokainen attribuutti kartoitetaan tietotyyppiin, joka määrittelee kyseisen attribuutin käsittely- ja tallennustyypin. Attribuutti voi olla mikä tahansa kelvollinen PL / SQL-tietotyyppi tai se voi olla muun tyyppinen objekti.

Jäsenet / menetelmät

Jäsenet tai menetelmät ovat aliohjelmia, jotka on määritelty objektityypissä. Niitä ei käytetä tietojen tallentamiseen. Niitä käytetään pääasiassa prosessin määrittelemiseen objektityypin sisällä. Esimerkkejä tietojen vahvistamisesta ennen objektityypin täyttämistä. Ne ilmoitetaan objektityyppi-osassa ja määritellään objektityypin objektityypin runko-osassa. Kohdetyypin runko-osa on valinnainen osa. Jos yhtään jäsentä ei ole läsnä, objektityyppi ei sisällä ruumiinosia.

Luo objekti Oraclessa

Objektityyppiä ei voida luoda alaohjelmatasolla, vaan ne voidaan luoda vain skeematasolla. Kun objektityyppi on määritelty skeemassa, sitä voidaan käyttää aliohjelmissa. Objektityyppi voidaan luoda käyttämällä 'CREATE TYPE'. Tyyppirunko voidaan luoda vasta sen objektityypin luomisen jälkeen.

CREATE TYPE AS OBJECT(,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION]ISBEGINEND;‭… ‬);/

Syntaksi Selitys:

  • Yllä oleva syntaksi osoittaa OBJECTin luomisen attribuuteilla ja OBJECT-BODY menetelmien avulla.
  • Menetelmät voidaan myös ylikuormittaa objektirungossa.

Julistus objektityypin alustaminen

Kuten muutkin PL / SQL-komponentit, myös objektityypit on ilmoitettava ennen niiden käyttöä ohjelmassa.

Kun objektityyppi on luotu, sitä voidaan käyttää aliohjelman deklaratiivisessa osassa kyseisen objektityypin muuttujan ilmoittamiseksi.

Aina kun mikä tahansa muuttuja ilmoitetaan aliohjelmassa objektityypinä, ajon aikana uusi objektityypin ilmentymä luodaan, ja tähän äskettäin luotuun ilmentymään voidaan viitata muuttujan nimeen. Tällä tavoin yksi objektityyppi voi tallentaa useita arvoja eri ilmentymiin.

DECLARE ;BEGIN… END;/

Syntaksi Selitys:

  • Yllä oleva syntakse näyttää muuttujan ilmoituksen objektityypinä deklaratiivisessa osiossa.

Kun muuttuja on ilmoitettu objektityypiksi alaohjelmassa, se on atomisesti nolla eli koko objekti itse nolla. Se on alustettava arvoilla, jotta niitä voidaan käyttää ohjelmassa. Ne voidaan alustaa rakentajilla.

Rakentajat ovat implisiittinen menetelmä objektille, johon voidaan viitata samalla nimellä kuin objektityypillä. Seuraava syntaksi näyttää objektityypin alustuksen.

DECLARE ;BEGIN:=();END;/

Syntaksi Selitys:

  • Yllä oleva syntaksi näyttää objektityypin ilmentymän alustamisen nolla-arvolla.
  • Nyt objekti ei itse ole tyhjä, koska se on alustettu, mutta objektin sisällä olevat määritteet ovat nollia, koska emme ole määrittäneet mitään arvoja näille määritteille.

Rakentajat

Rakentajat ovat implisiittinen menetelmä objektille, johon voidaan viitata samalla nimellä kuin objektityypillä. Aina kun objektille viitataan ensimmäistä kertaa, tätä konstruktoria kutsutaan implisiittisesti.

Voimme myös alustaa objektit näiden konstruktorien avulla. Konstruktori voidaan määritellä nimenomaisesti määrittelemällä jäsen objektityypin rungossa samalla objektityypin nimellä.

Esimerkki 1 : Seuraavassa esimerkissä aiotaan käyttää objektityypin jäsentä lisäämään tietue emp-taulukkoon, jossa on arvot ('RRR', 1005, 20000, 1000) ja ('PPP', 1006, 20000, 1001). Kun tiedot on lisätty, näytämme saman käyttämällä objektityypin jäsentä. Aiomme myös käyttää nimenomaista rakentajaa täyttämään manageritunnus oletusarvoisesti 1001-arvolla toiselle tietueelle.

Suoritamme sen alla olevissa vaiheissa.

  • Vaihe 1:
    • Luo objektityyppi
    • Kohteen tyypin runko
  • Vaihe 2: Luo anonyymi lohko, joka soittaa luodun objektityypin implisiittisen konstruktorin avulla emp_no 1005: lle.
  • Vaihe 3: Luo anonyymi lohko kutsua luotua objektityyppiä eksplisiittisen konstruktorin avulla emp_no 1006: lle.

Vaihe 1) Luo objektityyppi ja objektityypin runko

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:/

Koodin selitys

  • Koodirivi 1-9 : 'Emp_object' -kohdetyypin luominen 4 attribuutilla ja 3 jäsenellä. Se sisältää rakentajien määritelmän, jossa on vain 3 parametria. (Todellinen implisiittinen konstruktori sisältää parametrien lukumäärän, joka on yhtä suuri kuin objektityypissä olevien määritteiden määrä)
  • Koodirivi 10 : Tyyppirungon luominen.
  • Koodirivi 11-21 : Määritetään eksplisiittinen konstruktori. Määritetään parametrin arvo määritteille ja määritetään attribuutin 'manager' arvo oletusarvolle '1001'.
  • Koodirivi 22-26 : Määritetään jäsen 'insert_records', johon attribuuttien arvot lisätään emp-taulukkoon.
  • Koodirivi 27-34 : Määritetään jäsen 'display_records', joka näyttää objektityypin attribuuttien arvot.

Tuotos

Tyyppi luotu

Tyyppi runko luotu

Vaihe 2) Luo anonyymi lohko, joka kutsuu luotua objektityyppiä implisiittisen konstruktorin avulla emp_no 1005: lle

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;

Koodin selitys

  • Koodirivi 37-45 : Lisätään tietueet implisiittisen konstruktorin avulla. Kutsu konstruktorille sisältää todellisen määritearvojen määrän.
  • Koodirivi 38 : Ilmoittaa guru_emp_det-objektin tyypiksi 'emp_object'.
  • Koodirivi 41 : Lauseke 'guru_emp_det.display_records', jota kutsutaan diplay_records-jäsenfunktioksi, ja attribuuttien arvot näytetään
  • Koodirivi 42 : Lauseke 'guru_emp_det.insert_records', jota kutsutaan 'insert_records' -jäsenfunktioksi, ja attribuuttien arvot lisätään taulukkoon.

Tuotos

Työntekijän nimi: RRR

Työntekijänumero: 1005

Palkka: 20000

Manager: 1000

Vaihe 3) Luo anonyymi lohko kutsua luotua objektityyppiä nimenomaisen konstruktorin avulla emp_no 1006: lle

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;/

Tuotos

Employee Name:PPPEmployee Number:1006Salary:20000Manager:1001

Koodin selitys:

  • Koodirivi 46-53 : Tietueiden lisääminen eksplisiittisen konstruktorin avulla.
  • Koodirivi 46 : julistaa guru_emp_det-objektin tyypiksi 'emp_object'.
  • Koodirivi 50 : Lauseke 'guru_emp_det.display_records' kutsutaan 'display_records' -jäsenfunktioksi ja attribuuttien arvot näytetään
  • Koodirivi 51 : Lauseke 'guru_emp_det.insert_records', jota kutsutaan 'insert_records' -jäsenfunktioksi, ja attribuuttien arvot lisätään taulukkoon.

Perintö objektityypissä

Perintöominaisuuden avulla alaobjektityyppi voi käyttää kaikkia superkohdetyypin tai pääobjektityypin attribuutteja ja jäseniä.

Alaobjektin tyyppiä kutsutaan perinnökohteen tyypiksi ja superobjektityyppiä kutsutaan pääobjektityypiksi. Seuraava syntaksi näyttää, miten luodaan vanhempi ja peritty objektityyppi.

CREATE TYPE  AS OBJECT(,… )NOT FINAL;/

Syntaksi Selitys:

  • Yllä oleva syntakse osoittaa SUPER-tyypin luomisen.
CREATE TYPEUNDER(,.);/

Syntaksi Selitys:

  • Yllä oleva syntaksi osoittaa SUB-tyypin luomisen. Se sisältää kaikki ylätason objektityypin jäsenet ja määritteet.

Esimerkki 1: Seuraavassa esimerkissä aiomme käyttää perintöominaisuutta lisäämään tietue, jonka hallinnoijan tunnus on '1002' seuraavaan tietueeseen ('RRR', 1007, 20000).

Suoritamme yllä olevan ohjelman seuraavissa vaiheissa

  • Vaihe 1: Luo SUPER-tyyppi.
  • Vaihe 2: Luo SUB-tyyppi ja runko.
  • Vaihe 3: Anonyymin lohkon luominen SUB-tyypin kutsumiseksi.

Vaihe 1) Luo SUPER- tai Parent-tyyppi.

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;/

Koodin selitys:

  • Koodirivi 1-9 : 'Emp_object' -kohdetyypin luominen 4 attribuutilla ja 3 jäsenellä. Se sisältää rakentajien määritelmän, jossa on vain 3 parametria. Se on julistettu '' EI LOPULLISEKSI '', joten se on emotyyppi.

Vaihe 2) Luo SUB-tyyppi SUPER-tyypin alle.

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;/

Koodin selitys:

  • Koodirivi 10-13 : Sub_emp_object-objektin luominen peritytyypiksi yhdellä lisämääritteellä 'default_manager' ja jäsenproseduurin ilmoituksella.
  • Koodirivi 14 : Rungon luominen peritylle objektityypille.
  • Koodi linjan 1 6 -21 : Määrittely jäsenen menettely on kuin tietueet syöttämistä "EMP" pöydän arvot 'SUPER' objektin tyyppi, paitsi johtaja arvoa. Hallinnoijan arvoksi se käyttää tyyppiä 'default_manager' SUB-tyypistä.

Vaihe 3) Luo anonyymi lohko SUB-tyypin kutsumiseksi

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;/

Koodin selitys:

  • Koodirivi 25 : Ilmoitetaan 'guru_emp_det' tyypiksi 'sub_emp_object'.
  • Koodirivi 27 : Objektin alustaminen implisiittisellä konstruktorilla. Rakentajalla on 5 parametria (4 attribuuttia PARENT-tyypistä ja 2 attribuuttia SUB-tyypistä). Viimeinen parametri (1002) määrittää default_manager-määritteen arvon
  • Koodirivi 28 : Soitetaan jäsenelle 'insert_default_mgr' lisäämään tietueet, joiden oletushallintatunnus on välitetty konstruktorissa.

PL / SQL-objektien tasa-arvo

Samoihin objekteihin kuuluvaa objektiinstanssia voidaan verrata tasa-arvoon. Tätä varten meillä on oltava erityinen menetelmä objektityypissä nimeltä ORDER-menetelmä.

Tämän ORDER-menetelmän tulisi olla funktio, joka palauttaa numeerisen tyypin. Se vie kaksi parametria syötteeksi (ensimmäinen parametri: itseobjektin ilmentymän tunnus, toinen parametri: toisen objektin esiintymän tunnus).

Kahden objektin esiintymän tunnusta verrataan ja tulos palautetaan numeerisena.

  • Positiivinen arvo tarkoittaa, että SELF-objekti-ilmentymä on suurempi kuin toinen esiintymä.
  • Negatiivinen arvo tarkoittaa, että SELF-objektin esiintymä on pienempi kuin toinen esiintymä.
  • Nolla tarkoittaa, että SELF-objekti-ilmentymä on yhtä suuri kuin toinen esiintymä.
  • Jos jokin instansseista on nolla, tämä toiminto palauttaa nollan.
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;… );/

Syntaksi Selitys:

  • Yllä oleva syntaksi näyttää ORDER-toiminnon, joka on sisällytettävä tyyppirunkoon tasa-arvon tarkistamiseksi.
  • Tämän toiminnon parametrin tulisi olla saman objektityypin esiintymä.
  • Yllä olevaa funktiota voidaan kutsua nimellä "obj_instance_1.match (obj_instance_2)", ja tämä lauseke palauttaa numeerisen arvon, kuten on esitetty, missä obj_instance_1 ja obj_instance_2 ovat objektin_tyypin_nimi.

Esimerkki 1 : Seuraavassa esimerkissä tarkastellaan kahden objektin vertailua. Aiomme luoda kaksi instanssia ja vertaamme niiden välistä attribuutti 'palkka'. Aiomme tehdä kahdessa vaiheessa.

  • Vaihe 1: Objektin tyypin ja rungon luominen.
  • Vaihe 2: Luo anonyymi lohko soittaaksesi objektin esiintymän vertailua.

Vaihe 1) Luo objektityyppi ja runko.

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;/

Koodin selitys:

  • Koodirivi 1-4: 'Emp_object_equality' -kohdetyypin luominen yhdellä attribuutilla ja yhdellä jäsenellä.
  • Koodirivi 6-16 : Määritetään ORDER-toiminto, joka vertaa SELF-ilmentymän ja parametri-ilmentymän tyypin 'palkka' attribuuttia. Se palauttaa negatiiviseksi, jos SELF-palkka on pienempi tai positiivinen, jos SELF-palkka on suurempi, ja 0, jos palkat ovat samat.

Koodilähtö:

Tyyppi luotu

Vaihe 2) Luo anonyymi lohko soittaaksesi objektin esiintymää.

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;/

Tuotos

Salary of second instance is greater

Koodin selitys:

  • Koodirivi 20 : Ilmoitetaan emp_object_equality-tyypin l_obj_1.
  • Koodirivi 21 : Ilmoitetaan emp_object_equality-tyypin l_obj_2.
  • Koodirivi 23 : Alustetaan l_obj_1 palkan arvolla '15000'
  • Koodirivi 24 : Alustetaan l_obj_1 palkan arvolla '17000'
  • Koodirivi 25-33 : Tulosta viesti ORDER-toiminnon palautusnumeron perusteella.

Yhteenveto

Tässä luvussa olemme nähneet kohdetyypin ja niiden ominaisuudet. Olemme keskustelleet myös PL / SQL-objektien rakentajista, jäsenistä, attribuuteista, perinnöstä ja tasa-arvosta.