Kas yra „Oracle“ paketas?
PL / SQL paketas yra logiška susijusios paprogramės (procedūros / funkcijos) grupavimas į vieną elementą. Paketas sudaromas ir saugomas kaip duomenų bazės objektas, kurį galima naudoti vėliau.
Šioje pamokoje sužinosite
- Pakuočių komponentai
- Pakuotės specifikacija
- Pakuotės korpusas
- Nuoroda į paketo elementus
- Sukurti paketą PL / SQL
- Išankstinės deklaracijos
- Žymeklių naudojimas pakuotėje
- Perkrovimas
- Priklausomybė paketuose
- Informacija apie paketą
- UTL FILE - apžvalga
Pakuočių komponentai
PL / SQL paketą sudaro du komponentai.
- Pakuotės specifikacija
- Pakuotės korpusas
Pakuotės specifikacija
Paketo specifikaciją sudaro visų viešųjų kintamųjų, žymeklių, objektų, procedūrų, funkcijų ir išimčių deklaracija.
Toliau pateikiamos kelios pakuotės specifikacijos charakteristikos.
- Su elementais, kurie yra nurodyti specifikacijoje, galima patekti iš pakuotės išorės. Tokie elementai yra žinomi kaip viešieji elementai.
- Paketo specifikacija yra atskiras elementas, kuris reiškia, kad jis gali egzistuoti vienas be paketo turinio.
- Kai paketas nurodo paketo egzempliorių, yra sukurtas tam konkrečiam seansui.
- Sukūrus egzempliorių seansui, visi toje instancijoje inicijuoti paketo elementai galioja iki sesijos pabaigos.
Sintaksė
CREATE [OR REPLACE] PACKAGEIS … END
Pirmiau pateikta sintaksė rodo paketo specifikacijos sukūrimą.
Pakuotės korpusas
Jį sudaro visų elementų, esančių paketo specifikacijoje, apibrėžimas. Jis taip pat gali turėti elementų, kurie nėra nurodyti specifikacijoje, apibrėžimą, šie elementai vadinami privačiais elementais ir gali būti iškviesti tik iš paketo vidaus.
Žemiau pateikiamos pakuotės korpuso charakteristikos.
- Jame turėtų būti visų paprogramių / žymeklių, kurie buvo deklaruoti specifikacijoje, apibrėžimai.
- Taip pat gali būti daugiau paprogramių ar kitų elementų, kurie nėra nurodyti specifikacijoje. Tai vadinama privačiais elementais.
- Tai yra patikimas objektas ir tai priklauso nuo paketo specifikacijos.
- Sudarant specifikaciją paketo turinio būsena tampa „Negaliojanti“. Todėl kiekvieną kartą po specifikacijos sudarymo ją reikia kompiliuoti.
- Privatūs elementai turėtų būti apibrėžti pirmiausia prieš juos naudojant paketo turinyje.
- Pirmoji paketo dalis yra visuotinė deklaravimo dalis. Tai apima kintamuosius, žymeklius ir privačius elementus (išankstinė deklaracija), kurie yra matomi visam paketui.
- Paskutinė paketo dalis yra paketo inicijavimo dalis, kuri vykdoma vieną kartą, kai paketas pirmą kartą persiunčiamas sesijos metu.
Sintaksė:
CREATE [OR REPLACE] PACKAGE BODYIS . END
- Aukščiau pateikta sintaksė rodo paketo turinio sukūrimą.
Dabar pamatysime, kaip programoje nurodyti paketo elementus.
Nuoroda į paketo elementus
Kai elementai bus deklaruoti ir apibrėžti pakete, turime nurodyti elementus, kad juos naudotume.
Visus viešus paketo elementus galima nurodyti iškviečiant paketo pavadinimą, po kurio nurodomas taško atskirtas elemento pavadinimas, ty „
Viešasis paketo kintamasis taip pat gali būti naudojamas tuo pačiu būdu priskirti ir paimti iš jų reikšmes, ty „
Sukurti paketą PL / SQL
PL / SQL sistemoje, kai seanso metu siunčiamas / iškviečiamas paketas, tam paketui bus sukurtas naujas egzempliorius.
„Oracle“ suteikia galimybę inicijuoti paketo elementus arba atlikti bet kokią veiklą šio egzemplioriaus kūrimo metu naudojant „Paketo inicijavimą“.
Tai yra ne kas kita, o vykdymo blokas, kuris įrašomas paketo tekste, apibrėžus visus paketo elementus. Šis blokas bus vykdomas, kai paketas pirmą kartą persiunčiamas sesijos metu.
Sintaksė
CREATE [OR REPLACE] PACKAGE BODYIS .BEGINE END
- Aukščiau pateikta sintaksė rodo paketo inicializavimo paketo tekste apibrėžimą.
Išankstinės deklaracijos
Išankstinė deklaracija / nuoroda pakete yra ne kas kita, kaip atskirų privačių elementų deklaravimas ir apibrėžimas vėlesnėje paketo dalies dalyje.
Privatūs elementai gali būti nurodomi tik tuo atveju, jei jie jau deklaruoti paketo tekste. Dėl šios priežasties naudojama išankstinė deklaracija. Bet tai yra gana neįprasta naudoti, nes dažniausiai privatūs elementai yra deklaruojami ir apibrėžti pirmojoje paketo turinio dalyje.
Išankstinis deklaravimas yra „Oracle“ teikiama parinktis, ji nėra privaloma, o naudoti ir nenaudoti atitinka programuotojo reikalavimus.
Sintaksė:
CREATE [OR REPLACE] PACKAGE BODYIS … … .BEGIN ;END
Pirmiau pateikta sintaksė rodo išankstinį deklaravimą. Privatūs elementai pateikiami atskirai priekinėje paketo dalyje, o jie buvo apibrėžti vėlesnėje dalyje.
Žymeklių naudojimas pakuotėje
Skirtingai nuo kitų elementų, reikia atsargiai naudoti žymeklius pakuotės viduje.
Jei žymeklis yra apibrėžtas paketo specifikacijoje arba visuotinėje paketo turinio dalyje, atidarytas žymeklis išliks iki sesijos pabaigos.
Taigi, prieš nukreipdami žymeklio būseną, visada turėtumėte naudoti žymeklio atributus „% ISOPEN“.
Perkrovimas
Perkrovimas yra sąvoka turėti daugybę subprogramų tuo pačiu pavadinimu. Šios paprogramės viena nuo kitos skirsis keletu parametrų ar parametrų tipų arba grąžinimo tipu, ty to paties pavadinimo, bet skirtingo parametrų skaičiaus, skirtingų tipų parametrų ar skirtingų tipų paprogramės laikomos perkrautomis.
Tai naudinga, kai daugybė paprogramių turi atlikti tą pačią užduotį, tačiau kiekvienos iš jų skambinimo būdas turėtų būti skirtingas. Tokiu atveju paprogramės pavadinimas visiems bus vienodas, o parametrai bus pakeisti pagal skambinimo sakinį.
1 pavyzdys : Šiame pavyzdyje mes sukursime paketą, kad gautume ir nustatytume darbuotojo informacijos vertes lentelėje „emp“. Funkcija „get_record“ grąžins nurodyto darbuotojo numerio įrašo tipo išvestį, o „set_record“ procedūra įterps įrašo tipo įrašą į lentelę emp.
1 žingsnis) Paketo specifikacijos kūrimas
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:/
Išvestis:
Package created
Kodo paaiškinimas
- Kodo eilutė 1-5 : „guru99_get_set“ paketo specifikacijos sukūrimas su viena procedūra ir viena funkcija. Šie du elementai dabar yra vieši šio paketo elementai.
2 žingsnis) Pakuotėje yra paketo turinys, kuriame bus apibrėžtos visos procedūros ir funkcijos. Šiame etape sukuriamas „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:/
Išvestis:
Package body created
Kodo paaiškinimas
- 7 kodo eilutė : paketo turinio kūrimas.
- Kodo eilutė 9-16 : Apibūdinamas specifikacijoje deklaruojamas elementas „set_record“. Tai tas pats, kaip apibrėžti atskirą procedūrą PL / SQL.
- Kodo eilutė 17-24: Elemento „get_record“ apibrėžimas. Tai tas pats, kaip apibrėžti atskirą funkciją.
- Kodo eilutė 25-26: paketo inicijavimo dalies apibrėžimas.
3 žingsnis) Sukurkite anoniminį bloką įrašams įterpti ir rodyti, remdamiesi aukščiau sukurtu paketu.
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:/
Išvestis:
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
Kodo paaiškinimas:
- Kodo eilutė 34-37: įrašant anoniminio bloko įrašo tipo kintamojo duomenis paketo elementui „set_record“ iškviesti.
- Kodo eilutė 38: iškviečiamas paketo „guru99_get_set“ rinkinys „set_record“. Dabar paketas yra supaprastintas ir jis tęsis iki sesijos pabaigos.
- Paketo inicijavimo dalis vykdoma, nes tai yra pirmasis paketo iškvietimas.
- Įrašą į lentelę įterpė elementas „set_record“.
- Kodo eilutė 41: iškviečiamas elementas „get_record“, kad būtų rodoma informacija apie įterptą darbuotoją.
- Paketas antrą kartą nurodomas paketo „get_record“ skambučio metu. Tačiau inicializavimo dalis šį kartą nevykdoma, nes paketas jau inicializuotas šioje sesijoje.
- Kodo eilutė 42-45: išsami darbuotojų informacija.
Priklausomybė paketuose
Kadangi paketas yra logiškas susijusių dalykų grupavimas, jis turi tam tikrų priklausomybių. Toliau pateikiama priklausomybė, kuria reikia pasirūpinti.
- Specifikacija yra atskiras objektas.
- Pakuotės turinys priklauso nuo specifikacijos.
- Pakuotės turinį galima sudaryti atskirai. Kai tik yra sudaryta specifikacija, kūną reikia sudaryti iš naujo, nes jis taps negaliojantis.
- Paketo turinio paprogramė, priklausanti nuo privataus elemento, turėtų būti apibrėžta tik po privataus elemento deklaracijos.
- Duomenų bazės objektai, kurie nurodyti specifikacijoje ir turinio pakete, turi būti galiojantys paketo sudarymo metu.
Informacija apie paketą
Sukūrus paketo informaciją, paketo informaciją, pvz., Paketo šaltinį, išsamią paprogramės ir perkrovos informaciją, galima rasti „Oracle“ duomenų apibrėžimo lentelėse.
Žemiau esančioje lentelėje pateikiama duomenų apibrėžimo lentelė ir pakuotės informacija, kuri yra lentelėje.
Lentelės pavadinimas | apibūdinimas | Užklausa |
ALL_OBJECT | Pateikiama išsami informacija apie paketą, pvz., Object_id, creation_date, last_ddl_time ir kt. Jame bus visų vartotojų sukurti objektai. | PASIRINKTI * IŠ visų objektų, kur objekto_vardas = '
|
USER_OBJECT | Pateikiama išsami informacija apie paketą, pvz., Object_id, creation_date, last_ddl_time ir kt. Jame bus dabartinio vartotojo sukurti objektai. | PASIRINKTI * IŠ vartotojo_objektų, kur objekto_vardas = '
|
ALL_SOURCE | Nurodo visų vartotojų sukurtų objektų šaltinį. | PASIRINKITE * IŠ all_source, kur vardas = '
|
USER_SOURCE | Pateikia dabartinio vartotojo sukurtų objektų šaltinį. | PASIRINKITE * IŠ vartotojo_šaltinio, kur vardas = '
|
VISOS_PROCEDŪROS | Pateikiama visų vartotojų sukurta išsami informacija apie paprogramę, pvz., Object_id, perkrovos detales ir kt. | PASIRINKTI * IŠ visų procedūrų, kur objekto_vardas = '
|
USER_PROCEDURES | Pateikia išsamią paprogramės informaciją, pvz., Object_id, perkrovos detales ir kt., Kurias sukūrė dabartinis vartotojas. | PASIRINKTI * IŠ vartotojo_procedūrų, kur objekto_vardas = '
|
UTL FILE - apžvalga
UTL File yra atskiras „Oracle“ teikiamas paslaugų paketas, skirtas specialioms užduotims atlikti. Tai daugiausia naudojama operacinės sistemos failams skaityti ir rašyti iš PL / SQL paketų ar paprogramių. Jis gavo atskiras funkcijas, kad galėtų pateikti informaciją ir gauti informaciją iš failų. Tai taip pat leidžia skaityti / rašyti vietinių simbolių rinkinyje.
Programuotojas gali tai naudoti bet kokio tipo operacinės sistemos failams rašyti, o failas bus parašytas tiesiai į duomenų bazės serverį. Vardas ir katalogo kelias bus paminėti rašant.
Santrauka
Dabar mes išmokome paketus PL / SQL formatu ir dabar turėtumėte mokėti dirbti toliau.
- PL / SQL paketai ir jų komponentai
- Pakuočių charakteristikos
- Paketo elementų persiuntimas ir perkrova
- Priklausomybių valdymas paketuose
- Peržiūrėkite pakuotės informaciją
- Kas yra UTL failas