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