Kas ir Oracle pakete?
PL / SQL pakete ir saistītas apakšprogrammas (procedūras / funkcijas) loģiska grupēšana vienā elementā. Pakete tiek apkopota un saglabāta kā datu bāzes objekts, kuru var izmantot vēlāk.
Šajā apmācībā jūs uzzināsiet
- Iepakojumu sastāvdaļas
- Iepakojuma specifikācija
- Iepakojuma korpuss
- Atsauce uz pakas elementiem
- Izveidot pakotni PL / SQL
- Pārsūtīt deklarācijas
- Kursoru lietošana iepakojumā
- Pārslodze
- Atkarība no iepakojumiem
- Informācija par iepakojumu
- UTL FILE - pārskats
Iepakojumu sastāvdaļas
PL / SQL paketei ir divi komponenti.
- Iepakojuma specifikācija
- Iepakojuma korpuss
Iepakojuma specifikācija
Iepakojuma specifikācija sastāv no visu publisko mainīgo, kursoru, objektu, procedūru, funkciju un izņēmumu deklarācijas.
Tālāk ir minēti daži Package specifikācijas raksturlielumi.
- Visiem specifikācijā deklarētajiem elementiem var piekļūt no paketes ārpuses. Šādi elementi ir pazīstami kā publisks elements.
- Iepakojuma specifikācija ir atsevišķs elements, kas nozīmē, ka tā var pastāvēt atsevišķi bez paketes pamatteksta.
- Ikreiz, kad pakete ir norādījusi paketes eksemplārs tiek izveidots tieši šai sesijai.
- Pēc tam, kad instance ir izveidota sesijai, visi šajā instancē uzsāktie pakotnes elementi ir derīgi līdz sesijas beigām.
Sintakse
CREATE [OR REPLACE] PACKAGEIS … END
Iepriekš minētā sintakse parāda pakotnes specifikācijas izveidi.
Iepakojuma korpuss
Tas sastāv no visu elementu definīcijas, kas atrodas paketes specifikācijā. Tam var būt arī tādu elementu definīcija, kas nav deklarēti specifikācijā, šos elementus sauc par privātiem elementiem un tos var izsaukt tikai no paketes iekšpuses.
Zemāk ir iepakojuma korpusa raksturojums.
- Tajā jāiekļauj visu apakšprogrammu / kursoru definīcijas, kas deklarētas specifikācijā.
- Tam var būt arī vairāk apakšprogrammu vai citu elementu, kas nav deklarēti specifikācijā. Tos sauc par privātiem elementiem.
- Tas ir uzticams objekts, un tas ir atkarīgs no paketes specifikācijas.
- Ikreiz, kad tiek apkopota specifikācija, paketes ķermeņa stāvoklis kļūst “Nederīgs”. Tādēļ tas katru reizi pēc specifikācijas sastādīšanas ir jāpārkompilē.
- Privātie elementi vispirms jādefinē, pirms tie tiek izmantoti paketes pamattekstā.
- Paketes pirmā daļa ir globālās deklarēšanas daļa. Tas ietver mainīgos, kursorus un privātos elementus (deklarācija uz priekšu), kas ir redzami visai paketei.
- Pakotnes pēdējā daļa ir pakotnes inicializācijas daļa, kas tiek izpildīta vienu reizi ikreiz, kad pakete sesijā tiek pārsūtīta pirmo reizi.
Sintakse:
CREATE [OR REPLACE] PACKAGE BODYIS . END
- Iepriekš minētā sintakse parāda pakotnes teksta izveidi.
Tagad mēs redzēsim, kā programmā norādīt atsauces uz pakotnes elementiem.
Atsauce uz pakas elementiem
Kad elementi ir deklarēti un definēti paketē, mums ir jānorāda elementi, lai tos izmantotu.
Uz visiem paketes publiskajiem elementiem var atsaukties, izsaucot pakotnes nosaukumu, kam seko elementa nosaukums, atdalīts ar punktu, ti, “
Paketes publisko mainīgo tāpat var izmantot, lai piešķirtu un no tām iegūtu vērtības, ti, “
Izveidot pakotni PL / SQL
PL / SQL ikreiz, kad sesijā tiek novirzīta / izsaukta pakete, šai pakotnei tiks izveidots jauns eksemplārs.
Oracle nodrošina iespēju paketes elementu inicializēšanai vai jebkuras darbības veikšanai šīs instances izveidošanas laikā, izmantojot pakotnes inicializāciju.
Tas nav nekas cits kā izpildes bloks, kas tiek ierakstīts paketes pamattekstā pēc visu paketes elementu noteikšanas. Šis bloks tiks izpildīts ikreiz, kad pakete pirmo reizi tiek nodota sesijas laikā.
Sintakse
CREATE [OR REPLACE] PACKAGE BODYIS .BEGINE END
- Iepriekš minētā sintakse parāda paketes inicializācijas definīciju paketes pamattekstā.
Pārsūtīt deklarācijas
Pārsūtīšanas deklarācija / atsauce paketē ir nekas cits kā privāto elementu atsevišķa deklarēšana un definēšana paketes korpusa vēlākajā daļā.
Privātos elementus var norādīt tikai tad, ja tas jau ir norādīts paketes pamattekstā. Šī iemesla dēļ tiek izmantota paziņošana uz priekšu. Bet to izmantot ir diezgan neparasti, jo lielākoties privātie elementi tiek deklarēti un definēti paketes pamatteksta pirmajā daļā.
Pārsūtīšana uz priekšu ir iespēja, ko nodrošina Oracle, tā nav obligāta, un tās lietošana un neizmantošana ir programmētāja prasība.
Sintakse:
CREATE [OR REPLACE] PACKAGE BODYIS … … .BEGIN ;END
Iepriekš minētā sintakse parāda deklarāciju uz priekšu. Privātie elementi tiek atsevišķi deklarēti paketes priekšējā daļā, un tie ir definēti vēlāk.
Kursoru lietošana iepakojumā
Atšķirībā no citiem elementiem, jābūt uzmanīgiem, izmantojot kursorus iepakojuma iekšpusē.
Ja kursors ir definēts paketes specifikācijā vai paketes pamatteksta globālajā daļā, pēc atvēršanas kursors saglabāsies līdz sesijas beigām.
Tāpēc vienmēr jāizmanto kursora atribūti '% ISOPEN', lai pārbaudītu kursora stāvokli pirms tā novirzīšanas.
Pārslodze
Pārslodze ir daudzu apakšprogrammu ar tādu pašu nosaukumu koncepcija. Šīs apakšprogrammas atšķirsies viena no otras ar vairākiem parametriem vai parametru tipiem vai atgriešanās tipu, ti, apakšprogramma ar tādu pašu nosaukumu, bet ar atšķirīgu parametru skaitu, dažāda veida parametriem vai atšķirīgu atkārtotu tipu tiek uzskatīta par pārslodzi.
Tas ir noderīgi, ja daudzām apakšprogrammām ir jāveic viens un tas pats uzdevums, taču katras no tām izsaukšanas veidam jābūt atšķirīgam. Šajā gadījumā apakšprogrammas nosaukums visiem tiks saglabāts vienāds, un parametri tiks mainīti atbilstoši izsaukuma paziņojumam.
1. piemērs : Šajā piemērā mēs izveidosim paketi, lai iegūtu un iestatītu darbinieka informācijas vērtības tabulā “emp”. Funkcija get_record atgriezīs ieraksta veida izvadi par norādīto darbinieka numuru, un procedūra set_record ievietos ieraksta tipa ierakstu emp tabulā.
1. solis) Iepakojuma specifikācijas izveide
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:/
Izeja:
Package created
Kods Paskaidrojums
- Kodu rinda 1-5 : guru99_get_set paketes specifikācijas izveide ar vienu procedūru un vienu funkciju. Šie divi tagad ir šīs paketes publiski elementi.
2. solis) Iepakojumā ir paketes pamatteksts, kurā tiks definētas visas procedūras un funkcijas. Šajā solī tiek izveidots 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:/
Izeja:
Package body created
Kods Paskaidrojums
- Kodu rinda 7 : paketes pamatteksta izveidošana
- Kodu rinda 9-16 : definē elementā 'set_record', kas deklarēts specifikācijā. Tas ir tas pats, kas noteikt atsevišķu procedūru PL / SQL.
- Kodu rinda 17-24: definē elementu 'get_record'. Tas ir tas pats, kas definēt atsevišķo funkciju.
- Kodu rinda 25-26: paketes inicializācijas daļas noteikšana.
3. solis. Anonīma bloka izveide ierakstu ievietošanai un parādīšanai, atsaucoties uz iepriekš izveidoto pakotni.
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:/
Izeja:
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
Koda skaidrojums:
- Koda rinda 34-37: ieraksta tipa mainīgā datu aizpildīšana anonīmā blokā, lai izsauktu pakotnes elementu “set_record”.
- 38. koda rindiņa: ir izsaukts uz “set_record” no paketes guru99_get_set. Tagad pakete ir instantificēta, un tā saglabāsies līdz sesijas beigām.
- Pakotnes inicializācijas daļa tiek izpildīta, jo tas ir pirmais izsaukums uz pakotni.
- Ieraksts ievietots tabulā ar elementu “set_record”.
- Koda rinda 41: izsaucot elementu get_record, lai parādītu ievietotā darbinieka informāciju.
- Pakete tiek nosūtīta otro reizi pakotnes izsaukuma “get_record” laikā. Bet inicializācijas daļa šoreiz netiek izpildīta, jo pakete jau ir inicializēta šajā sesijā.
- Kodu rinda 42-45: darbinieka datu drukāšana.
Atkarība no iepakojumiem
Tā kā pakete ir loģiska saistīto lietu grupēšana, tai ir dažas atkarības. Tālāk ir norādīta atkarība, par kuru jārūpējas.
- Specifikācija ir atsevišķs objekts.
- Iepakojuma pamatteksts ir atkarīgs no specifikācijas.
- Iepakojuma korpusu var sastādīt atsevišķi. Ikreiz, kad tiek sastādīta specifikācija, pamatteksts ir jākompilē, jo tas kļūs nederīgs.
- Apakšprogramma paketes pamattekstā, kas ir atkarīga no privātā elementa, jānosaka tikai pēc privātā elementa deklarācijas.
- Datu bāzes objektiem, uz kuriem attiecas specifikācija un pamatteksts, pakotnes sastādīšanas laikā jābūt derīgam statusam.
Informācija par iepakojumu
Kad informācija par pakotni ir izveidota, informācija par pakotni, piemēram, pakotnes avots, detalizēta informācija par apakšprogrammu un pārslodzes informācija, ir pieejama Oracle datu definīciju tabulās.
Zemāk esošajā tabulā sniegta datu definēšanas tabula un tabulā pieejamā informācija par pakotni.
Tabulas nosaukums | Apraksts | Vaicājums |
ALL_OBJECT | Sniedz detalizētu informāciju par pakotni, piemēram, object_id, creation_date, last_ddl_time utt. Tajā būs visu lietotāju izveidotie objekti. | SELECT * NO visiem_objektiem, kur objekta_nosaukums = '
|
USER_OBJECT | Sniedz detalizētu informāciju par pakotni, piemēram, object_id, creation_date, last_ddl_time utt. Tajā būs pašreizējā lietotāja izveidotie objekti. | SELECT * FROM lietotāja_objekti, kur objekta_nosaukums = '
|
ALL_SOURCE | Piešķir visu lietotāju izveidoto objektu avotu. | ATLASIET * FROM all_source kur nosaukums = '
|
USER_SOURCE | Piešķir pašreizējā lietotāja izveidoto objektu avotu. | ATLASIET * FROM user_source kur name = '
|
VISAS_PROCEDŪRAS | Sniedz visu lietotāju izveidotās apakšprogrammas detaļas, piemēram, object_id, detaļas par pārslodzi utt. | SELECT * NO visām_procedūrām, kur objekta_nosaukums = '
|
USER_PROCEDURES | Sniedz apakšprogrammas detaļas, piemēram, object_id, pārslodzes detaļas utt., Ko izveidojis pašreizējais lietotājs. | SELECT * FROM user_procedures Where object_name = '
|
UTL FILE - pārskats
UTL File ir atsevišķa utilītu pakete, ko nodrošina Oracle īpašu uzdevumu veikšanai. To galvenokārt izmanto operētājsistēmas failu lasīšanai un rakstīšanai no PL / SQL pakotnēm vai apakšprogrammām. Tam bija atsevišķas funkcijas informācijas ievietošanai un informācijas iegūšanai no failiem. Tas ļauj arī lasīt / rakstīt vietējo rakstzīmju kopā.
Programmētājs to var izmantot, lai rakstītu jebkura veida operētājsistēmas failus, un fails tiks ierakstīts tieši datu bāzes serverī. Rakstīšanas laikā tiks minēts nosaukums un direktorija ceļš.
Kopsavilkums
Tagad mēs esam iemācījušies pakotnes PL / SQL, un jums tagad vajadzētu strādāt tālāk.
- PL / SQL paketes un to komponenti
- Iepakojumu raksturojums
- Pakotnes elementu novirzīšana un pārslodze
- Atkarību pārvaldīšana paketēs
- Informācijas par pakotni skatīšana
- Kas ir UTL fails