Oracle PL/SQL lagret procedure og funktioner med eksempler
Procedurer og funktioner er de underprogrammer, der kan oprettes og gemmes i databasen som databaseobjekter. De kan ogsรฅ kaldes eller henvises inde i de andre blokke.
Bortset fra dette vil vi dรฆkke de store forskelle mellem disse to underprogrammer. Vi skal ogsรฅ diskutere Oracle indbyggede funktioner.
Terminologier i PL/SQL underprogrammer
Fรธr vi lรฆrer om PL/SQL-underprogrammer, vil vi diskutere de forskellige terminologier, der er en del af disse underprogrammer. Nedenfor er de terminologier, som vi vil diskutere.
Parameter
Parameteren er variabel eller pladsholder for enhver gyldig PL/SQL datatype hvorigennem PL/SQL-underprogrammet udveksler vรฆrdierne med hovedkoden. Denne parameter giver mulighed for at give input til underprogrammerne og til f.eks.tract fra disse underprogrammer.
- Disse parametre bรธr defineres sammen med underprogrammerne pรฅ oprettelsestidspunktet.
- Disse parametre er inkluderet i den kaldende sรฆtning af disse underprogrammer for at interagere vรฆrdierne med underprogrammerne.
- Datatypen for parameteren i underprogrammet og den kaldende sรฆtning skal vรฆre den samme.
- Stรธrrelsen af โโdatatypen bรธr ikke nรฆvnes pรฅ tidspunktet for parametererklรฆringen, da stรธrrelsen er dynamisk for denne type.
Baseret pรฅ deres formรฅl er parametre klassificeret som
- IN parameter
- OUT parameter
- IN OUT parameter
IN parameter
- Denne parameter bruges til at give input til underprogrammerne.
- Det er en skrivebeskyttet variabel inde i underprogrammerne. Deres vรฆrdier kan ikke รฆndres inde i underprogrammet.
- I den kaldende sรฆtning kan disse parametre vรฆre en variabel eller en bogstavelig vรฆrdi eller et udtryk, for eksempel kan det vรฆre det aritmetiske udtryk som '5*8' eller 'a/b', hvor 'a' og 'b' er variable .
- Som standard er parametrene af IN-typen.
OUT parameter
- Denne parameter bruges til at fรฅ output fra underprogrammerne.
- Det er en lรฆse-skrive-variabel inde i underprogrammerne. Deres vรฆrdier kan รฆndres inde i underprogrammerne.
- I den kaldende sรฆtning skal disse parametre altid vรฆre en variabel for at holde vรฆrdien fra de aktuelle underprogrammer.
IN OUT parameter
- Denne parameter bruges bรฅde til at give input og til at fรฅ output fra underprogrammerne.
- Det er en lรฆse-skrive-variabel inde i underprogrammerne. Deres vรฆrdier kan รฆndres inde i underprogrammerne.
- I den kaldende sรฆtning skal disse parametre altid vรฆre en variabel for at holde vรฆrdien fra underprogrammerne.
Disse parametertyper bรธr nรฆvnes pรฅ tidspunktet for oprettelse af underprogrammerne.
RETURN
RETURN er nรธgleordet, der instruerer compileren til at skifte styringen fra underprogrammet til den kaldende sรฆtning. I underprogram RETURN betyder blot, at styringen skal forlade underprogrammet. Nรฅr controlleren finder RETURN nรธgleordet i underprogrammet, vil koden efter dette blive sprunget over.
Normalt vil forรฆldre- eller hovedblok kalde underprogrammerne, og derefter vil styringen skifte fra disse overordnede blok til de kaldede underprogrammer. RETURN i underprogrammet vil returnere styringen til deres overordnede blok. I tilfรฆlde af funktioner returnerer RETURN-sรฆtningen ogsรฅ vรฆrdien. Datatypen for denne vรฆrdi er altid nรฆvnt pรฅ tidspunktet for funktionsdeklarationen. Datatypen kan vรฆre af enhver gyldig PL/SQL-datatype.
Hvad er procedure i PL/SQL?
A Procedure i PL/SQL er en underprogramenhed, der bestรฅr af en gruppe PL/SQL-sรฆtninger, der kan kaldes ved navn. Hver procedure i PL/SQL har sit eget unikke navn, som den kan henvises til og kaldes med. Denne underprogramenhed i Oracle database gemmes som et databaseobjekt.
Bemรฆrk: Underprogram er intet andet end en procedure, og det skal oprettes manuelt i henhold til kravet. Nรฅr de er oprettet, vil de blive gemt som databaseobjekter.
Nedenfor er karakteristikaene for Procedure underprogramenhed i PL/SQL:
- Procedurer er selvstรฆndige blokke af et program, der kan gemmes i database.
- Kald til disse PLSQL-procedurer kan foretages ved at henvise til deres navn for at udfรธre PL/SQL-sรฆtningerne.
- Det bruges hovedsageligt til at udfรธre en proces i PL/SQL.
- Det kan have indlejrede blokke, eller det kan defineres og indlejres inde i de andre blokke eller pakker.
- Den indeholder erklรฆringsdel (valgfrit), udfรธrelsesdel, undtagelseshรฅndteringsdel (valgfri).
- Vรฆrdierne kan overfรธres til Oracle procedure eller hentes fra proceduren gennem parametre.
- Disse parametre bรธr indgรฅ i den kaldende erklรฆring.
- En procedure i SQL kan have en RETURN-sรฆtning til at returnere kontrolelementet til den kaldende blok, men den kan ikke returnere nogen vรฆrdier gennem RETURN-sรฆtningen.
- Procedurer kan ikke kaldes direkte fra SELECT-sรฆtninger. De kan kaldes fra en anden blok eller gennem EXEC nรธgleord.
Syntaks
CREATE OR REPLACE PROCEDURE <procedure_name> ( <parameterl IN/OUT <datatype> .. . ) [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- CREATE PROCEDURE instruerer compileren til at oprette en ny procedure i Oracle. Nรธgleord 'ELLER ERSTAT' instruerer kompileringen til at erstatte den eksisterende procedure (hvis nogen) med den nuvรฆrende.
- Procedurenavnet skal vรฆre unikt.
- Nรธgleord 'IS' vil blive brugt, nรฅr den lagrede procedure i Oracle er indlejret i nogle andre blokke. Hvis proceduren er selvstรฆndig, vil 'AS' blive brugt. Bortset fra denne kodningsstandard har begge samme betydning.
Eksempel 1: Oprettelse af procedure og kald ved hjรฆlp af EXEC
I dette eksempel skal vi lave en Oracle procedure, der tager navnet som input og udskriver velkomstbeskeden som output. Vi vil bruge EXEC-kommandoen til at kalde procedure.
CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2) IS BEGIN dbms_output.put_line (โWelcome '|| p_name); END; / EXEC welcome_msg (โGuru99โ);
Code Forklaring:
- Code line 1: Oprettelse af proceduren med navnet 'welcome_msg' og med en parameter 'p_name' af typen 'IN'.
- Code line 4: Udskrivning af velkomstbeskeden ved at sammenkรฆde inputnavnet.
- Proceduren er kompileret med succes.
- Code line 7Kald af proceduren ved hjรฆlp af EXEC-kommandoen med parameteren 'Guru99'. Proceduren udfรธres, og beskeden udskrives som "Velkommen Guru99. "
Hvad er funktion?
Funktioner er et selvstรฆndigt PL/SQL-underprogram. Ligesom PL/SQL-proceduren har funktioner et unikt navn, som det kan henvises til. Disse gemmes som PL/SQL-databaseobjekter. Nedenfor er nogle af funktionernes karakteristika.
- Funktioner er en selvstรฆndig blok, der hovedsageligt bruges til beregningsformรฅl.
- Funktion brug RETURN nรธgleord til at returnere vรฆrdien, og datatypen for dette er defineret pรฅ tidspunktet for oprettelsen.
- En funktion skal enten returnere en vรฆrdi eller hรฆve undtagelsen, dvs. returnering er obligatorisk i funktioner.
- Funktion uden DML-sรฆtninger kan kaldes direkte i SELECT-forespรธrgsel, mens funktionen med DML-operation kun kan kaldes fra andre PL/SQL-blokke.
- Det kan have indlejrede blokke, eller det kan defineres og indlejres inde i de andre blokke eller pakker.
- Den indeholder erklรฆringsdel (valgfrit), udfรธrelsesdel, undtagelseshรฅndteringsdel (valgfri).
- Vรฆrdierne kan overfรธres til funktionen eller hentes fra proceduren gennem parametrene.
- Disse parametre bรธr indgรฅ i den kaldende erklรฆring.
- En PLSQL-funktion kan ogsรฅ returnere vรฆrdien gennem OUT-parametre ud over at bruge RETURN.
- Da det altid vil returnere vรฆrdien, ledsager det i kaldende sรฆtning altid med tildelingsoperator for at udfylde variablerne.
Syntaks
CREATE OR REPLACE FUNCTION <procedure_name> ( <parameterl IN/OUT <datatype> ) RETURN <datatype> [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- CREATE FUNCTION instruerer compileren om at oprette en ny funktion. Nรธgleord 'OR REPLACE' instruerer compileren til at erstatte den eksisterende funktion (hvis nogen) med den nuvรฆrende.
- Funktionsnavnet skal vรฆre unikt.
- RETURN datatype skal nรฆvnes.
- Nรธgleordet 'IS' vil blive brugt, nรฅr proceduren er indlejret i nogle andre blokke. Hvis proceduren er selvstรฆndig, vil 'AS' blive brugt. Bortset fra denne kodningsstandard har begge samme betydning.
Eksempel 1: Oprettelse af funktion og kald den ved hjรฆlp af anonym blok
I dette program skal vi oprette en funktion, der tager navnet som input og returnerer velkomstbeskeden som output. Vi kommer til at bruge anonym blok og vรฆlg erklรฆring til at kalde funktionen.
CREATE OR REPLACE FUNCTION welcome_msgJune ( p_name IN VARCHAR2) RETURN VAR.CHAR2 IS BEGIN RETURN (โWelcome โ|| p_name); END; / DECLARE lv_msg VARCHAR2(250); BEGIN lv_msg := welcome_msg_func (โGuru99โ); dbms_output.put_line(lv_msg); END; SELECT welcome_msg_func(โGuru99:) FROM DUAL;
Code Forklaring:
- Code line 1: Oprettelse af Oracle funktion med navnet 'welcome_msg_func' og med รฉn parameter 'p_name' af typen 'IN'.
- Code line 2: erklรฆrer returtypen som VARCHAR2
- Code line 5: Returnerer den sammenkรฆdede vรฆrdi 'Velkommen' og parametervรฆrdien.
- Code line 8: Anonym blok for at kalde ovenstรฅende funktion.
- Code line 9: Erklรฆrer variablen med datatype samme som returneringsdatatypen for funktionen.
- Code line 11: Kalder funktionen og udfylder returvรฆrdien til variablen 'lv_msg'.
- Code line 12Udskriver variabelvรฆrdien. Outputtet du fรฅr her er "Velkommen Guru99 "
- Code line 14: Kalder den samme funktion gennem SELECT-sรฆtning. Returvรฆrdien dirigeres direkte til standardudgangen.
Ligheder mellem procedure og funktion
- Begge kan kaldes fra andre PL/SQL-blokke.
- Hvis den i underprogrammet rejste undtagelse ikke hรฅndteres i underprogrammet undtagelse hรฅndtering sektionen, sรฅ forplanter den sig til den kaldende blok.
- Begge kan have sรฅ mange parametre som nรธdvendigt.
- Begge behandles som databaseobjekter i PL/SQL.
Procedure vs. Funktion: Nรธgleforskelle
| Procedure | Funktion |
|---|---|
| Bruges hovedsageligt til at udfรธre en bestemt proces | Bruges hovedsageligt til at udfรธre nogle beregninger |
| Kan ikke indkalde SELECT-sรฆtning | En funktion, der ikke indeholder DML-sรฆtninger, kan kaldes i SELECT-sรฆtningen |
| Brug parameteren OUT for at returnere vรฆrdien | Brug RETURN for at returnere vรฆrdien |
| Det er ikke obligatorisk at returnere vรฆrdien | Det er obligatorisk at returnere vรฆrdien |
| RETURN forlader blot styringen fra underprogrammet. | RETURN forlader styringen fra underprogrammet og returnerer ogsรฅ vรฆrdien |
| Returdatatype vil ikke blive angivet pรฅ oprettelsestidspunktet | Returdatatype er obligatorisk pรฅ oprettelsestidspunktet |
Indbyggede funktioner i PL/SQL
PL / SQL indeholder forskellige indbyggede funktioner til at arbejde med strenge og datodatatype. Her skal vi se de almindeligt anvendte funktioner og deres brug.
Konverteringsfunktioner
Disse indbyggede funktioner bruges til at konvertere en datatype til en anden datatype.
| Funktionsnavn | Brug | Eksempel |
|---|---|---|
| TO_CHAR | Konverterer den anden datatype til karakterdatatype | TO_CHAR(123); |
| TO_DATE (streng, format) | Konverterer den givne streng til dato. Strengen skal matche formatet. |
TO_DATE('2015-JAN-15', 'ร ร ร ร -MAN-DD'); Produktion: 1 / 15 / 2015 |
| TO_NUMBER (tekst, format) |
Konverterer teksten til taltype i det givne format. Informat '9' angiver antallet af cifre |
Vรฆlg TO_NUMBER('1234โฒ,'9999') fra dobbelt;
Produktion: 1234 Vรฆlg TO_NUMBER('1,234.45โฒ,'9,999.99') fra dobbelt; Produktion: 1234 |
Strengfunktioner
Det er de funktioner, der bruges pรฅ karakterdatatypen.
| Funktionsnavn | Brug | Eksempel |
|---|---|---|
| INSTR(tekst; streng; start; forekomst) | Giver positionen af โโbestemt tekst i den givne streng.
|
Vรฆlg INSTR('AEROPLANE','E',2,1) fra dual
Produktion: 2 Vรฆlg INSTR('AEROPLANE','E',2,2) fra dual Produktion: 9 (2nd forekomst af E) |
| SUBSTR (tekst, start, lรฆngde) | Giver understrengvรฆrdien for hovedstrengen.
|
vรฆlg substr('flyvemaskine',1,7) fra dual
Produktion: aeropla |
| รVRE (tekst) | Returnerer det store bogstav i den angivne tekst | Vรฆlg upper('guru99') fra dual;
Produktion: GURU99 |
| NEDRE ( tekst ) | Returnerer smรฅ bogstaver i den angivne tekst | Vรฆlg lavere ('AerOpLane') fra dobbelt;
Produktion: flyvemaskine |
| INITCAP (tekst) | Returnerer den givne tekst med startbogstavet med stort bogstav. | Vรฆlg ('guru99') fra dual
Produktion: Guru99 Vรฆlg ('min historie') fra dobbelt Produktion: Min historie |
| LรNGDE (tekst) | Returnerer lรฆngden af โโden givne streng | Vรฆlg LENGTH ('guru99') fra dual;
Produktion: 6 |
| LPAD (tekst, lรฆngde, pad_char) | Padder strengen i venstre side for den givne lรฆngde (samlet streng) med det givne tegn | Vรฆlg LPAD('guru99', 10, '$') fra dual;
Produktion: $$$$guru99 |
| RPAD (tekst, lรฆngde, pad_char) | Polster strengen i hรธjre side for den givne lรฆngde (total streng) med det givne tegn | Vรฆlg RPAD('guru99โฒ,10,'-') fra dual
Produktion: guru99โ- |
| LTRIM ( tekst ) | Trimmer det indledende hvide mellemrum fra teksten | Vรฆlg LTRIM(' Guru99') fra dobbelt;
Produktion: Guru99 |
| RTRIM ( tekst ) | Trimmer det efterfรธlgende hvide mellemrum fra teksten | Vรฆlg RTRIM('Guru99') fra dobbelt;
Produktion; Guru99 |
Dato funktioner
Dette er funktioner, der bruges til at manipulere med datoer.
| Funktionsnavn | Brug | Eksempel |
|---|---|---|
| ADD_MONTHS (dato, antal mรฅneder) | Tilfรธjer de givne mรฅneder til datoen | ADD_MONTH('2015-01-01',5);
Produktion: 05 / 01 / 2015 |
| SYSDATE | Returnerer den aktuelle dato og klokkeslรฆt for serveren | Vรฆlg SYSDATE fra dual;
Produktion: 10/4/2015 2:11:43 |
| BAGAGERUM | Afrund datovariablen til den lavere mulige vรฆrdi | vรฆlg sysdate, TRUNC(sysdate) fra dual;
Produktion: 10/4/2015 2:12:39 10/4/2015 |
| ROUND | Afrunder datoen til nรฆrmeste grรฆnse, enten hรธjere eller lavere | Vรฆlg sysdate, ROUND(sysdate) fra dobbelt
Produktion: 10/4/2015 2:14:34 10/5/2015 |
| MONTHS_BETWEEN | Returnerer antallet af mรฅneder mellem to datoer | Vรฆlg MONTHS_BETWEEN (sysdate+60, sysdate) fra dobbelt
Produktion: 2 |
Resumรฉ
I dette kapitel har vi lรฆrt fรธlgende.
- Sรฅdan opretter du Procedure og forskellige mรฅder at kalde det pรฅ
- Sรฅdan opretter du Funktion og forskellige mรฅder at kalde det pรฅ
- Ligheder og forskelle mellem procedure og funktion
- Parametre og RETURN almindelige terminologier i PL/SQL underprogrammer
- Fรฆlles indbyggede funktioner i Oracle PL / SQL


