Oracle PL/SQL lagrad procedur och funktioner med exempel

โšก Smart sammanfattning

PL/SQL-underprogram รคr namngivna block, procedurer och funktioner som lagras i databasen och anropas med namn. En procedur kรถr en process och en funktion returnerar ett vรคrde, bรฅda utbyter data via parametrarna IN, OUT och IN OUT samt nyckelordet RETURN.

  • ๐Ÿงฉ Tvรฅ delprogram: Procedurer utfรถr en process; funktioner utfรถr en berรคkning och returnerar ett vรคrde.
  • ๐Ÿ”Œ Parametrar: IN skickar indata, OUT returnerar utdata och IN OUT gรถr bรฅda.
  • โ†ฉ๏ธ Lร„MNA TILLBAKA: Returnerar kontrollen till anroparen; i en funktion returnerar den ocksรฅ ett vรคrde av en deklarerad typ.
  • ๐Ÿ—„๏ธ Lagrade objekt: Bรฅda sparas som databasobjekt och kan anropas frรฅn andra block.
  • ๐Ÿ”Ž Vร„LJ Anvรคnd: En funktion utan DML kan anropas inuti en SELECT; en procedur kan inte det.
  • โš–๏ธ Huvudskillnad: En funktion mรฅste returnera ett vรคrde, medan en procedur inte behรถver det.
  • ๐Ÿ› ๏ธ Inbyggda funktioner: Oracle skickar konverterings-, strรคng- och datumfunktioner redo att anvรคndas.

Oracle PL/SQL-lagrade procedurer och funktioner

Vad รคr PL/SQL-underprogram?

I den hรคr handledningen ser du en detaljerad beskrivning av hur du skapar och kรถr namngivna block, procedurer och funktioner.

Procedurer och funktioner รคr delprogram som kan skapas och sparas i databasen som databasobjekt. De kan anropas eller refereras till รคven inuti andra block.

Vi tar ocksรฅ upp de viktigaste skillnaderna mellan dessa tvรฅ delprogram och diskuterar Oracle inbyggda funktioner.

Terminologier i PL/SQL-underprogram

Innan vi lรคr oss om PL/SQL-underprogram diskuterar vi de olika terminologierna som ingรฅr i dessa underprogram.

Parameter

En parameter รคr en variabel eller platshรฅllare fรถr vilken giltig variabel som helst PL/SQL-datatyp genom vilket PL/SQL-underprogrammet utbyter vรคrden med huvudkoden. Denna parameter tillรฅter inmatning till underprogrammen och t.ex.tracion av vรคrden frรฅn dem.

  • Dessa parametrar bรถr definieras tillsammans med underprogrammen vid tidpunkten fรถr skapandet.
  • De ingรฅr i anropssatsen fรถr att interagera med delprogrammen.
  • Datatypen fรถr parametern i delprogrammet och den anropande satsen ska vara densamma.
  • Storleken pรฅ datatypen bรถr inte nรคmnas vid parameterdeklarationen, eftersom storleken รคr dynamisk.

Baserat pรฅ deras syfte klassificeras parametrar som:

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

IN-parameter

  • Anvรคnds fรถr att ge inmatning till underprogrammen.
  • Det รคr en skrivskyddad variabel i underprogrammen; dess vรคrde kan inte รคndras i underprogrammet.
  • I den anropande satsen kan det vara en variabel, ett literalvรคrde eller ett uttryck, till exempel '5*8' eller 'a/b'.
  • Som standard รคr parametrar av typen IN.

OUT-parameter

  • Anvรคnds fรถr att hรคmta utdata frรฅn underprogrammen.
  • Det รคr en lรคs-skriv-variabel inuti underprogrammen; dess vรคrde kan รคndras inuti dem.
  • I den anropande satsen ska det alltid vara en variabel som hรฅller vรคrdet frรฅn delprogrammet.

IN OUT-parameter

  • Anvรคnds bรฅde fรถr att ge indata och hรคmta utdata frรฅn underprogrammen.
  • Det รคr en lรคs-skriv-variabel inuti underprogrammen; dess vรคrde kan รคndras inuti dem.
  • I den anropande satsen ska det alltid vara en variabel som hรฅller vรคrdet frรฅn delprogrammet.

Parametertypen bรถr anges nรคr underprogrammen skapas.

ร…NGERRร„TT & RETURER

RETURN รคr nyckelordet som instruerar kompilatorn att vรคxla kontroll frรฅn delprogrammet till den anropande satsen. I ett delprogram betyder RETURN helt enkelt att kontrollen mรฅste avsluta delprogrammet; nรคr kontrollenheten hittar RETURN hoppas koden efter det รถver.

Normalt anropar fรถrรคlder- eller huvudblocket delprogrammen, och kontrollen flyttas frรฅn fรถrรคlderblocket till det anropade delprogrammet. RETURN i delprogrammet returnerar kontrollen tillbaka till fรถrรคlderblocket. Nรคr det gรคller funktioner returnerar RETURN-satsen ocksรฅ ett vรคrde vars datatyp nรคmns vid funktionsdeklarationen.

Vad รคr en procedur i PL/SQL?

A Tillvรคgagรฅngssรคtt I PL/SQL รคr en delprogramenhet som bestรฅr av en grupp PL/SQL-satser som kan anropas med namn. Varje procedur har sitt eget unika namn och lagras i Oracle databas som ett databasobjekt.

Obs: Ett delprogram รคr inget annat รคn en procedur, och det mรฅste skapas manuellt enligt kraven. Nรคr det vรคl har skapats lagras det som ett databasobjekt.

Egenskaperna fรถr en procedurunderprogramenhet i PL/SQL รคr:

  • Procedurer รคr fristรฅende block som kan lagras i databas.
  • De kan anropas vid sitt namn fรถr att exekvera PL/SQL-satser.
  • De anvรคnds huvudsakligen fรถr att genomfรถra en process.
  • De kan ha kapslade block, eller vara kapslade inuti andra block eller paket.
  • De innehรฅller en deklarationsdel (valfritt), en exekveringsdel och en undantagshanteringsdel (valfritt).
  • Vรคrden kan skickas till eller hรคmtas frรฅn en procedur via parametrar.
  • Dessa parametrar bรถr inkluderas i det anropande uttalandet.
  • En procedur kan ha en RETURN-sats fรถr att รฅterfรถra kontrollen till det anropande blocket, men den kan inte returnera nรฅgot vรคrde via RETURN.
  • Procedurer kan inte anropas direkt frรฅn SELECT-satser; de kan anropas frรฅn ett annat block eller via nyckelordet EXEC.

syntax

CREATE OR REPLACE PROCEDURE
<procedure_name>
(
<parameter1 IN/OUT <datatype>
..
.
)
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END;
  • CREATE PROCEDURE instruerar kompilatorn att skapa en ny procedur. Nyckelordet 'OR REPLACE' instruerar den att ersรคtta den befintliga proceduren (om nรฅgon) med den nuvarande.
  • Procedurnamnet ska vara unikt.
  • Nyckelordet 'IS' anvรคnds nรคr den lagrade proceduren รคr kapslad i ett annat block. Om proceduren รคr fristรฅende anvรคnds 'AS'. Bortsett frรฅn denna kodningsstandard har bรฅda samma betydelse.

Exempel 1: Skapa en procedur och anropa den med EXEC. I det hรคr exemplet skapar vi en Oracle en procedur som tar ett namn som indata och skriver ut ett vรคlkomstmeddelande som utdata, med hjรคlp av EXEC-kommandot fรถr att anropa 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 Fรถrklaring:

  • Code rad 1: Skapar proceduren med namnet 'welcome_msg' och parametern 'p_name' av typen 'IN'.
  • Code rad 4: Skriver ut vรคlkomstmeddelandet genom att sammanfoga inmatningsnamnet.
  • Proceduren har kompilerats.
  • Code rad 7: Anropa proceduren med EXEC med parametern 'Guru99'. Proceduren kรถrs och skriver ut "Vรคlkommen Guru99. "

Vad รคr en funktion?

En funktion รคr ett fristรฅende PL/SQL-underprogram. Precis som en procedur har en funktion ett unikt namn och lagras som ett PL/SQL-databasobjekt. Dess egenskaper รคr:

  • Funktioner รคr fristรฅende block som huvudsakligen anvรคnds fรถr berรคkningar.
  • En funktion anvรคnder RETURN-nyckelordet fรถr att returnera ett vรคrde vars datatyp definierades vid skapandet.
  • En funktion ska antingen returnera ett vรคrde eller generera ett undantag; retur รคr obligatorisk i funktioner.
  • En funktion utan DML-satser kan anropas direkt i en SELECT-frรฅga, medan en funktion med DML bara kan anropas frรฅn andra PL/SQL-block.
  • Den kan ha kapslade block, eller vara kapslad inuti andra block eller paket.
  • Den innehรฅller en deklarationsdel (valfritt), en exekveringsdel och en undantagshanteringsdel (valfritt).
  • Vรคrden kan skickas till eller hรคmtas frรฅn funktionen via parametrar.
  • Dessa parametrar bรถr inkluderas i det anropande uttalandet.
  • En funktion kan ocksรฅ returnera ett vรคrde via OUT-parametrar utรถver att anvรคnda RETURN.
  • Eftersom den alltid returnerar ett vรคrde anvรคnder den anropande kommandot alltid en tilldelningsoperator fรถr att fylla i en variabel.

PL/SQL-funktionsstruktur

syntax

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 instruerar kompilatorn att skapa en ny funktion. 'OR REPLACE' instruerar den att ersรคtta den befintliga funktionen (om nรฅgon finns) med den aktuella.
  • Funktionsnamnet ska vara unikt.
  • Datatypen RETURN bรถr nรคmnas.
  • Nyckelordet 'IS' anvรคnds nรคr funktionen รคr kapslad i ett annat block. Om funktionen รคr fristรฅende anvรคnds 'AS'.

Exempel 1: Skapa en funktion och anropa den med ett anonymt block. I det hรคr programmet skapar vi en funktion som tar ett namn som indata och returnerar ett vรคlkomstmeddelande, med hjรคlp av ett anonymt block och en SELECT-sats fรถr att anropa den.

Skapa en PL/SQL-funktion och anropa 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 Fรถrklaring:

  • Code rad 1: Skapar funktionen med namnet 'welcome_msg_func' och parametern 'p_name' av typen 'IN'.
  • Code rad 2: Deklarerar returtypen som VARCHAR2.
  • Code rad 5: Returnerar det sammanfogade vรคrdet 'Vรคlkommen' och parametervรคrdet.
  • Code rad 8: Anonymt block fรถr att anropa ovanstรฅende funktion.
  • Code rad 9: Deklarera variabeln med samma datatyp som funktionens returtyp.
  • Code rad 11: Anropa funktionen och fylla i returvรคrdet i variabeln 'lv_msg'.
  • Code rad 12: Skriver ut variabelvรคrdet. Utdata รคr "Vรคlkommen Guru99. "
  • Code rad 14: Anropar samma funktion via en SELECT-sats. Returvรคrdet dirigeras till standardutdata.

Likheter mellan en procedur och en funktion

  • Bรฅda kan anropas frรฅn andra PL/SQL-block.
  • Om ett undantag som uppstรฅr i delprogrammet inte hanteras i dess undantagshantering sektionen, propagerar den till det anropande blocket.
  • Bรฅda kan ha sรฅ mรฅnga parametrar som krรคvs.
  • Bรฅda behandlas som databasobjekt i PL/SQL.

Procedur kontra funktion: Viktiga skillnader

Tillvรคgagรฅngssรคtt Funktion
Anvรคnds huvudsakligen fรถr att utfรถra en viss process. Anvรคnds frรคmst fรถr att utfรถra vissa berรคkningar.
Kan inte anropas i en SELECT-sats. En funktion som inte innehรฅller nรฅgra DML-satser kan anropas i en SELECT-sats.
Anvรคnder en OUT-parameter fรถr att returnera ett vรคrde. Anvรคnder RETURN fรถr att returnera ett vรคrde.
Det รคr inte obligatoriskt att returnera ett vรคrde. Det รคr obligatoriskt att returnera ett vรคrde.
RETURN avslutar helt enkelt kontrollen frรฅn underprogrammet. RETURN avslutar kontrollen frรฅn underprogrammet och returnerar รคven vรคrdet.
Returdatatypen anges inte vid skapandet. Returdatatypen รคr obligatorisk vid skapandet.

Inbyggda funktioner i PL/SQL

PL / SQL innehรฅller olika inbyggda funktioner fรถr att arbeta med strรคng- och datumdatatyper. Hรคr ser vi de vanligaste funktionerna och deras anvรคndning.

Konverteringsfunktioner

Dessa inbyggda funktioner konverterar en datatyp till en annan.

Funktionsnamn Anvรคndning Exempelvis
TO_CHAR Konverterar en annan datatyp till teckendatatypen. TO_CHAR(123);
TILL_DATUM (strรคng, format) Konverterar den givna strรคngen till ett datum. Strรคngen ska matcha formatet. TO_DATE('2015-JAN-15', 'ร…ร…ร…ร…-Mร…N-DD'); Produktion: 1 / 15 / 2015
TO_NUMBER (text, format) Konverterar texten till ett tal i angivet format. I formatet anger '9' antalet siffror. Vรคlj TO_NUMBER('1234โ€ฒ,'9999') frรฅn dubbel; Produktion: 1234. Vรคlj TO_NUMBER('1 234,45','9 999,99') frรฅn dual; Produktion: 1234.45

Strรคngfunktioner

Dessa funktioner anvรคnds pรฅ teckendatatypen.

Funktionsnamn Anvรคndning Exempelvis
INSTR(text, strรคng, start, fรถrekomst) Anger positionen fรถr en viss text i den givna strรคngen. text รคr huvudstrรคngen, strรคng รคr texten som ska sรถkas efter, start รคr startpositionen (valfritt) och occurrence รคr fรถrekomsten av den sรถkta strรคngen (valfritt). Vรคlj INSTR('FLYGPLAN','E',2,1) frรฅn dual; Produktion2. Vรคlj INSTR('FLYGPLAN','E',2,2) frรฅn dual; Produktion: 9 (andra fรถrekomsten av E)
SUBSTR (text, start, lรคngd) Anger delstrรคngsvรคrdet fรถr huvudstrรคngen. text รคr huvudstrรคngen, start รคr startpositionen och lรคngd รคr lรคngden som delstrรคngen ska anvรคndas i. vรคlj substr('flygplan',1,7) frรฅn dual; Produktion: aeropla
ร–VRE (text) Returnerar versalerna i den angivna texten. Vรคlj upper('guru99') frรฅn dual; Produktion: GURU99
Lร„GRE (text) Returnerar gemener i den angivna texten. Vรคlj lรคgre ('AerOpLane') frรฅn dubbel; Produktion: flygplan
INITCAP (text) Returnerar den givna texten med varje ords fรถrsta bokstav i versal. Vรคlj INITCAP('guru99') frรฅn dual; Produktion: Guru99. Vรคlj INITCAP('min berรคttelse') frรฅn dual; Produktion: Min berรคttelse
Lร„NGD (text) Returnerar lรคngden pรฅ den givna strรคngen. Vรคlj Lร„NGD('guru99') frรฅn dual; Produktion: 6
LPAD (text, lรคngd, pad_char) Fyller ut strรคngen till vรคnster till den givna totala lรคngden med det givna tecknet. Vรคlj LPAD('guru99', 10, '$') frรฅn dual; Produktion: $$$$guru99
RPAD (text, lรคngd, pad_char) Fyller ut strรคngen till hรถger till den givna totala lรคngden med det givna tecknet. Vรคlj RPAD('guru99โ€ฒ,10,'-') frรฅn dual; Produktion: guru99โ€”-
LTRIM (text) Tar bort det inledande vita utrymmet frรฅn texten. Vรคlj LTRIM(' Guru99') frรฅn dubbel; Produktion: Guru99
RTRIM (text) Tar bort det efterfรถljande vita utrymmet frรฅn texten. Vรคlj RTRIM('Guru99') frรฅn dubbel; Produktion: Guru99

Datumfunktioner

Dessa funktioner anvรคnds fรถr att manipulera datum.

Funktionsnamn Anvรคndning Exempelvis
ADD_MONTHS (datum, antal mรฅnader) Lรคgger till de angivna mรฅnaderna till datumet. Lร„GG TILL_Mร…NADER('2015-01-01',5); Produktion: 05 / 01 / 2015
SYSDATE Returnerar aktuellt datum och tid fรถr servern. Vรคlj SYSDATE frรฅn dubbel; Produktion: 10/4/2015 2:11:43
TRUNK Avrundar datumvariabeln nedรฅt till lรคgsta mรถjliga vรคrde. vรคlj sysdate, TRUNC(sysdate) frรฅn dubbel; Produktion: 10/4/2015 2:12:39 PM, 10/4/2015
RUNT Avrundar datumet till nรคrmaste grรคns, hรถgre eller lรคgre. Vรคlj sysdate, ROUND(sysdate) frรฅn dual; Produktion: 10/4/2015 2:14:34 PM, 10/5/2015
MONTHS_BETWEEN Returnerar antalet mรฅnader mellan tvรฅ datum. Vรคlj Mร…NADER_MELLAN (sysdatum+60, sysdatum) frรฅn dual; Produktion: 2

Vanliga frรฅgor

En funktion mรฅste returnera ett vรคrde och kan anvรคndas inuti en SELECT om den inte har nรฅgon DML. En procedur kรถr en process, behรถver inte returnera ett vรคrde och kan inte anropas frรฅn en SELECT.

IN skickar ett skrivskyddat vรคrde till delprogrammet. OUT returnerar ett vรคrde till anroparen. IN OUT gรถr bรฅda, tar emot ett vรคrde och returnerar ett eventuellt รคndrat vรคrde genom samma parameter.

Ja, om den inte innehรฅller nรฅgon DML som INSERT, UPDATE eller DELETE. En funktion som utfรถr DML kan bara anropas frรฅn ett annat PL/SQL-block, inte direkt inuti en frรฅga.

Ja. AI kan utarbeta en CREATE PROCEDURE eller CREATE FUNCTION med rรคtt parameterlรคgen och en RETURN-typ frรฅn en enkel beskrivning. RevVisa parametrarna och undantagshanteringen innan distribution.

ELLER ERSร„TT skriver รถver en befintlig procedur eller funktion med samma namn utan att slรคppaping det fรถrst. Detta behรฅller bidrag intakta och รคr det vanliga sรคttet att omdistribuera ett รคndrat delprogram.

Sammanfatta detta inlรคgg med: