Oracle PL/SQL-paketti: tyyppi, määritys, runko [esimerkki]

Mitä paketti sisältää Oracle?

PL/SQL-paketti on siihen liittyvän aliohjelman (proseduuri/funktio) looginen ryhmittely yhdeksi elementiksi. Paketti käännetään ja tallennetaan tietokantaobjektina, jota voidaan käyttää myöhemmin.

Pakettien komponentit

PL/SQL-paketissa on kaksi osaa.

  • Pakkausmääritys
  • Paketin runko

Pakkausmääritys

Paketin erittely koostuu kaiken yleisön julistuksesta muuttujat, osoittimet, objektit, menettelyt, funktiot ja poikkeukset.

Alla on muutamia pakettimäärittelyn ominaisuuksia.

  • Kaikki spesifikaatiossa mainitut elementit ovat käytettävissä pakkauksen ulkopuolelta. Tällaisia ​​elementtejä kutsutaan julkisiksi elementeiksi.
  • Paketin spesifikaatio on erillinen elementti, mikä tarkoittaa, että se voi olla olemassa yksin ilman paketin runkoa.
  • Aina kun paketti on viitannut, paketin esiintymä luodaan kyseiselle istunnolle.
  • Kun ilmentymä on luotu istuntoa varten, kaikki kyseisessä ilmentymässä käynnistetyt paketin elementit ovat voimassa istunnon loppuun asti.

Syntaksi

CREATE [OR REPLACE] PACKAGE <package_name> 
IS
<sub_program and public element declaration>
.
.
END <package name>

Yllä oleva syntaksi näyttää pakettimäärittelyn luomisen.

Paketin runko

Se koostuu kaikkien pakettimäärityksessä olevien elementtien määrittelystä. Sillä voi olla myös määritelmä elementeistä, joita ei ole ilmoitettu spesifikaatiossa, 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/osoittimet jotka on ilmoitettu eritelmässä.
  • Siinä voi myös olla enemmän aliohjelmia tai muita elementtejä, joita ei ole ilmoitettu määrittelyssä. Näitä kutsutaan yksityisiksi elementeiksi.
  • Se on luotettava kohde, ja se riippuu paketin spesifikaatiosta.
  • Paketin rungon tilasta tulee 'Virheellinen' aina, kun spesifikaatio käännetään. Siksi se on käännettävä uudelleen joka kerta määrittelyn laatimisen jälkeen.
  • Yksityiset elementit tulee määritellä ensin ennen kuin niitä käytetään paketin rungossa.
  • Paketin ensimmäinen osa on yleisilmoitusosa. Tämä sisältää muuttujat, kohdistimet ja yksityiset elementit (edelleen ilmoitus), jotka näkyvät koko paketille.
  • Paketin viimeinen osa on paketin alustusosa, joka suoritetaan kerran aina, kun paketti viitataan ensimmäisen kerran istunnossa.

Syntaksi:

CREATE [OR REPLACE] PACKAGE BODY <package_name>
IS
<global_declaration part>
<Private element definition>
<sub_program and public element definition>
.
<Package Initialization> 
END <package_name>
  • Yllä oleva syntaksi näyttää paketin rungon luomisen.

Nyt aiomme nähdä kuinka viitataan paketin elementteihin ohjelmassa.

Viittaavat pakettielementit

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

Kaikkiin paketin julkisiin elementteihin voidaan viitata kutsumalla paketin nimi ja sen jälkeen elementin nimi erotettuna pisteellä eli ' . '.

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

Luo paketti PL/SQL:ssä

PL/SQL:ssä aina kun pakettia viitataan/kutsutaan istunnossa, tälle paketille luodaan uusi ilmentymä.

Oracle tarjoaa mahdollisuuden paketin elementtien alustamiseen tai minkä tahansa toiminnan suorittamiseen tämän ilmentymän luomisen yhteydessä "Paketin alustuksen" avulla.

Tämä ei ole muuta kuin suorituslohko, joka kirjoitetaan paketin runkoon sen jälkeen, kun kaikki paketin elementit on määritetty. Tämä lohko suoritetaan aina, kun pakettiin viitataan ensimmäistä kertaa istunnon aikana.

Syntaksi

Luo paketti PL/SQL:ssä

CREATE [OR REPLACE] PACKAGE BODY <package_name>
IS
<Private element definition>
<sub_program and public element definition>
.
BEGINE
<Package Initialization> 
END <package_name>
  • Yllä oleva syntaksi näyttää paketin alustuksen määritelmän paketin rungossa.

Eteenpäin ilmoitukset

Välitysilmoitus/viittaus pakkauksessa ei ole muuta kuin yksityisten elementtien ilmoittamista erikseen ja sen määrittelemistä paketin tekstin myöhemmässä osassa.

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

Ennakkoilmoitus on tarjoama vaihtoehto Oracle, se ei ole pakollista ja sen käyttö ja käyttämättä jättäminen on ohjelmoijan vaatimusten mukaista.

Eteenpäin ilmoitukset

Syntaksi:

CREATE [OR REPLACE] PACKAGE BODY <package_name>
IS
<Private element declaration>
.
.
.
<Public element definition that refer the above private element>
.
.
<Private element definition> 
.
BEGIN
<package_initialization code>; 
END <package_name>

Yllä oleva syntaksi näyttää välitysilmoituksen. Yksityiset elementit ilmoitetaan erikseen paketin etuosassa ja ne on määritelty myöhemmässä osassa.

Kursorien käyttö paketissa

Toisin kuin muut Elementit, on oltava varovainen käytettäessä kohdistimia paketin sisällä.

Jos kohdistin on määritetty paketin määrittelyssä tai paketin rungon globaalissa osassa, avattu kohdistin säilyy istunnon loppuun asti.

Joten kannattaa aina käyttää kohdistimen attribuutteja '%ISOPEN' kursorin tilan tarkistamiseen ennen viittaamista.

Ylikuormitus

Ylikuormitus tarkoittaa useiden samannimien aliohjelmien käsitettä. Nämä aliohjelmat eroavat toisistaan ​​useilla parametreilla tai parametrityypeillä tai palautustyypillä eli aliohjelmia, joilla on sama nimi, mutta eri parametrien lukumäärä, erityyppiset parametrit tai erilainen uudelleentyyppi katsotaan ylikuormitukseksi.

Tämä on hyödyllistä, kun useiden aliohjelmien on suoritettava sama tehtävä, mutta kunkin aliohjelman kutsumistavan tulee olla erilainen. Tässä tapauksessa aliohjelman nimi pysyy samana kaikille ja parametreja muutetaan kutsuvan käskyn mukaisesti.

Esimerkki 1: Tässä esimerkissä aiomme luoda paketin saada ja asettaa työntekijän tietojen arvot 'emp'-taulukossa. Get_record-funktio palauttaa tietuetyypin tulosteen annetulle työntekijänumerolle, ja set_record-toiminto lisää tietuetyyppitietueen emp-taulukkoon.

Vaihe 1) Paketin määrittelyn luominen

Ylikuormitus

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

lähtö:

Package created

Koodin selitys

  • Koodirivi 1-5: Pakettimäärittelyn luominen guru99_get_setille yhdellä menettelyllä ja yhdellä funktiolla. Nämä kaksi ovat nyt tämän paketin julkisia osia.

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

Ylikuormitus

CREATE OR REPLACE PACKAGE BODY guru99_get_set
IS	
PROCEDURE set_record(p_emp_rec IN emp%ROWTYPE)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO emp
VALUES(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%ROWTYPE
IS
l_emp_rec emp%ROWTYPE;
BEGIN
SELECT * INTO l_emp_rec FROM emp where emp_no=p_emp_no
RETURN l_emp_rec;
END get_record;
BEGUN	
dbms_output.put_line(‘Control is now executing the package initialization part');
END guru99_get_set:
/

lähtö:

Package body created

Koodin selitys

  • Koodirivi 7: Paketin rungon luominen.
  • Koodirivi 9-16: Määrittelee määrittelyssä ilmoitettua elementtiä set_record. Tämä on sama kuin itsenäisen proseduurin määrittäminen PL/SQL:ssä.
  • Koodirivit 17-24: Elementin 'get_record' määrittäminen. Se on sama kuin itsenäisen toiminnon määrittäminen.
  • Koodirivit 25-26: Paketin alustusosan määrittäminen.

Vaihe 3) Anonyymin lohkon luominen tietueiden lisäämiseksi ja näyttämiseksi edellä luodun paketin avulla.

Ylikuormitus

DECLARE
l_emp_rec emp%ROWTYPE;
l_get_rec emp%ROWTYPE;
BEGIN
dbms 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:
/

lähtö:

Insert new record for employee 1004
Control is now executing the package initialization part
Record inserted
Calling get function to display the inserted record
Employee name: CCC
Employee number: 1004
Employee salary: 20000
Employee manager: BBB

Koodin selitys:

  • Koodirivit 34-37: Tietuetyyppimuuttujan tietojen täyttäminen anonyymiin lohkoon paketin set_record-elementin kutsumiseksi.
  • Koodirivi 38: Kutsu on tehty paketin guru99_get_set 'set_record':lle. Nyt paketti on instantoitu ja se säilyy istunnon loppuun asti.
  • Paketin alustusosa suoritetaan, koska tämä on ensimmäinen kutsu paketille.
  • Tietue on lisätty 'set_record'-elementillä taulukkoon.
  • Koodirivi 41: Get_record-elementin kutsuminen lisätyn työntekijän tietojen näyttämiseksi.
  • Pakettiin viitataan toisen kerran 'get_record'-kutsun aikana paketille. Alustusosaa ei kuitenkaan suoriteta tällä kertaa, koska paketti on jo alustettu tässä istunnossa.
  • Koodirivit 42-45: Tulosta työntekijän tiedot.

Riippuvuus paketeissa

Koska paketti on toisiinsa liittyvien asioiden looginen ryhmittely, sillä on joitain riippuvuuksia. Seuraavassa on huolehdittava riippuvuus.

  • Specification on itsenäinen objekti.
  • Paketin runko riippuu spesifikaatiosta.
  • Paketin runko voidaan koota erikseen. Aina kun määrittely käännetään, runko on käännettävä uudelleen, koska se ei kelpaa.
  • Paketin rungossa oleva aliohjelma, joka on riippuvainen yksityisestä elementistä, tulee määritellä vasta yksityisen elementin määrityksen jälkeen.
  • Tietokantaobjektien, joihin viitataan määrittelyssä ja rungossa, on oltava kelvollinen tila paketin käännöshetkellä.

Pakkaustiedot

Kun pakettitiedot on luotu, paketin tiedot, kuten paketin lähde, aliohjelman tiedot ja ylikuormitustiedot, ovat saatavilla Oracle tietojen määritelmätaulukot.

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

Taulukon nimi Tuotetiedot Kysymys
ALL_OBJECT Antaa paketin tiedot, kuten objektin_tunnus, luomispäivämäärä, viimeinen_ddl_aika jne. Se sisältää kaikkien käyttäjien luomat objektit. SELECT * FROM all_objects missä objektin_nimi =' '
USER_OBJECT Antaa paketin tiedot, kuten objektin_tunnus, luomispäivämäärä, viimeinen_ddl_aika jne. Se sisältää nykyisen käyttäjän luomat objektit. SELECT * FROM user_objects missä objektin_nimi =' '
ALL_SOURCE Antaa kaikkien käyttäjien luomien objektien lähteen. SELECT * FROM all_source jossa nimi=' '
USER_SOURCE Antaa nykyisen käyttäjän luomien objektien lähteen. SELECT * FROM user_source jossa nimi=' '
ALL_PROCEDURES Antaa kaikkien käyttäjien luomat aliohjelman tiedot, kuten objektin_tunnus, ylikuormitustiedot jne. SELECT * FROM all_procedures
Missä objektin_nimi=' '
USER_PROCEDURES Antaa nykyisen käyttäjän luomat aliohjelman tiedot, kuten objektin_tunnus, ylikuormitustiedot jne. SELECT * FROM user_procedures
Missä objektin_nimi=' '

UTL-TIEDOSTO – Yleiskatsaus

UTL-tiedosto on erillinen apuohjelma, jonka tarjoaa Oracle suorittaa erikoistehtäviä. Tätä käytetään pääasiassa käyttöjärjestelmätiedostojen lukemiseen ja kirjoittamiseen PL/SQL-paketeista tai aliohjelmista. Siinä on erilliset toiminnot tietojen sijoittamiseen ja tietojen hakemiseen tiedostoista. Se mahdollistaa myös lukemisen/kirjoituksen alkuperäisessä merkistössä.

Ohjelmoija voi käyttää tätä minkä tahansa tyyppisten käyttöjärjestelmätiedostojen kirjoittamiseen ja tiedosto kirjoitetaan suoraan tietokantapalvelimelle. Nimi ja hakemistopolku mainitaan kirjoitettaessa.

Yhteenveto

Olemme nyt oppineet paketit sisään PL / SQL, ja sinun pitäisi nyt pystyä työskentelemään seuraavissa asioissa.

  • PL/SQL-paketit ja niiden komponentit
  • Pakettien ominaisuudet
  • Paketin elementtien viittaaminen ja ylikuormittaminen
  • Pakettien riippuvuuksien hallinta
  • Paketin tietojen katselu
  • Mikä on UTL-tiedosto