Kaj je paket v Oracle?
Paket PL / SQL je logično združevanje povezanega podprograma (postopek / funkcija) v en sam element. Paket se prevede in shrani kot objekt baze podatkov, ki ga lahko kasneje uporabimo.
V tej vadnici boste izvedeli-
- Sestavni deli paketov
- Specifikacija paketa
- Telo paketa
- Sklicevanje na elemente paketa
- Ustvari paket v PL / SQL
- Posredne izjave
- Uporaba kazalcev v paketu
- Preobremenitev
- Odvisnost v paketih
- Informacije o paketu
- DATOTEKA UTL - Pregled
Sestavni deli paketov
Paket PL / SQL ima dve komponenti.
- Specifikacija paketa
- Telo paketa
Specifikacija paketa
Specifikacija paketa je sestavljena iz izjave o vseh javnih spremenljivkah, kazalcih, objektih, postopkih, funkcijah in izjemi.
Spodaj je nekaj značilnosti specifikacije paketa.
- Do elementov, ki so navedeni v specifikaciji, lahko dostopate zunaj paketa. Takšni elementi so znani kot javni element.
- Specifikacija paketa je samostojni element, kar pomeni, da lahko obstaja sam brez telesa paketa.
- Kadar koli se paket sklicuje, se za to določeno sejo ustvari primerek paketa.
- Ko je primerek ustvarjen za sejo, so vsi elementi paketa, ki se začnejo v tem primerku, veljavni do konca seje.
Sintaksa
CREATE [OR REPLACE] PACKAGEIS … END
Zgornja sintaksa prikazuje ustvarjanje specifikacije paketa.
Telo paketa
Sestavljen je iz definicije vseh elementov, ki so prisotni v specifikaciji paketa. Lahko ima tudi definicijo elementov, ki niso navedeni v specifikaciji, ti elementi se imenujejo zasebni elementi in jih je mogoče poklicati samo znotraj paketa.
Spodaj so značilnosti telesa paketa.
- Vsebovati mora definicije za vse podprograme / kazalce, ki so bili navedeni v specifikaciji.
- Lahko ima tudi več podprogramov ali drugih elementov, ki niso navedeni v specifikaciji. Ti se imenujejo zasebni elementi.
- Je zanesljiv predmet in je odvisen od specifikacije paketa.
- Stanje telesa paketa postane "Neveljavno" vsakič, ko je specifikacija sestavljena. Zato ga je treba ponovno sestaviti vsakič po sestavljanju specifikacije.
- Zasebne elemente je treba najprej definirati, preden jih uporabimo v telesu paketa.
- Prvi del paketa je del globalne deklaracije. To vključuje spremenljivke, kazalce in zasebne elemente (posredovana izjava), ki je vidna celotnemu paketu.
- Zadnji del paketa je del inicializacije paketa, ki se izvede enkrat, kadar je paket prvič napoten v seji.
Sintaksa:
CREATE [OR REPLACE] PACKAGE BODYIS . END
- Zgornja sintaksa prikazuje ustvarjanje telesa paketa.
Zdaj bomo videli, kako napotiti elemente paketa v program.
Sklicevanje na elemente paketa
Ko so elementi deklarirani in definirani v paketu, moramo napotiti elemente, da jih uporabimo.
Na vse javne elemente paketa se lahko sklicuje tako, da pokličete ime paketa, ki mu sledi ime elementa, ločeno s piko, tj. '
Javno spremenljivko paketa lahko na enak način uporabimo tudi za dodeljevanje in pridobivanje vrednosti iz njih, tj. '
Ustvari paket v PL / SQL
V PL / SQL bo vsakič, ko bo paket napoten / poklican v seji, ustvarjen nov primerek za ta paket.
Oracle ponuja možnost za inicializacijo elementov paketov ali izvajanje kakršne koli dejavnosti v času ustvarjanja tega primerka s pomočjo »Inicializacija paketa«.
To ni nič drugega kot izvedbeni blok, ki je zapisan v telo paketa po določitvi vseh elementov paketa. Ta blok se izvede, kadar je paket prvič napoten v seji.
Sintaksa
CREATE [OR REPLACE] PACKAGE BODYIS .BEGINE END
- Zgornja sintaksa prikazuje definicijo inicializacije paketa v telesu paketa.
Posredne izjave
Posredna izjava / sklic v paketu ni nič drugega kot ločeno deklariranje zasebnih elementov in njihovo definiranje v kasnejšem delu telesa paketa.
Zasebni elementi se lahko sklicujejo le, če je to že prijavljeno v telesu paketa. Iz tega razloga se uporablja posredna izjava. Toda uporaba je precej nenavadna, ker so v večini primerov zasebni elementi deklarirani in definirani v prvem delu telesa paketa.
Posredna izjava je možnost, ki jo ponuja Oracle, ni obvezna in uporaba in neuporaba je odvisna od programerjevih zahtev.
Sintaksa:
CREATE [OR REPLACE] PACKAGE BODYIS … … .BEGIN ;END
Zgornja sintaksa prikazuje naprej izjavo. Zasebni elementi so deklarirani ločeno v sprednjem delu paketa in so bili definirani v kasnejšem delu.
Uporaba kazalcev v paketu
Za razliko od drugih elementov je treba biti previden pri uporabi kazalcev znotraj paketa.
Če je kurzor določen v specifikaciji paketa ali v globalnem delu telesa paketa, bo kurzor, ko se odpre, trajal do konca seje.
Zato je treba vedno uporabiti atribute kazalca '% ISOPEN', da preverite stanje kurzorja, preden ga napotite.
Preobremenitev
Preobremenitev je koncept številnih podprogramov z istim imenom. Ti podprogrami se med seboj razlikujejo po številu parametrov ali vrstah parametrov ali vrnjenem tipu, tj. Podprogram z istim imenom, vendar z različnim številom parametrov, različnim tipom parametrov ali drugačnim ponovnim tipom se šteje za preobremenitev.
To je koristno, kadar mora veliko podprogramov opraviti isto nalogo, vendar mora biti način klicanja vsakega od njih drugačen. V tem primeru bo ime podprograma ostalo enako za vse, parametri pa se bodo spremenili glede na izpisek klica.
Primer 1 : V tem primeru bomo ustvarili paket za pridobitev in nastavitev vrednosti informacij o zaposlenem v tabeli 'emp'. Funkcija get_record bo vrnila izhod vrste zapisa za dano številko zaposlenega, postopek set_record pa bo zapis vrste zapisa vstavil v tabelo emp.
Korak 1) Ustvarjanje specifikacije paketa
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:/
Izhod:
Package created
Razlaga kode
- Vrstica kode 1-5 : Ustvarjanje specifikacije paketa za guru99_get_set z enim postopkom in eno funkcijo. Ta dva sta zdaj javna elementa tega paketa.
Korak 2) Paket vsebuje telo paketa, kjer bodo definirane vse dejanske definicije postopkov in funkcij. V tem koraku se ustvari telo paketa.
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:/
Izhod:
Package body created
Razlaga kode
- Vrstica kode 7 : Ustvarjanje telesa paketa.
- Vrstica kode 9-16 : Določitev elementa 'set_record', ki je naveden v specifikaciji. To je enako kot definiranje samostojnega postopka v PL / SQL.
- Vrstica kode 17-24: Določitev elementa 'get_record'. To je enako kot pri definiranju samostojne funkcije.
- Vrstica kode 25-26: Določanje dela za inicializacijo paketa.
Korak 3) Ustvarjanje anonimnega bloka za vstavljanje in prikaz zapisov s sklicevanjem na zgoraj ustvarjeni paket.
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:/
Izhod:
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
Razlaga kode:
- Koda 34-37: Popolnitev podatkov za spremenljivko vrste zapisa v anonimni blok, da pokliče element 'set_record' paketa.
- Koda 38: Klican je bil 'set_record' paketa guru99_get_set. Zdaj se paket ustvari v instanci in bo trajal do konca seje.
- Del za inicializacijo paketa se izvede, ker je to prvi klic paketa.
- Zapis v element tabele vstavi element 'set_record'.
- 41. vrstica kode: klic elementa 'get_record' za prikaz podrobnosti vstavljenega zaposlenega.
- Paket se drugič napoti med klicem paketa 'get_record'. Toda del za inicializacijo se tokrat ne izvede, ker je paket že inicializiran v tej seji.
- Vrstica kode 42-45: Tiskanje podrobnosti o zaposlenem.
Odvisnost v paketih
Ker je paket logično združevanje sorodnih stvari, ima nekaj odvisnosti. Sledi odvisnost, za katero je treba poskrbeti.
- Specifikacija je samostojni objekt.
- Telo paketa je odvisno od specifikacije.
- Telo paketa je mogoče sestaviti ločeno. Vsakič, ko je specifikacija sestavljena, je treba telo znova sestaviti, saj bo postalo neveljavno.
- Podprogram v telesu paketa, ki je odvisen od zasebnega elementa, je treba definirati šele po izjavi zasebnega elementa.
- Predmeti baze podatkov, ki so navedeni v specifikaciji in telesu, morajo biti v času prevajanja paketov v veljavnem stanju.
Informacije o paketu
Ko so informacije o paketu ustvarjene, so informacije o paketu, kot so vir paketa, podrobnosti o podprogramu in podrobnosti o preobremenitvi, na voljo v tabelah z definicijo podatkov Oracle.
Spodnja tabela prikazuje tabelo definicij podatkov in informacije o paketu, ki so na voljo v tabeli.
Ime tabele | Opis | Poizvedba |
ALL_OBJECT | Poda podrobnosti o paketu, kot so object_id, create_date, last_ddl_time itd. Vseboval bo predmete, ki so jih ustvarili vsi uporabniki. | SELECT * FROM all_objects where object_name = '
|
USER_OBJECT | Poda podrobnosti o paketu, na primer object_id, create_date, last_ddl_time itd. Vseboval bo predmete, ki jih je ustvaril trenutni uporabnik. | SELECT * FROM user_objects where object_name = '
|
ALL_SOURCE | Daje vir predmetov, ki so jih ustvarili vsi uporabniki. | SELECT * FROM all_source where name = '
|
USER_SOURCE | Daje vir predmetov, ki jih je ustvaril trenutni uporabnik. | SELECT * FROM user_source where name = '
|
VSE_PROCEDURE | Poda podrobnosti podprograma, kot so object_id, podrobnosti o preobremenitvi itd., Ki so jih ustvarili vsi uporabniki. | SELECT * FROM all_procedures Where object_name = '
|
USER_PROCEDURES | Poda podrobnosti podprograma, kot so object_id, podrobnosti o preobremenitvi itd., Ki jih je ustvaril trenutni uporabnik. | SELECT * FROM user_procedures Where_ime_ime = ' |
DATOTEKA UTL - Pregled
UTL File je ločen pripomoček, ki ga Oracle nudi za izvajanje posebnih nalog. To se v glavnem uporablja za branje in pisanje datotek operacijskega sistema iz paketov PL / SQL ali podprogramov. Dobil je ločene funkcije za vnos informacij in pridobivanje informacij iz datotek. Omogoča tudi branje / pisanje v izvornem naboru znakov.
Programer lahko to uporabi za pisanje datotek operacijskega sistema katere koli vrste in datoteka bo zapisana neposredno na strežnik baze podatkov. Ime in pot do imenika bosta omenjena med pisanjem.
Povzetek
Zdaj smo se naučili paketov v PL / SQL in zdaj bi lahko delali v naslednjem.
- Paketi PL / SQL in njegove komponente
- Značilnosti paketov
- Napotitev in preobremenitev elementov paketa
- Upravljanje odvisnosti v paketih
- Ogled informacij o paketu
- Kaj je datoteka UTL