Hva er pakke i Oracle?
PL / SQL-pakken er en logisk gruppering av et beslektet underprogram (prosedyre / funksjon) i et enkelt element. En pakke blir samlet og lagret som et databaseobjekt som kan brukes senere.
I denne veiledningen vil du lære-
- Komponenter av pakker
- Pakke spesifikasjon
- Pakkehus
- Henvisende pakkeelementer
- Lag pakke i PL / SQL
- Fremovererklæringer
- Markørbruk i pakke
- Overbelastning
- Avhengighet i pakker
- Pakkeinformasjon
- UTL FILE - En oversikt
Komponenter av pakker
PL / SQL-pakken har to komponenter.
- Pakke spesifikasjon
- Pakkehus
Pakke spesifikasjon
Pakkespesifikasjon består av en erklæring om alle offentlige variabler, markører, objekter, prosedyrer, funksjoner og unntak.
Nedenfor er noen kjennetegn ved pakkspesifikasjonen.
- Elementene som alle er deklarert i spesifikasjonen, er tilgjengelige fra utsiden av pakken. Slike elementer er kjent som et offentlig element.
- Pakkespesifikasjonen er et frittstående element som betyr at den kan eksistere alene uten pakkeinnhold.
- Hver gang en pakke har henvist, opprettes en forekomst av pakken for den aktuelle økten.
- Etter at forekomsten er opprettet for en økt, er alle pakkeelementene som initieres i den forekomsten gyldige til slutten av økten.
Syntaks
CREATE [OR REPLACE] PACKAGEIS … END
Ovennevnte syntaks viser oppretting av pakkespesifikasjon.
Pakkehus
Den består av definisjonen av alle elementene som er tilstede i pakkespesifikasjonen. Det kan også ha en definisjon av elementer som ikke er deklarert i spesifikasjonen, disse elementene kalles private elementer og kan bare kalles fra innsiden av pakken.
Nedenfor er kjennetegn ved en pakke.
- Den skal inneholde definisjoner for alle underprogrammene / markørene som er deklarert i spesifikasjonen.
- Det kan også ha flere underprogrammer eller andre elementer som ikke er deklarert i spesifikasjonen. Disse kalles private elementer.
- Det er et pålitelig objekt, og det avhenger av pakkespesifikasjonen.
- Pakkenes tilstand blir 'Ugyldig' når spesifikasjonen blir samlet. Derfor må den kompileres på nytt hver gang etter utarbeidelsen av spesifikasjonen.
- De private elementene bør defineres først før de brukes i pakken.
- Den første delen av pakken er den globale erklæringsdelen. Dette inkluderer variabler, markører og private elementer (fremover erklæring) som er synlig for hele pakken.
- Den siste delen av pakken er pakkeinitialiseringsdel som kjøres en gang hver gang en pakke blir henvist første gang i økten.
Syntaks:
CREATE [OR REPLACE] PACKAGE BODYIS . END
- Ovennevnte syntaks viser opprettelsen av pakkeinnholdet.
Nå skal vi se hvordan vi skal henvise pakkeelementer i programmet.
Henvisende pakkeelementer
Når elementene er deklarert og definert i pakken, må vi henvise elementene for å bruke dem.
Alle de offentlige elementene i pakken kan henvises ved å ringe pakkenavnet etterfulgt av elementnavnet atskilt med periode, dvs. '
Den offentlige variabelen til pakken kan også brukes på samme måte for å tilordne og hente verdier fra dem, dvs. '
Lag pakke i PL / SQL
I PL / SQL hver gang en pakke blir henvist / kalt i en økt, opprettes en ny forekomst for den pakken.
Oracle tilbyr et anlegg for å initialisere pakkeelementer eller for å utføre aktiviteter på tidspunktet for denne forekomsten, gjennom "Pakkeinitialisering".
Dette er ingenting annet enn en utførelsesblokk som er skrevet i pakkeelementet etter å ha definert alle pakkeelementene. Denne blokken vil bli utført hver gang en pakke blir henvist for første gang i økten.
Syntaks
CREATE [OR REPLACE] PACKAGE BODYIS .BEGINE END
- Syntaksen ovenfor viser definisjonen av initialisering av pakken i pakkens kropp.
Fremovererklæringer
Videresend erklæring / referanse i pakken er ikke annet enn å erklære de private elementene separat og definere det i den senere delen av pakken.
Private elementer kan bare henvises hvis de allerede er deklarert i pakken. Av denne grunn brukes fremover erklæring. Men det er ganske uvanlig å bruke fordi det meste av tiden private elementer blir deklarert og definert i den første delen av pakken.
Fremovererklæring er et alternativ fra Oracle, det er ikke obligatorisk, og bruk og ikke bruk er opp til programmørens krav.
Syntaks:
CREATE [OR REPLACE] PACKAGE BODYIS … … .BEGIN ;END
Ovennevnte syntaks viser fremover erklæring. De private elementene blir deklarert separat i den fremre delen av pakken, og de er definert i den senere delen.
Markørbruk i pakke
I motsetning til andre elementer må man være forsiktig med å bruke markører inne i pakken.
Hvis markøren er definert i pakkespesifikasjonen eller i en global del av pakkeelementet, vil markøren når den er åpnet fortsette til slutten av økten.
Så man bør alltid bruke markørattributtene '% ISOPEN' for å verifisere tilstanden til markøren før man henviser til den.
Overbelastning
Overbelastning er konseptet med å ha mange underprogrammer med samme navn. Disse underprogrammene vil være forskjellige fra hverandre ved hjelp av et antall parametere eller typer parametere eller returtype, dvs. underprogram med samme navn, men med forskjellig antall parametere, forskjellige typer parametere eller annen retype blir betraktet som overbelastning.
Dette er nyttig når mange underprogrammer trenger å gjøre den samme oppgaven, men måten å ringe hver av dem på, bør være forskjellig. I dette tilfellet vil underprogrammets navn holdes likt for alle, og parametrene vil endres i henhold til anropsuttalelsen.
Eksempel 1 : I dette eksemplet skal vi lage en pakke for å få og sette verdiene til ansattes informasjon i 'emp' -tabellen. Get_record-funksjonen returnerer posttypeutgangen for det gitte ansattnummeret, og set_record-prosedyren vil sette inn posttypeposten i emp-tabellen.
Trinn 1) Opprettelse av pakkespesifikasjon
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:/
Produksjon:
Package created
Kode Forklaring
- Kodelinje 1-5 : Opprette pakkespesifikasjonen for guru99_get_set med en prosedyre og en funksjon. Disse to er nå offentlige elementer i denne pakken.
Trinn 2) Pakken inneholder pakkeelement, der alle prosedyrer og funksjoner faktisk definisjon vil bli definert. I dette trinnet blir Package Body opprettet.
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:/
Produksjon:
Package body created
Kode Forklaring
- Kodelinje 7 : Opprette pakken.
- Kodelinje 9-16 : Definere elementet 'set_record' som er deklarert i spesifikasjonen. Dette er det samme som å definere den frittstående prosedyren i PL / SQL.
- Kodelinje 17-24: Definere elementet 'get_record'. Det er det samme som å definere den frittstående funksjonen.
- Kodelinje 25-26: Definere pakkeinitialiseringsdelen.
Trinn 3) Opprette en anonym blokk for å sette inn og vise postene ved å referere til pakken som er opprettet ovenfor.
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:/
Produksjon:
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
Kode Forklaring:
- Kodelinje 34-37: Fyll ut dataene for posttypevariabelen i en anonym blokk for å ringe "set_record" -elementet i pakken.
- Kodelinje 38: Det er blitt ringt til 'set_record' for pakken guru99_get_set. Nå er pakken instantiert, og den vil vare til slutten av økten.
- Pakkeinitialiseringsdelen utføres siden dette er den første samtalen til pakken.
- Posten settes inn av 'set_record' elementet i tabellen.
- Kodelinje 41: Å ringe "get_record" -elementet for å vise detaljene til den innsatte medarbeideren.
- Pakken blir henvist for andre gang under 'get_record' samtalen til pakken. Men initialiseringsdelen utføres ikke denne gangen da pakken allerede er initialisert i denne økten.
- Kodelinje 42-45: Skrive ut ansattens detaljer.
Avhengighet i pakker
Siden pakken er den logiske grupperingen av relaterte ting, har den noen avhengigheter. Følgende er avhengigheten som skal tas vare på.
- En spesifikasjon er et frittstående objekt.
- En pakkeorganisasjon er avhengig av spesifikasjon.
- Pakkehuset kan samles separat. Hver gang spesifikasjoner blir samlet, må kroppen kompileres på nytt, da den blir ugyldig.
- Underprogrammet i pakkeelementet som er avhengig av et privat element, skal bare defineres etter erklæringen om det private elementet.
- Databaseobjektene som er referert i spesifikasjonen og kroppen må være i gyldig status på tidspunktet for pakkesammensetningen.
Pakkeinformasjon
Når pakkeinformasjonen er opprettet, er pakkeinformasjonen som pakkekilde, underprograminformasjon og overbelastningsdetaljer tilgjengelig i Oracle-datadefinisjonstabellene.
Tabellen nedenfor gir datadefinisjonstabellen og pakkeinformasjonen som er tilgjengelig i tabellen.
Tabellnavn | Beskrivelse | Spørsmål |
ALL_OBJECT | Gir detaljene i pakken som object_id, creation_date, last_ddl_time, etc. Den vil inneholde objektene opprettet av alle brukere. | VELG * FRA all_objects hvor object_name = '
|
USER_OBJECT | Gir detaljene i pakken som object_id, creation_date, last_ddl_time, etc. Den vil inneholde objektene opprettet av den nåværende brukeren. | VELG * FRA brukerobjekter der object_name = '
|
ALL_SOURCE | Gir kilden til objektene opprettet av alle brukere. | VELG * FRA all_source hvor name = '
|
USER_SOURCE | Gir kilden til objektene opprettet av den nåværende brukeren. | VELG * FRA brukerkilde der navn = '
|
ALL_PROCEDURER | Gir underprogramopplysningene som object_id, overbelastningsdetaljer osv. Opprettet av alle brukere. | VELG * FRA all_prosedyrer Hvor object_name = '
|
USER_PROCEDURES | Gir underprogramopplysningene som objekt_id, overbelastningsdetaljer osv. Opprettet av den nåværende brukeren. | VELG * FRA user_procedures Where object_name = '
|
UTL FILE - En oversikt
UTL File er den separate verktøypakken som Oracle tilbyr for å utføre spesielle oppgaver. Dette brukes hovedsakelig til å lese og skrive operativsystemfilene fra PL / SQL-pakker eller underprogrammer. Den fikk de separate funksjonene for å sette informasjonen og for å få informasjonen fra filer. Det gjør det også mulig å lese / skrive i det opprinnelige tegnsettet.
Programmereren kan bruke dette til å skrive operativsystemfiler av hvilken som helst type, og filen vil bli skrevet direkte til databaseserveren. Navnet og katalogstien vil bli nevnt i skrivende stund.
Sammendrag
Vi har nå lært pakkene i PL / SQL, og du skal nå kunne jobbe i det følgende.
- PL / SQL-pakker og dets komponenter
- Kjennetegn på pakker
- Henvisning og overbelastning av pakkeelementer
- Administrere avhengigheter i pakker
- Vise pakkeinformasjon
- Hva er UTL File