Oracle PL/SQL opgeslagen procedure en functies met voorbeelden
โก Slimme samenvatting
PL/SQL-subprogramma's zijn benoemde blokken, procedures en functies die in de database worden opgeslagen en op naam worden aangeroepen. Een procedure voert een proces uit en een functie retourneert een waarde, waarbij beide gegevens uitwisselen via IN-, OUT- en IN OUT-parameters en het trefwoord RETURN.

Wat zijn PL/SQL-subprogramma's?
In deze handleiding vindt u een gedetailleerde beschrijving van hoe u benoemde blokken, procedures en functies kunt maken en uitvoeren.
Procedures en functies zijn subprogramma's die kunnen worden aangemaakt en opgeslagen in de database als databaseobjecten. Ze kunnen ook binnen andere blokken worden aangeroepen of waarnaar kan worden verwezen.
We behandelen ook de belangrijkste verschillen tussen deze twee subprogramma's en bespreken de Oracle ingebouwde functies.
Terminologieรซn in PL/SQL-subprogramma's
Voordat we meer leren over PL/SQL-subprogramma's, bespreken we eerst de verschillende terminologieรซn die bij deze subprogramma's horen.
Parameter
Een parameter is een variabele of plaatshouder van een geldige waarde. PL/SQL-gegevenstype waarmee het PL/SQL-subprogramma waarden uitwisselt met de hoofdcode. Deze parameter maakt invoer voor de subprogramma's mogelijk en zorgt voor uitvoer.trachet ontlenen van waarden aan hen.
- Deze parameters moeten samen met de subprogramma's worden gedefinieerd op het moment dat ze worden gemaakt.
- Ze worden in de aanroepinstructie opgenomen om met de subprogramma's te communiceren.
- Het gegevenstype van de parameter in het subprogramma en in de aanroepende instructie moet hetzelfde zijn.
- De grootte van het gegevenstype hoeft niet te worden vermeld bij de parameterdeclaratie, aangezien de grootte dynamisch is.
Op basis van hun doel worden parameters als volgt geclassificeerd:
- IN-parameter
- UIT-parameter
- IN UIT-parameter
IN-parameter
- Wordt gebruikt om invoer te geven aan de subprogramma's.
- Het is een alleen-lezen variabele binnen de subprogramma's; de waarde ervan kan niet binnen het subprogramma worden gewijzigd.
- In de aanroepinstructie kan het een variabele, een letterlijke waarde of een expressie zijn, zoals '5*8' of 'a/b'.
- Standaard zijn de parameters van het type IN.
UIT-parameter
- Wordt gebruikt om uitvoer van de subprogramma's te verkrijgen.
- Het is een lees-schrijfvariabele binnen de subprogramma's; de waarde ervan kan daarin worden gewijzigd.
- In de aanroepinstructie moet het altijd een variabele zijn die de waarde van het subprogramma bevat.
IN UIT-parameter
- Wordt gebruikt voor zowel het geven van invoer als het ontvangen van uitvoer van de subprogramma's.
- Het is een lees-schrijfvariabele binnen de subprogramma's; de waarde ervan kan daarin worden gewijzigd.
- In de aanroepinstructie moet het altijd een variabele zijn die de waarde van het subprogramma bevat.
Het parametertype moet worden vermeld bij het aanmaken van de subprogramma's.
RETURN
RETURN is het sleutelwoord dat de compiler instrueert om de controle van het subprogramma over te dragen aan de aanroepende instructie. In een subprogramma betekent RETURN simpelweg dat de controle het subprogramma moet verlaten; zodra de controller RETURN tegenkomt, wordt de code die erop volgt overgeslagen.
Normaal gesproken roept het hoofdblok (of parent block) de subprogramma's aan, waarna de controle van het hoofdblok naar het aangeroepen subprogramma wordt overgedragen. De RETURN-instructie in het subprogramma geeft de controle terug aan het hoofdblok. In het geval van functies retourneert de RETURN-instructie ook een waarde, waarvan het gegevenstype is gespecificeerd bij de functiedeclaratie.
Wat is een procedure in PL/SQL?
A Procedure Een procedure in PL/SQL is een subprogramma-eenheid die bestaat uit een groep PL/SQL-instructies die op naam kunnen worden aangeroepen. Elke procedure heeft een eigen unieke naam en wordt opgeslagen in de code. Oracle database als databaseobject.
Let op: Een subprogramma is niets anders dan een procedure en moet handmatig worden aangemaakt, afhankelijk van de vereisten. Eenmaal aangemaakt, wordt het opgeslagen als een databaseobject.
De kenmerken van een procedure-subprogramma-eenheid in PL/SQL zijn:
- Procedures zijn op zichzelf staande blokken die kunnen worden opgeslagen in de databank.
- Ze kunnen bij naam worden aangeroepen om de PL/SQL-instructies uit te voeren.
- Ze worden voornamelijk gebruikt om een โโproces uit te voeren.
- Ze kunnen geneste blokken bevatten, of zelf genest zijn binnen andere blokken of pakketten.
- Ze bevatten een declaratiegedeelte (optioneel), een uitvoeringsgedeelte en een gedeelte voor foutafhandeling (optioneel).
- Waarden kunnen via parameters aan een procedure worden doorgegeven of eruit worden opgehaald.
- Deze parameters moeten worden opgenomen in de aanroepende instructie.
- Een procedure kan een RETURN-instructie bevatten om de controle terug te geven aan het aanroepende blok, maar kan via RETURN geen waarde retourneren.
- Procedures kunnen niet rechtstreeks vanuit SELECT-instructies worden aangeroepen; ze kunnen worden aangeroepen vanuit een ander blok of via het trefwoord EXEC.
Syntaxis
CREATE OR REPLACE PROCEDURE <procedure_name> ( <parameter1 IN/OUT <datatype> .. . ) [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- CREATE PROCEDURE instrueert de compiler om een โโnieuwe procedure te creรซren. Het trefwoord 'OR REPLACE' geeft de compiler de opdracht om de bestaande procedure (indien aanwezig) te vervangen door de huidige procedure.
- De procedurenaam moet uniek zijn.
- Het sleutelwoord 'IS' wordt gebruikt wanneer de opgeslagen procedure zich binnen een ander codeblok bevindt. Als de procedure op zichzelf staat, wordt 'AS' gebruikt. Afgezien van deze codestandaard hebben beide dezelfde betekenis.
Voorbeeld 1: Een procedure maken en deze aanroepen met EXEC. In dit voorbeeld maken we een Oracle Een procedure die een naam als invoer accepteert en een welkomstbericht als uitvoer afdrukt, waarbij de EXEC-opdracht wordt gebruikt om deze aan te roepen.
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 Uitleg:
- Code lijn 1: Het aanmaken van de procedure met de naam 'welcome_msg' en รฉรฉn parameter 'p_name' van het type 'IN'.
- Code lijn 4: Het welkomstbericht afdrukken door de ingevoerde naam eraan toe te voegen.
- De procedure is succesvol gecompileerd.
- Code lijn 7: De procedure aanroepen met EXEC met de parameter 'Guru99'. De procedure wordt uitgevoerd en print "Welkom". Guru99 ".
Wat is een functie?
Een functie is een zelfstandig PL/SQL-subprogramma. Net als een procedure heeft een functie een unieke naam en wordt deze opgeslagen als een PL/SQL-databaseobject. De kenmerken ervan zijn:
- Functies zijn op zichzelf staande blokken die voornamelijk voor berekeningen worden gebruikt.
- Een functie gebruikt het sleutelwoord RETURN om een โโwaarde terug te geven waarvan het gegevenstype is gedefinieerd op het moment van creatie.
- Een functie moet ofwel een waarde retourneren, ofwel een uitzondering genereren; het retourneren van een waarde is verplicht bij functies.
- Een functie zonder DML-instructies kan rechtstreeks in een SELECT-query worden aangeroepen, terwijl een functie met DML alleen vanuit andere PL/SQL-blokken kan worden aangeroepen.
- Het kan geneste blokken bevatten, of zelf genest zijn binnen andere blokken of pakketten.
- Het bevat een declaratiegedeelte (optioneel), een uitvoeringsgedeelte en een gedeelte voor foutafhandeling (optioneel).
- Waarden kunnen via parameters aan de functie worden doorgegeven of eruit worden opgehaald.
- Deze parameters moeten worden opgenomen in de aanroepende instructie.
- Een functie kan naast het gebruik van RETURN ook een waarde retourneren via OUT-parameters.
- Omdat de aanroepende instructie altijd een waarde retourneert, gebruikt deze altijd een toewijzingsoperator om een โโvariabele te vullen.
Syntaxis
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' instrueert de compiler om een โโnieuwe functie te creรซren. 'OR REPLACE' instrueert de compiler om de bestaande functie (indien aanwezig) te vervangen door de huidige functie.
- De functienaam moet uniek zijn.
- Het gegevenstype RETURN moet worden vermeld.
- Het sleutelwoord 'IS' wordt gebruikt wanneer de functie zich binnen een ander blok bevindt. Als de functie op zichzelf staat, wordt 'AS' gebruikt.
Voorbeeld 1: Een functie maken en deze aanroepen met behulp van een anoniem blok. In dit programma maken we een functie die een naam als invoer accepteert en een welkomstbericht retourneert. We gebruiken hiervoor een anoniem blok en een SELECT-instructie om de functie aan te roepen.
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 Uitleg:
- Code lijn 1: De functie met de naam 'welcome_msg_func' en รฉรฉn parameter 'p_name' van het type 'IN' aanmaken.
- Code lijn 2: Het retourtype wordt gedeclareerd als VARCHAR2.
- Code lijn 5: De gecombineerde waarde 'Welkom' en de parameterwaarde worden geretourneerd.
- Code lijn 8: Een anoniem blok om de bovenstaande functie aan te roepen.
- Code lijn 9: De variabele declareren met hetzelfde gegevenstype als het retourtype van de functie.
- Code lijn 11: De functie aanroepen en de retourwaarde in de variabele 'lv_msg' opslaan.
- Code lijn 12: De waarde van de variabele afdrukken. De uitvoer is "Welkom". Guru99 ".
- Code lijn 14: Dezelfde functie aanroepen via een SELECT-statement. De retourwaarde wordt naar de standaarduitvoer gestuurd.
Overeenkomsten tussen een procedure en een functie
- Beide kunnen vanuit andere PL/SQL-blokken worden aangeroepen.
- Als een uitzondering die in het subprogramma wordt gegenereerd niet wordt afgehandeld in het subprogramma zelf, dan wordt deze uitzondering afgehandeld. uitzonderingsafhandeling sectie, het wordt doorgegeven aan het aanroepende blok.
- Beide kunnen zoveel parameters hebben als nodig is.
- Beide worden behandeld als databaseobjecten in PL/SQL.
Procedure versus functie: belangrijke verschillen
| Procedure | Functie |
|---|---|
| Wordt hoofdzakelijk gebruikt om een โโbepaald proces uit te voeren. | Wordt hoofdzakelijk gebruikt voor het uitvoeren van berekeningen. |
| Kan niet worden aangeroepen in een SELECT-instructie. | Een functie die geen DML-instructies bevat, kan worden aangeroepen in een SELECT-instructie. |
| Gebruikt een OUT-parameter om een โโwaarde terug te geven. | Gebruikt RETURN om een โโwaarde terug te geven. |
| Het is niet verplicht om een โโwaarde terug te geven. | Het is verplicht om een โโwaarde terug te geven. |
| RETURN zorgt er simpelweg voor dat de controle over het subprogramma wordt verlaten. | RETURN verlaat het subprogramma en retourneert tevens de waarde. |
| Het retourdatatype wordt niet gespecificeerd op het moment van aanmaken. | Het retourdatatype is verplicht op het moment van aanmaken. |
Ingebouwde functies in PL/SQL
PL / SQL Bevat diverse ingebouwde functies voor het werken met tekenreeks- en datumgegevenstypen. Hieronder zien we de meest gebruikte functies en hun toepassing.
Conversiefuncties
Deze ingebouwde functies converteren het ene gegevenstype naar het andere.
| Functie Naam | Gebruik | Voorbeeld |
|---|---|---|
| TO_CHAR | Converteert een ander gegevenstype naar een tekengegevenstype. | TO_CHAR(123); |
| TO_DATE (string, format) | Converteert de opgegeven tekenreeks naar een datum. De tekenreeks moet aan het opgegeven formaat voldoen. | TO_DATE('2015-JAN-15', 'JJJJ-MON-DD'); uitgang: 1 / 15 / 2015 |
| TO_NUMBER (tekst, indeling) | Converteert de tekst naar een getal in het opgegeven formaat. In dit formaat staat '9' voor het aantal cijfers. | Selecteer TO_NUMBER('1234โฒ,'9999') uit dubbel; uitgang: 1234. Selecteer TO_NUMBER('1,234.45โฒ,'9,999.99') uit dual; uitgang: 1234.45 |
String-functies
Deze functies worden gebruikt op het gegevenstype 'character'.
| Functie Naam | Gebruik | Voorbeeld |
|---|---|---|
| INSTR(tekst, tekenreeks, begin, aantal keren) | Geeft de positie van een bepaalde tekst in de opgegeven tekenreeks. `text` is de hoofdtekenreeks, `string` is de te doorzoeken tekst, `start` is de startpositie (optioneel) en `occurrence` is het aantal keren dat de gezochte tekenreeks voorkomt (optioneel). | Selecteer INSTR('AEROPLANE','E',2,1) uit dual; uitgang: 2. Selecteer INSTR('AEROPLANE','E',2,2) uit dual; uitgang: 9 (tweede keer dat de letter E voorkomt) |
| SUBSTR (tekst, begin, lengte) | Geeft de substringwaarde van de hoofdstring. `text` is de hoofdstring, `start` is de beginpositie en `length` is de lengte van de te extraheren substring. | select substr('aeroplane',1,7) from dual; uitgang: vliegtuig |
| BOVENSTE (tekst) | Geeft de opgegeven tekst weer in hoofdletters. | Selecteer upper('guru99') uit dual; uitgang:GURU99 |
| ONDER (tekst) | Geeft de opgegeven tekst weer in kleine letters. | Selecteer lower('AerOpLane') uit dual; uitgang: vliegtuig |
| INITCAP (tekst) | Geeft de gegeven tekst terug, waarbij de eerste letter van elk woord in hoofdletters wordt weergegeven. | Selecteer INITCAP('guru99') uit dual; uitgang: Guru99. Selecteer INITCAP('mijn verhaal') uit dual; uitgang: Mijn verhaal |
| LENGTE (tekst) | Geeft de lengte van de opgegeven tekenreeks terug. | Selecteer LENGTH('guru99') uit dual; uitgang: 6 |
| LPAD (tekst, lengte, opvulteken) | Vult de tekenreeks aan de linkerkant aan tot de opgegeven totale lengte met het opgegeven teken. | Selecteer LPAD('guru99', 10, '$') uit dubbel; uitgang: $$$$goeroe99 |
| RPAD (tekst, lengte, pad_char) | Vult de tekenreeks aan de rechterkant aan tot de opgegeven totale lengte met het opgegeven teken. | Selecteer RPAD('guru99โฒ,10,'-') uit dual; uitgang: goeroe99โ- |
| LTRIM (tekst) | Verwijdert de overtollige witruimte aan het begin van de tekst. | Selecteer LTRIM(' Guru99') van dubbel; uitgang: Guru99 |
| RTRIM (tekst) | Verwijdert de overtollige witruimte aan het einde van de tekst. | Selecteer RTRIM('Guru99 ') van dual; uitgang: Guru99 |
Datum Functies
Deze functies worden gebruikt voor het bewerken van datums.
| Functie Naam | Gebruik | Voorbeeld |
|---|---|---|
| ADD_MONTHS (datum, aantal maanden) | Voegt de opgegeven maanden toe aan de datum. | ADD_MONTHS('2015-01-01',5); uitgang: 05 / 01 / 2015 |
| SYSDATUM | Geeft de huidige datum en tijd van de server weer. | Selecteer SYSDATE uit dubbel; uitgang: 10-4-2015 2:11:43 uur |
| KOFFERBAK | Rondt de datumvariabele af naar de laagst mogelijke waarde. | selecteer sysdate, TRUNC(sysdate) uit dual; uitgang: 10/4/2015 2:12:39 PM, 10/4/2015 |
| ROUND | Rondt de datum af naar de dichtstbijzijnde limiet, naar boven of naar beneden. | Selecteer sysdate, rond af (sysdate) uit dual; uitgang: 10/4/2015 2:14:34 PM, 10/5/2015 |
| MAANDEN_BETWEEN | Geeft het aantal maanden tussen twee datums terug. | Selecteer MONTHS_BETWEEN (sysdate+60, sysdate) uit dual; uitgang: 2 |


