Oracle PL / SQL paket: vrsta, specifikacija, sadržaj (primjer)

Sadržaj:

Anonim

Što je paket u Oracleu?

PL / SQL paket logično je grupiranje povezanog potprograma (postupka / funkcije) u jedan element. Paket se sastavlja i pohranjuje kao objekt baze podataka koji se kasnije može koristiti.

U ovom vodiču naučit ćete-

  • Komponente paketa
  • Specifikacija paketa
  • Tijelo paketa
  • Upućivanje na elemente paketa
  • Stvorite paket u PL / SQL-u
  • Proslijede izjave
  • Korištenje kursora u paketu
  • Preopterećenje
  • Ovisnost u paketima
  • Informacije o paketu
  • UTL FILE - Pregled

Komponente paketa

PL / SQL paket ima dvije komponente.

  • Specifikacija paketa
  • Tijelo paketa

Specifikacija paketa

Specifikacija paketa sastoji se od deklaracije svih javnih varijabli, pokazivača, objekata, procedura, funkcija i iznimki.

Ispod je nekoliko karakteristika specifikacije paketa.

  • Elementima koji su svi deklarirani u specifikaciji može se pristupiti izvan paketa. Takvi su elementi poznati kao javni elementi.
  • Specifikacija paketa je samostalni element koji znači da može postojati sam bez tijela paketa.
  • Kad god se paket odnosi na instancu paketa, kreira se za tu određenu sesiju.
  • Nakon izrade instance za sesiju, svi elementi paketa koji su pokrenuti u toj instanci vrijede do kraja sesije.

Sintaksa

CREATE [OR REPLACE] PACKAGE 
IS… END 

Gornja sintaksa prikazuje stvaranje specifikacije paketa.

Tijelo paketa

Sastoji se od definicije svih elemenata koji su prisutni u specifikaciji paketa. Također može imati definiciju elemenata koji nisu deklarirani u specifikaciji, ti se elementi nazivaju privatnim elementima i mogu se pozivati ​​samo iz paketa.

Ispod su karakteristike tijela paketa.

  • Treba sadržavati definicije za sve potprograme / pokazivače koji su deklarirani u specifikaciji.
  • Također može imati više potprograma ili drugih elemenata koji nisu deklarirani u specifikaciji. Oni se nazivaju privatnim elementima.
  • To je pouzdan objekt i ovisi o specifikaciji paketa.
  • Stanje tijela paketa postaje 'Nevaljano' kad god se sastavi specifikacija. Stoga ga treba ponovno sastaviti svaki put nakon sastavljanja specifikacije.
  • Privatne elemente treba definirati prije nego što se koriste u tijelu paketa.
  • Prvi dio paketa dio je globalne deklaracije. To uključuje varijable, pokazivače i privatne elemente (prosljeđivanje) koja je vidljiva cijelom paketu.
  • Posljednji dio paketa je dio inicijalizacije paketa koji se izvršava jednom kad god se paket prvi put uputi u sesiju.

Sintaksa:

CREATE [OR REPLACE] PACKAGE BODY 
IS.END 
  • Gornja sintaksa prikazuje stvaranje tijela paketa.

Sada ćemo vidjeti kako uputiti elemente paketa u program.

Upućivanje na elemente paketa

Nakon što se elementi deklariraju i definiraju u paketu, moramo uputiti elemente da ih koriste.

Svi javni elementi paketa mogu se uputiti pozivom naziva paketa iza kojeg slijedi ime elementa odvojeno točkom tj. '. '.

Javna varijabla paketa također se može koristiti na isti način za dodjeljivanje i dohvaćanje vrijednosti iz njih, tj. ' . '.

Stvorite paket u PL / SQL-u

U PL / SQL-u kad god se paket uputi / pozove u sesiji, za taj će se paket stvoriti nova instanca.

Oracle pruža mogućnost inicijalizacije elemenata paketa ili izvođenja bilo koje aktivnosti u vrijeme izrade ove instance putem 'Inicijalizacije paketa'.

Ovo nije ništa drugo doli izvedbeni blok koji je zapisan u tijelu paketa nakon definiranja svih elemenata paketa. Ovaj će se blok izvršiti kad god se paket prvi put uputi u sesiji.

Sintaksa

CREATE [OR REPLACE] PACKAGE BODY 
IS.BEGINEEND 
  • Gornja sintaksa prikazuje definiciju inicijalizacije paketa u tijelu paketa.

Proslijede izjave

Prosljeđivanje deklaracije / reference u paketu nije ništa drugo nego zasebno deklariranje privatnih elemenata i njihovo definiranje u kasnijem dijelu tijela paketa.

Privatni elementi mogu se uputiti samo ako je to već deklarirano u tijelu paketa. Iz tog razloga koristi se prosljeđivanje izjave. No, prilično je neobično za upotrebu jer se u većini slučajeva privatni elementi deklariraju i definiraju u prvom dijelu tijela paketa.

Prosljeđivanje je opcija koju nudi Oracle, nije obavezna, a korištenje i neupotreba ovisi o zahtjevima programera.

Sintaksa:

CREATE [OR REPLACE] PACKAGE BODY 
IS.BEGIN
;END 

Gornja sintaksa prikazuje prosljeđivanje deklaracije. Privatni elementi deklarirani su odvojeno u prednjem dijelu paketa, a definirani su u kasnijem dijelu.

Korištenje kursora u paketu

Za razliku od ostalih Elemenata, treba biti oprezan pri korištenju pokazivača unutar paketa.

Ako je kursor definiran u specifikaciji paketa ili u globalnom dijelu tijela paketa, kursor će se jednom otvoriti zadržati do kraja sesije.

Stoga uvijek treba upotrijebiti atribute kursora '% ISOPEN' za provjeru stanja kursora prije nego što ga uputite.

Preopterećenje

Preopterećenje je koncept imati mnogo podprograma s istim imenom. Ti se podprogrami međusobno razlikuju po brojnim parametrima ili vrstama parametara ili povratnom tipu, tj. Podprogram s istim imenom, ali s različitim brojem parametara, različitim tipom parametara ili drugačijim ponovnim tipom smatraju se preopterećenjem.

To je korisno kada mnogi potprogrami trebaju obaviti isti zadatak, ali način pozivanja svakog od njih trebao bi biti drugačiji. U tom će slučaju naziv podprograma ostati isti za sve, a parametri će se mijenjati prema pozivu.

Primjer 1 : U ovom ćemo primjeru stvoriti paket za dobivanje i postavljanje vrijednosti podataka zaposlenika u tablici 'emp'. Funkcija get_record vratit će izlaz tipa zapisa za zadani broj zaposlenika, a postupak set_record umetnut će zapis vrste zapisa u tablicu emp.

Korak 1) Izrada 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:/

Izlaz:

Package created

Objašnjenje koda

  • Redak 1-5 : Stvaranje specifikacije paketa za guru99_get_set s jednim postupkom i jednom funkcijom. To su dvoje javni elementi ovog paketa.

Korak 2) Paket sadrži tijelo Paketa, gdje će biti definirane sve procedure i funkcije stvarne definicije. U ovom koraku kreira se tijelo 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:/

Izlaz:

Package body created

Objašnjenje koda

  • Redak koda 7 : Stvaranje tijela paketa.
  • Redak koda 9-16 : Definiranje elementa 'set_record' koji je deklariran u specifikaciji. To je isto kao definiranje samostalnog postupka u PL / SQL-u.
  • Redak koda 17-24: Definiranje elementa 'get_record'. To je isto kao definiranje samostalne funkcije.
  • Redak koda 25-26: Definiranje dijela inicijalizacije paketa.

Korak 3) Stvaranje anonimnog bloka za umetanje i prikaz zapisa pozivajući se na gore stvoreni 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:/

Izlaz:

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

Objašnjenje koda:

  • Redak koda 34-37: Popunjavanje podataka za varijablu tipa zapisa u anonimnom bloku za pozivanje elementa 'set_record' paketa.
  • Redak koda 38: Pozvan je 'set_record' paketa guru99_get_set. Sada je paket instanciran i trajat će do kraja sesije.
  • Dio inicijalizacije paketa izvršava se jer je ovo prvi poziv paketu.
  • Zapis u koji je element 'set_record' umetnuo u tablicu.
  • Redak koda 41: Pozivanje elementa 'get_record' radi prikazivanja detalja umetnutog zaposlenika.
  • Paket se drugi put upućuje tijekom poziva 'get_record' na paket. Ali dio inicijalizacije ovaj se put ne izvršava jer je paket već inicijaliziran u ovoj sesiji.
  • Kodni redak 42-45: Ispis podataka o zaposleniku.

Ovisnost u paketima

Budući da je paket logično grupiranje povezanih stvari, on ima neke ovisnosti. Slijedi ovisnost o kojoj treba voditi računa.

  • Specifikacija je samostalni objekt.
  • Tijelo paketa ovisi o specifikaciji.
  • Tijelo paketa može se sastaviti odvojeno. Kad god se sastavi specifikacija, tijelo treba ponovno sastaviti jer će postati nevaljano.
  • Podprogram u tijelu paketa koji ovisi o privatnom elementu trebao bi se definirati tek nakon deklaracije privatnog elementa.
  • Objekti baze podataka koji su navedeni u specifikaciji i tijelo moraju biti u valjanom statusu u vrijeme sastavljanja paketa.

Informacije o paketu

Jednom kada se kreiraju podaci o paketu, podaci o paketu, kao što su izvor paketa, detalji potprograma i detalji preopterećenja, dostupni su u tablicama definicije podataka Oracle.

Ispod tablice nalazi se tablica definicije podataka i podaci o paketu koji su dostupni u tablici.

Naziv tablice Opis Upit
ALL_OBJECT Daje detalje o paketu poput object_id, create_date, last_ddl_time itd. Sadržat će objekte koje su stvorili svi korisnici. ODABERI * IZ svih_objekata gdje je ime_ime = ''
USER_OBJECT Daje detalje o paketu poput object_id, create_date, last_ddl_time itd. Sadržat će objekte koje je stvorio trenutni korisnik. SELECT * FROM user_objects where object_name = ' '
ALL_SOURCE Daje izvor objekata koje su stvorili svi korisnici. ODABERITE * IZ all_source gdje je ime = ''
USER_SOURCE Daje izvor objekata koje je stvorio trenutni korisnik. ODABERITE * IZ korisničkog_izvora gdje je ime = ''
SVI_PROCEDURE Daje detalje potprograma kao što su object_id, detalji preopterećenja itd. Koje su stvorili svi korisnici. SELECT * FROM all_procedures Where_name_ime = ' '
KORISNIČKI_PROCEDURI Daje detalje potprograma kao što su object_id, detalji preopterećenja itd. Koje je stvorio trenutni korisnik. SELECT * FROM user_procedures Where_name_ime = ' '

UTL FILE - Pregled

UTL datoteka zasebni je uslužni paket koji Oracle nudi za izvršavanje posebnih zadataka. To se uglavnom koristi za čitanje i pisanje datoteka operativnog sustava iz PL / SQL paketa ili potprograma. Dobio je zasebne funkcije za stavljanje podataka i za dobivanje podataka iz datoteka. Također omogućuje čitanje / pisanje u izvornom skupu znakova.

Programer to može koristiti za pisanje datoteka operativnog sustava bilo koje vrste i datoteka će biti zapisana izravno na poslužitelj baze podataka. Ime i put do direktorija spomenut će se u trenutku pisanja.

Sažetak

Sad smo naučili pakete u PL / SQL, a vi biste trebali moći raditi na sljedećem.

  • PL / SQL paketi i njegove komponente
  • Karakteristike paketa
  • Upućivanje i preopterećenje elemenata paketa
  • Upravljanje ovisnostima u paketima
  • Pregled podataka o paketu
  • Što je UTL datoteka