Oracle PL / SQL -paketti: tyyppi, määrittely, runko (esimerkki)

Sisällysluettelo:

Anonim

Mikä on Oraclen paketti?

PL / SQL-paketti on asiaan liittyvän alaohjelman (menettely / toiminto) looginen ryhmittely yhdeksi elementiksi. Paketti kootaan ja tallennetaan tietokantaobjektiksi, jota voidaan käyttää myöhemmin.

Tässä opetusohjelmassa opit-

  • Pakettien komponentit
  • Pakkaustiedot
  • Pakkauksen runko
  • Pakkauselementtien viittaaminen
  • Luo paketti PL / SQL: ssä
  • Välitetyt ilmoitukset
  • Kohdistimien käyttö paketissa
  • Ylikuormitus
  • Riippuvuus paketeista
  • Paketin tiedot
  • UTL-TIEDOSTO - Yleiskatsaus

Pakettien komponentit

PL / SQL-paketissa on kaksi komponenttia.

  • Pakkaustiedot
  • Pakkauksen runko

Pakkaustiedot

Pakettimääritys koostuu kaikkien julkisten muuttujien, kohdistinten, objektien, menettelyjen, toimintojen ja poikkeusten ilmoituksesta.

Seuraavassa on muutamia pakettimäärityksen ominaisuuksia.

  • Kaikki spesifikaatiossa ilmoitetut elementit ovat käytettävissä paketin ulkopuolelta. Tällaiset elementit tunnetaan julkisena elementtinä.
  • Pakettimääritys on erillinen elementti, mikä tarkoittaa, että se voi olla olemassa yksin ilman paketin runkoa.
  • Aina kun paketti on viitannut, paketti luodaan kyseiselle istunnolle.
  • Kun ilmentymä on luotu istuntoa varten, kaikki kyseisessä ilmentymässä aloitetut pakettielementit ovat voimassa istunnon loppuun saakka.

Syntaksi

CREATE [OR REPLACE] PACKAGE 
IS… END 

Yllä oleva syntaksi osoittaa pakettimäärityksen luomisen.

Pakkauksen runko

Se koostuu kaikkien pakettimäärityksessä olevien elementtien määrittelystä. Sillä voi olla myös määritelmä elementeistä, joita ei ilmoiteta määrittelyssä, näitä elementtejä kutsutaan yksityisiksi elementeiksi ja niitä voidaan kutsua vain paketin sisältä.

Alla on paketin rungon ominaisuudet.

  • Sen tulisi sisältää määritelmät kaikille aliohjelmille / kursoreille, jotka on ilmoitettu spesifikaatiossa.
  • Sillä voi olla myös enemmän aliohjelmia tai muita elementtejä, joita ei ilmoiteta määrittelyssä. Näitä kutsutaan yksityisiksi elementeiksi.
  • Se on luotettava objekti ja se riippuu pakettimäärityksistä.
  • Pakettirungon tila muuttuu virheelliseksi aina, kun spesifikaatio käännetään. Siksi se on käännettävä uudelleen joka kerta spesifikaation laatimisen jälkeen.
  • Yksityiset elementit tulisi määritellä ensin, ennen kuin niitä käytetään paketin rungossa.
  • Paketin ensimmäinen osa on yleinen ilmoitusosa. Tämä sisältää muuttujia, kohdistimia ja yksityisiä elementtejä (välitön ilmoitus), jotka näkyvät koko paketille.
  • Paketin viimeinen osa on Paketin alustusosa, joka suoritetaan kerran aina, kun pakettiin viitataan ensimmäistä kertaa istunnossa.

Syntaksi:

CREATE [OR REPLACE] PACKAGE BODY 
IS.END 
  • Yllä oleva syntaksi osoittaa paketin rungon luomisen.

Nyt aiomme nähdä, miten pakettielementit viittaavat ohjelmaan.

Pakkauselementtien viittaaminen

Kun elementit on ilmoitettu ja määritelty paketissa, meidän on viitattava elementteihin niiden käyttämiseksi.

Kaikkiin paketin julkisiin elementteihin voidaan viitata kutsumalla paketin nimi ja sen jälkeen pisteellä erotettu elementin nimi, eli " .

Paketin julkista muuttujaa voidaan myös käyttää samalla tavalla arvojen määrittämiseen ja hakemiseen niistä, eli " . ".

Luo paketti PL / SQL: ssä

PL / SQL: ssä aina, kun paketti viitataan / kutsutaan istunnossa, kyseiselle paketille luodaan uusi ilmentymä.

Oracle tarjoaa mahdollisuuden alustaa pakettielementit tai suorittaa mitä tahansa toimintoa tämän ilmentymän luontihetkellä 'Paketin alustus'.

Tämä ei ole muuta kuin suorituslohko, joka kirjoitetaan paketin runkoon kaikkien pakettielementtien määrittelyn jälkeen. Tämä lohko suoritetaan aina, kun paketti lähetetään ensimmäistä kertaa istunnossa.

Syntaksi

CREATE [OR REPLACE] PACKAGE BODY 
IS.BEGINEEND 
  • Yllä oleva syntaksi näyttää paketin alustamisen määritelmän paketin rungossa.

Välitetyt ilmoitukset

Forward-ilmoitus / viite paketissa ei ole muuta kuin yksityisten elementtien ilmoittaminen erikseen ja määritteleminen paketin rungon myöhemmässä osassa.

Yksityisiin elementteihin voidaan viitata vain, jos ne on jo ilmoitettu paketin rungossa. Tästä syystä käytetään ennakkoilmoitusta. Mutta sen käyttö on melko epätavallista, koska useimmiten yksityiset elementit ilmoitetaan ja määritetään paketin rungon ensimmäisessä osassa.

Välitön ilmoitus on Oraclen tarjoama vaihtoehto, se ei ole pakollista, ja käyttö ja käyttämättä jättäminen ovat ohjelmoijan vaatimuksia.

Syntaksi:

CREATE [OR REPLACE] PACKAGE BODY 
IS.BEGIN
;END 

Yllä oleva syntaksi näyttää eteenpäin-ilmoituksen. Yksityiset elementit ilmoitetaan erikseen paketin etuosassa, ja ne on määritelty myöhemmässä osassa.

Kohdistimien käyttö paketissa

Toisin kuin muut elementit, kohdistimia on oltava varovainen paketin sisällä.

Jos kohdistin on määritelty pakettimäärityksessä tai paketin rungon globaalissa osassa, avattu kohdistin pysyy istunnon loppuun asti.

Joten on aina käytettävä kohdistimen määritteitä '% ISOPEN' tarkistamaan kohdistimen tila ennen sen viittaamista.

Ylikuormitus

Ylikuormitus on käsite, että monilla aliohjelmilla on sama nimi. Nämä alaohjelmat eroavat toisistaan ​​useiden parametrien tai parametrityyppien tai palautustyypin mukaan, ts. Aliohjelmia, joilla on sama nimi, mutta erilaisella parametrien lukumäärällä, erityyppisillä parametreilla tai erilaisilla uudentyypeillä, pidetään ylikuormituksena.

Tämä on hyödyllistä, kun monien aliohjelmien on tehtävä sama tehtävä, mutta kunkin kutsumisen tulisi olla erilainen. Tällöin alaohjelman nimi pidetään samana kaikille ja parametreja muutetaan kutsulausekkeen mukaisesti.

Esimerkki 1 : Tässä esimerkissä aiomme luoda paketin saadaksesi ja asettamalla työntekijän tietojen arvot emp-taulukossa. Get_record-toiminto palauttaa tietuetyyppilähdön annetulle työntekijän numerolle, ja set_record-toiminto lisää tietueen tyypin tietueen emp-taulukkoon.

Vaihe 1) Pakettimäärityksen luominen

CREATE OR REPLACE PACKAGE guru99_get_setISPROCEDURE set_record (p_emp_rec IN emp%ROWTYPE);FUNCTION get record (p_emp no IN NUMBER) RETURN emp%ROWTYPE;END guru99_get_set:/

Tuotos:

Package created

Koodin selitys

  • Koodirivi 1-5 : guru99_get_set-pakettimäärityksen luominen yhdellä menettelyllä ja yhdellä toiminnolla. Nämä kaksi ovat nyt paketin julkisia osia.

Vaihe 2) Paketti sisältää paketin rungon, jossa määritetään kaikki menettelyt ja toiminnot. Tässä vaiheessa luodaan Package Body.

CREATE OR REPLACE PACKAGE BODY guru99_get_setIS PROCEDURE set_record(p_emp_rec IN emp%ROWTYPE)ISPRAGMA AUTONOMOUS_TRANSACTION;BEGININSERT INTO empVALUES(p_emp_rec.emp_name,p_emp_rec.emp_no; p_emp_rec.salary,p_emp_rec.manager);COMMIT;END set_record;FUNCTION get_record(p_emp_no IN NUMBER)RETURN emp%ROWTYPEISl_emp_rec emp%ROWTYPE;BEGINSELECT * INTO l_emp_rec FROM emp where emp_no=p_emp_noRETURN l_emp_rec;END get_record;BEGUN dbms_output.put_line(‘Control is now executing the package initialization part');END guru99_get_set:/

Tuotos:

Package body created

Koodin selitys

  • Koodirivi 7 : Paketin rungon luominen.
  • Koodirivi 9-16 : Määritetään määrityksessä ilmoitettu elementti 'set_record'. Tämä on sama kuin erillisen menettelyn määritteleminen PL / SQL: ssä.
  • Koodirivi 17-24: Määritetään elementti 'get_record'. Se on sama kuin itsenäisen toiminnon määritteleminen.
  • Koodirivi 25-26: Paketin alustusosan määrittely.

Vaihe 3) Luo anonyymi lohko tietueiden lisäämiseksi ja näyttämiseksi viitaten yllä luotuun pakettiin.

DECLAREl_emp_rec emp%ROWTYPE;l_get_rec emp%ROWTYPE;BEGINdbms output.put line(‘Insert new record for employee 1004');l_emp_rec.emp_no:=l004;l_emp_rec.emp_name:='CCC';l_emp_rec.salary~20000;l_emp_rec.manager:=’BBB’;guru99_get_set.set_record(1_emp_rec);dbms_output.put_line(‘Record inserted');dbms output.put line(‘Calling get function to display the inserted record'):l_get_rec:=guru99_get_set.get_record(1004);dbms_output.put_line(‘Employee name: ‘||l_get_rec.emp_name);dbms_output.put_line(‘Employee number:‘||l_get_rec.emp_no);dbms_output.put_line(‘Employee salary:‘||l_get_rec.salary');dbms output.put line(‘Employee manager:‘||1_get_rec.manager);END:/

Tuotos:

Insert new record for employee 1004Control is now executing the package initialization partRecord insertedCalling get function to display the inserted recordEmployee name: CCCEmployee number: 1004Employee salary: 20000Employee manager: BBB

Koodin selitys:

  • Koodirivi 34-37: Tietueen tyypin muuttujan tietojen täyttäminen nimettömässä lohkossa paketin set_record-elementin kutsumiseksi.
  • Koodirivi 38: Guru99_get_set-paketin 'set_record' on kutsuttu. Nyt paketti on instantioitu ja se jatkuu istunnon loppuun saakka.
  • Paketin alustusosa suoritetaan, koska tämä on ensimmäinen kutsu paketille.
  • Tietue, jonka set_record-elementti on lisännyt taulukkoon.
  • Koodirivi 41: Kutsu get_record-elementti näyttämään lisätyn työntekijän tiedot.
  • Pakettiin viitataan toisen kerran paketin get_record-kutsun aikana. Alustusosaa ei kuitenkaan suoriteta tällä kertaa, koska paketti on jo alustettu tässä istunnossa.
  • Koodirivi 42-45: Työntekijän tietojen tulostaminen.

Riippuvuus paketeista

Koska paketti on asiaan liittyvien asioiden looginen ryhmittely, sillä on joitain riippuvuuksia. Seuraavassa on pidettävä huolta.

  • Spesifikaatio on erillinen kohde.
  • Paketin runko riippuu määrittelystä.
  • Pakkauksen runko voidaan koota erikseen. Aina kun spesifikaatio kootaan, runko on käännettävä uudelleen, koska se muuttuu kelvottomaksi.
  • Paketin rungon yksityinen elementistä riippuva alaohjelma tulisi määritellä vasta yksityisen elementin ilmoituksen jälkeen.
  • Eritelmässä ja rungossa mainittujen tietokantaobjektien on oltava kelvollisessa tilassa paketin kokoamisen ajankohtana.

Paketin tiedot

Kun pakettitiedot on luotu, pakettitiedot, kuten pakettilähde, alaohjelman tiedot ja ylikuormitustiedot, ovat saatavilla Oracle-tietomääritystaulukoissa.

Alla olevassa taulukossa on tietojen määritystaulukko ja taulukossa olevat pakettitiedot.

Taulukon nimi Kuvaus Kysely
ALL_OBJECT Antaa paketin yksityiskohdat, kuten object_id, creation_date, last_ddl_time jne. Se sisältää kaikkien käyttäjien luomat objektit. SELECT * FROM all_objects missä objektinimi = ' '
USER_OBJECT Antaa paketin yksityiskohdat, kuten object_id, creation_date, last_ddl_time jne. Se sisältää nykyisen käyttäjän luomat objektit. SELECT * FROM user_objects jossa objektinimi = ' '
ALL_SOURCE Antaa kaikkien käyttäjien luomien objektien lähteen. VALITSE * FROM all_source, jos nimi = ' '
USER_SOURCE Antaa nykyisen käyttäjän luomien objektien lähteen. VALITSE * FROM käyttäjän_lähde, jossa nimi = ' '
KAIKKI MENETTELYT Antaa kaikkien käyttäjien luomat alaohjelman tiedot, kuten object_id, ylikuormitustiedot jne. SELECT * FROM all_procedures Where object_name = ' '
USER_PROCEDURES Antaa nykyisen käyttäjän luomat alaohjelman tiedot, kuten object_id, ylikuormitustiedot jne. SELECT * FROM user_procedures Where object_name = ' '

UTL-TIEDOSTO - Yleiskatsaus

UTL-tiedosto on erillinen apupaketti, jonka Oracle tarjoaa erityistehtävien suorittamiseen. Tätä käytetään pääasiassa käyttöjärjestelmän tiedostojen lukemiseen ja kirjoittamiseen PL / SQL-paketeista tai alaohjelmista. Siinä on erilliset toiminnot tietojen sijoittamiseksi ja tietojen saamiseksi tiedostoista. Sen avulla voidaan myös lukea / kirjoittaa alkuperäisessä merkistössä.

Ohjelmoija voi käyttää tätä kirjoittamaan minkä tahansa tyyppisiä käyttöjärjestelmätiedostoja, ja tiedosto kirjoitetaan suoraan tietokantapalvelimelle. Nimi ja hakemistopolku mainitaan kirjoittaessasi.

Yhteenveto

Olemme nyt oppineet paketit PL / SQL: ssä, ja sinun pitäisi nyt pystyä toimimaan seuraavassa.

  • PL / SQL-paketit ja niiden komponentit
  • Pakkausten ominaisuudet
  • Pakettielementtien ohjaaminen ja ylikuormittaminen
  • Pakettien riippuvuuksien hallinta
  • Pakettitietojen tarkastelu
  • Mikä on UTL-tiedosto