Oracle PL/SQL lagret procedure og funktioner med eksempler

I denne vejledning vil du se den detaljerede beskrivelse af, hvordan du opretter og udfรธrer de navngivne blokke (procedurer og funktioner).

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

  1. IN parameter
  2. OUT parameter
  3. 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.

Funktioner i PL/SQL

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.

Funktioner i PL/SQL

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.

  • tekst โ€“ Hovedstreng
  • streng โ€“ tekst, der skal sรธges i
  • start โ€“ startposition for sรธgningen (valgfrit)
  • overensstemmelse โ€“ forekomst af den sรธgte streng (valgfrit)
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.

  • tekst โ€“ hovedstreng
  • start โ€“ startposition
  • lรฆngde โ€“ lรฆngde, der skal understrenges
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

Opsummer dette indlรฆg med: