Oracle PL/SQL lagret procedure og funktioner med eksempler

⚡ Smart opsummering

PL/SQL-underprogrammer er navngivne blokke, procedurer og funktioner, der gemmes i databasen og kaldes ved navn. En procedure kører en proces, og en funktion returnerer en værdi, hvor begge udveksles data via parametrene IN, OUT og IN OUT samt RETURN-nøgleordet.

  • 🧩 To underprogrammer: Procedurer udfører en proces; funktioner udfører en beregning og returnerer en værdi.
  • 🔌 Parametre: IN sender input, OUT returnerer output, og IN OUT gør begge dele.
  • ↩️ VEND TILBAGE: Returnerer kontrollen til den, der kalder den; i en funktion returnerer den også en værdi af en deklareret type.
  • 🗄️ Lagrede objekter: Begge gemmes som databaseobjekter og kan kaldes fra andre blokke.
  • 🔎 VÆLG Brug: En funktion uden DML kan kaldes i en SELECT; det kan en procedure ikke.
  • ⚖️ Nøgleforskel: En funktion skal returnere en værdi, mens en procedure ikke behøver det.
  • 🛠️ Indbyggede funktioner: Oracle sender konverterings-, streng- og datofunktioner klar til brug.

Oracle PL/SQL-lagrede procedurer og funktioner

Hvad er PL/SQL-underprogrammer?

I denne vejledning ser du en detaljeret beskrivelse af, hvordan du opretter og udfører de navngivne blokke, procedurer og funktioner.

Procedurer og funktioner er underprogrammer, der kan oprettes og gemmes i databasen som databaseobjekter. De kan også kaldes eller refereres til i andre blokke.

Vi dækker også de væsentligste forskelle mellem disse to underprogrammer og diskuterer Oracle indbyggede funktioner.

Terminologier i PL/SQL underprogrammer

Før vi lærer om PL/SQL-underprogrammer, diskuterer vi de forskellige terminologier, der er en del af disse underprogrammer.

Parameter

En parameter er en variabel eller pladsholder for enhver gyldig PL/SQL-datatype hvorigennem PL/SQL-underprogrammet udveksler værdier med hovedkoden. Denne parameter tillader input til underprogrammerne og f.eks.tracion af værdier fra dem.

  • Disse parametre bør defineres sammen med underprogrammerne på oprettelsestidspunktet.
  • De er inkluderet i kaldende sætning for at interagere med underprogrammerne.
  • Datatypen for parameteren i underprogrammet og den kaldende sætning skal være den samme.
  • Størrelsen på datatypen bør ikke nævnes ved parameterdeklarationen, da størrelsen er dynamisk.

Baseret på deres formål er parametrene klassificeret som:

  1. IN parameter
  2. OUT parameter
  3. IN OUT parameter

IN parameter

  • Bruges til at give input til underprogrammerne.
  • Det er en skrivebeskyttet variabel i underprogrammerne; dens værdi kan ikke ændres i underprogrammet.
  • I den kaldende sætning kan det være en variabel, en literal værdi eller et udtryk, f.eks. '5*8' eller 'a/b'.
  • Som standard er parametre af typen IN.

OUT parameter

  • Bruges til at hente output fra underprogrammer.
  • Det er en læse-skrive-variabel i underprogrammerne; dens værdi kan ændres i dem.
  • I kaldende sætningen skal det altid være en variabel, der indeholder værdien fra underprogrammet.

IN OUT parameter

  • Bruges både til at give input og hente output fra underprogrammerne.
  • Det er en læse-skrive-variabel i underprogrammerne; dens værdi kan ændres i dem.
  • I kaldende sætningen skal det altid være en variabel, der indeholder værdien fra underprogrammet.

Parametertypen bør nævnes ved oprettelsen af ​​underprogrammerne.

RETURN

RETURN er nøgleordet, der instruerer compileren til at skifte kontrol fra underprogrammet til den kaldende sætning. I et underprogram betyder RETURN blot, at kontrollen skal afslutte underprogrammet; når controlleren finder RETURN, springes koden efter den over.

Normalt kalder den overordnede eller hovedblokken underprogrammerne, og kontrollen skifter fra den overordnede blokken til det kaldte underprogram. RETURN i underprogrammet returnerer kontrollen tilbage til den overordnede blokken. I tilfælde af funktioner returnerer RETURN-sætningen også en værdi, hvis datatype er nævnt på tidspunktet for funktionsdeklarationen.

Hvad er en 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 har sit eget unikke navn og er gemt i Oracle databasen som et databaseobjekt.

Bemærk: Et underprogram er intet andet end en procedure, og det skal oprettes manuelt i henhold til kravet. Når det er oprettet, gemmes det som et databaseobjekt.

Karakteristikaene for en procedureunderprogramenhed i PL/SQL er:

  • Procedurer er separate blokke, der kan gemmes i database.
  • De kan kaldes ved deres navn for at udføre PL/SQL-sætningerne.
  • De bruges primært til at udføre en proces.
  • De kan have indlejrede blokke eller være indlejret i andre blokke eller pakker.
  • De indeholder en deklarationsdel (valgfri), en udførelsesdel og en undtagelseshåndteringsdel (valgfri).
  • Værdier kan overføres til eller hentes fra en procedure via parametre.
  • Disse parametre bør indgå i den kaldende erklæring.
  • En procedure kan have en RETURN-sætning til at returnere kontrollen til den kaldende blok, men den kan ikke returnere nogen værdi via RETURN.
  • Procedurer kan ikke kaldes direkte fra SELECT-sætninger; de kan kaldes fra en anden blok eller via nøgleordet EXEC.

Syntaks

CREATE OR REPLACE PROCEDURE
<procedure_name>
(
<parameter1 IN/OUT <datatype>
..
.
)
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END;
  • CREATE PROCEDURE instruerer compileren i at oprette en ny procedure. Nøgleordet 'OR REPLACE' instruerer den i at erstatte den eksisterende procedure (hvis nogen) med den nuværende.
  • Procedurenavnet skal være unikt.
  • Nøgleordet 'IS' bruges, når den lagrede procedure er indlejret i en anden blok. Hvis proceduren er selvstændig, bruges 'AS'. Bortset fra denne kodningsstandard har begge den samme betydning.

Eksempel 1: Oprettelse af en procedure og kald af den ved hjælp af EXEC. I dette eksempel opretter vi en Oracle en procedure, der tager et navn som input og udskriver en velkomstbesked som output ved hjælp af EXEC-kommandoen til at kalde den.

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 linje 1: Opretter proceduren med navnet 'welcome_msg' og én parameter 'p_name' af typen 'IN'.
  • Code linje 4: Udskriver velkomstbeskeden ved at sammenkæde inputnavnet.
  • Proceduren er kompileret korrekt.
  • Code linje 7: Kald af proceduren ved hjælp af EXEC med parameteren 'Guru99'. Proceduren udføres og udskriver "Velkommen Guru99. "

Hvad er en funktion?

En funktion er et selvstændigt PL/SQL-underprogram. Ligesom en procedure har en funktion et unikt navn og gemmes som et PL/SQL-databaseobjekt. Dens egenskaber er:

  • Funktioner er selvstændige blokke, der primært bruges til beregninger.
  • En funktion bruger RETURN-nøgleordet til at returnere en værdi, hvis datatype er defineret på oprettelsestidspunktet.
  • En funktion skal enten returnere en værdi eller generere en undtagelse; return er obligatorisk i funktioner.
  • En funktion uden DML-sætninger kan kaldes direkte i en SELECT-forespørgsel, hvorimod en funktion med DML kun kan kaldes fra andre PL/SQL-blokke.
  • Den kan have indlejrede blokke eller være indlejret i andre blokke eller pakker.
  • Den indeholder en deklarationsdel (valgfri), en udførelsesdel og en undtagelseshåndteringsdel (valgfri).
  • Værdier kan sendes til eller hentes fra funktionen via parametre.
  • Disse parametre bør indgå i den kaldende erklæring.
  • En funktion kan også returnere en værdi via OUT-parametre ud over at bruge RETURN.
  • Da den altid returnerer en værdi, bruger den kaldende sætning altid en tildelingsoperator til at udfylde en variabel.

PL/SQL-funktionsstruktur

Syntaks

CREATE OR REPLACE FUNCTION
<function_name>
(
<parameter1 IN/OUT <datatype>
)
RETURN <datatype>
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END;
  • CREATE FUNCTION instruerer compileren i at oprette en ny funktion. 'OR REPLACE' instruerer den i at erstatte den eksisterende funktion (hvis nogen) med den nuværende.
  • Funktionsnavnet skal være unikt.
  • Datatypen RETURN bør nævnes.
  • Nøgleordet 'IS' bruges, når funktionen er indlejret i en anden blok. Hvis funktionen er selvstændig, bruges 'AS'.

Eksempel 1: Oprettelse af en funktion og kald af den ved hjælp af en anonym blok. I dette program opretter vi en funktion, der tager et navn som input og returnerer en velkomstbesked ved hjælp af en anonym blok og en SELECT-sætning til at kalde den.

Oprettelse af en PL/SQL-funktion og kald af den

CREATE OR REPLACE FUNCTION welcome_msg_func ( p_name IN VARCHAR2) RETURN VARCHAR2
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 linje 1: Opretter funktionen med navnet 'welcome_msg_func' og én parameter 'p_name' af typen 'IN'.
  • Code linje 2: Deklarerer returtypen som VARCHAR2.
  • Code linje 5: Returnerer den sammenkædede værdi 'Velkommen' og parameterværdien.
  • Code linje 8: Anonym blok til at kalde ovenstående funktion.
  • Code linje 9: Deklarering af variablen med samme datatype som funktionens returtype.
  • Code linje 11: Kald af funktionen og indsæt returværdien i variablen 'lv_msg'.
  • Code linje 12: Udskriver variabelværdien. Outputtet er "Velkommen Guru99. "
  • Code linje 14: Kald af den samme funktion via en SELECT-sætning. Returværdien dirigeres til standardoutputtet.

Ligheder mellem en procedure og en funktion

  • Begge kan kaldes fra andre PL/SQL-blokke.
  • Hvis en undtagelse, der opstår i underprogrammet, ikke håndteres i dets undtagelseshåndtering sektion, forplanter den sig til den kaldende blokken.
  • Begge kan have så mange parametre som nødvendigt.
  • Begge behandles som databaseobjekter i PL/SQL.

Procedure vs. funktion: Nøgleforskelle

Procedure Funktion
Bruges primært til at udføre en bestemt proces. Bruges primært til at udføre visse beregninger.
Kan ikke kaldes i en SELECT-sætning. En funktion, der ikke indeholder DML-sætninger, kan kaldes i en SELECT-sætning.
Bruger en OUT-parameter til at returnere en værdi. Bruger RETURN til at returnere en værdi.
Det er ikke obligatorisk at returnere en værdi. Det er obligatorisk at returnere en værdi.
RETURN afslutter blot kontrollen fra underprogrammet. RETURN afslutter kontrol fra underprogrammet og returnerer også værdien.
Returdatatypen er ikke angivet på oprettelsestidspunktet. Returdatatypen er obligatorisk på oprettelsestidspunktet.

Indbyggede funktioner i PL/SQL

PL / SQL indeholder forskellige indbyggede funktioner til at arbejde med streng- og datodatatyper. Her ser vi de almindeligt anvendte funktioner og deres anvendelse.

Konverteringsfunktioner

Disse indbyggede funktioner konverterer én datatype til en anden.

Funktionsnavn Brug Eksempel
TO_CHAR Konverterer en anden datatype til tegndatatypen. TO_CHAR(123);
TIL_DATO (streng, format) Konverterer den givne streng til en dato. Strengen skal matche formatet. TO_DATE('2015-JAN-15', 'ÅÅÅÅ-MAN-DD'); Produktion: 1 / 15 / 2015
TO_NUMBER (tekst, format) Konverterer teksten til et tal i det givne format. I formatet angiver '9' antallet af cifre. Vælg TO_NUMBER('1234′,'9999') fra dobbelt; Produktion: 1234. Vælg TO_NUMBER('1,234.45′;'9,999.99') fra dual; Produktion: 1234.45

Strengfunktioner

Disse funktioner bruges på tegndatatypen.

Funktionsnavn Brug Eksempel
INSTR(tekst, streng, start, forekomst) Angiver positionen af ​​en bestemt tekst i den givne streng. tekst er hovedstrengen, streng er den tekst, der skal søges efter, start er startpositionen (valgfrit), og forekomst er forekomsten af ​​den søgte streng (valgfrit). Vælg INSTR('FLY','E',2,1) fra dual; Produktion2. Vælg INSTR('FLY','E',2,2) fra dual; Produktion: 9 (2. forekomst af E)
SUBSTR (tekst, start, længde) Angiver delstrengsværdien for hovedstrengen. tekst er hovedstrengen, start er startpositionen, og længde er længden af ​​den delstreng, der skal oprettes. vælg substr('aeroplane',1,7) fra dual; Produktion: aeropla
ØVRE (tekst) Returnerer store bogstaver i den angivne tekst. Vælg upper('guru99') fra dual; Produktion: GURU99
NEDERSTE (tekst) Returnerer den angivne teksts små bogstaver. Vælg nedre('AerOpLane') fra dobbelt; Produktion: flyvemaskine
INITCAP (tekst) Returnerer den givne tekst med hvert ords startbogstav skrevet med stort. Vælg INITCAP('guru99') fra dual; Produktion: Guru99. Vælg INITCAP('min historie') fra dual; Produktion: Min historie
LÆNGDE (tekst) Returnerer længden af ​​den givne streng. Vælg LÆNGDE('guru99') fra dual; Produktion: 6
LPAD (tekst, længde, pad_char) Udfylder strengen til venstre til den givne samlede længde med det givne tegn. Vælg LPAD('guru99', 10, '$') fra dual; Produktion: $$$$guru99
RPAD (tekst, længde, pad_char) Udfylder strengen til højre til den givne samlede længde med det givne tegn. Vælg RPAD('guru99′,10,'-') fra dual; Produktion: guru99—-
LTRIM (tekst) Fjerner det indledende hvide mellemrum fra teksten. Vælg LTRIM(' Guru99') fra dobbelt; Produktion: Guru99
RTRIM (tekst) Fjerner det efterfølgende hvide mellemrum fra teksten. Vælg RTRIM('Guru99') fra dobbelt; Produktion: Guru99

Dato funktioner

Disse funktioner bruges til at manipulere datoer.

Funktionsnavn Brug Eksempel
ADD_MONTHS (dato, antal måneder) Lægger de givne måneder til datoen. ADD_MONTHS('2015-01-01',5); Produktion: 05 / 01 / 2015
SYSDATE Returnerer serverens aktuelle dato og klokkeslæt. Vælg SYSDATE fra dual; Produktion: 10/4/2015 2:11:43
BAGAGERUM Runder datovariablen ned til den lavest mulige værdi. vælg sysdate, TRUNC(sysdate) fra dual; Produktion: 10/4/2015 2:12:39 PM, 10/4/2015
ROUND Afrunder datoen til den nærmeste grænse, højere eller lavere. Vælg sysdate, ROUND(sysdate) fra dual; Produktion: 10/4/2015 2:14:34 PM, 10/5/2015
MONTHS_BETWEEN Returnerer antallet af måneder mellem to datoer. Vælg MÅNEDER_MELLEM (sysdate+60, sysdate) fra dual; Produktion: 2

Ofte Stillede Spørgsmål

En funktion skal returnere en værdi og kan bruges i en SELECT, hvis den ikke har en DML. En procedure kører en proces, behøver ikke at returnere en værdi og kan ikke kaldes fra en SELECT.

IN sender en skrivebeskyttet værdi ind i underprogrammet. OUT returnerer en værdi til den, der kalder den. IN OUT gør begge dele, modtager en værdi og returnerer en muligvis ændret værdi gennem den samme parameter.

Ja, hvis den ikke indeholder DML, såsom INSERT, UPDATE eller DELETE. En funktion, der udfører DML, kan kun kaldes fra en anden PL/SQL-blok, ikke direkte inde i en forespørgsel.

Ja. AI kan udarbejde en CREATE PROCEDURE eller CREATE FUNCTION med de rigtige parametertilstande og en RETURN-type ud fra en almindelig beskrivelse. RevSe parametrene og undtagelseshåndteringen før implementering.

ELLER ERSTAT overskriver en eksisterende procedure eller funktion med samme navn uden at slette den.ping det først. Dette bevarer tildelinger intakte og er den sædvanlige måde at omplacere et ændret underprogram på.

Opsummer dette indlæg med: