Oracle PL/SQL tárolt eljárások és függvények példákkal

⚡ Okos összefoglaló

A PL/SQL alprogramok elnevezett blokkok, eljárások és függvények, amelyek az adatbázisban tárolódnak és név szerint hívhatók meg. Egy eljárás egy folyamatot futtat, egy függvény pedig egy értéket ad vissza, mindkettő IN, OUT és IN OUT paramétereken, valamint a RETURN kulcsszón keresztül cserél adatot.

  • 🧩 Két alprogram: Az eljárások végrehajtanak egy folyamatot; a függvények számítást hajtanak végre és értéket adnak vissza.
  • 🔌 paraméterek: Az IN bemenetet ad át, az OUT kimenetet ad vissza, az IN OUT pedig mindkettőt elvégzi.
  • ↩️ VISSZATÉRÉS: Visszaadja a vezérlést a hívónak; függvényben szintén egy deklarált típusú értéket ad vissza.
  • 🗄️ Tárolt objektumok: Mindkettő adatbázis-objektumként van mentve, és más blokkokból hívható.
  • ???? SELECT Használat: Egy DML nélküli függvény meghívható egy SELECT-en belül; egy eljárás nem.
  • 🇧🇷 Főbb különbség: Egy függvénynek vissza kell adnia egy értéket, míg egy eljárásnak nem.
  • 🇧🇷 Beépített függvények: Oracle használatra kész konverziós, karakterlánc- és dátumfüggvényeket szállít.

Oracle PL/SQL tárolt eljárások és függvények

Mik azok a PL/SQL alprogramok?

Ebben az oktatóanyagban részletesen leírjuk, hogyan hozhat létre és hajthat végre elnevezett blokkokat, eljárásokat és függvényeket.

Az eljárások és függvények olyan alprogramok, amelyek adatbázis-objektumokként létrehozhatók és menthetők az adatbázisban. Más blokkokon belül is meghívhatók vagy hivatkozhatók rájuk.

Ezenkívül áttekintjük a két alprogram közötti főbb különbségeket, és megvitatjuk a következőket: Oracle beépített funkciók.

Terminológiák a PL/SQL alprogramokban

Mielőtt megismerkednénk a PL/SQL alprogramokkal, megvitatjuk a különféle terminológiákat, amelyek ezen alprogramok részét képezik.

Vizsgált paraméter

A paraméter egy változó vagy bármely érvényes érték helyőrzője. PL/SQL adattípus amelyen keresztül a PL/SQL alprogram értékeket cserél a fő kóddal. Ez a paraméter lehetővé teszi az alprogramokba való bevitelt és pl.tracértékek átvétele tőlük.

  • Ezeket a paramétereket az alprogramokkal együtt kell meghatározni a létrehozáskor.
  • Ezek szerepelnek a hívó utasításban, hogy interakcióba léphessenek az alprogramokkal.
  • Az alprogramban és a hívó utasításban lévő paraméter adattípusának meg kell egyeznie.
  • Az adattípus méretét nem szabad megemlíteni a paraméter deklarálásakor, mivel a méret dinamikus.

Céljuk alapján a paramétereket a következőképpen osztályozzák:

  1. IN paraméter
  2. OUT paraméter
  3. IN OUT Paraméter

IN paraméter

  • Alprogramok bemenetének biztosítására szolgál.
  • Ez egy írásvédett változó az alprogramokon belül; az értéke nem módosítható az alprogramon belül.
  • A hívó utasításban ez lehet egy változó, egy literálérték vagy egy kifejezés, például '5*8' vagy 'a/b'.
  • Alapértelmezés szerint a paraméterek IN típusúak.

OUT paraméter

  • Az alprogramok kimenetének lekérésére szolgál.
  • Ez egy írható-olvasható változó az alprogramokon belül; az értéke az alprogramokon belül módosítható.
  • A hívó utasításban mindig egy változónak kell lennie, amely az alprogramból származó értéket tartalmazza.

IN OUT Paraméter

  • Alprogramok bemenetének adására és kimenetének lekérésére egyaránt használják.
  • Ez egy írható-olvasható változó az alprogramokon belül; az értéke az alprogramokon belül módosítható.
  • A hívó utasításban mindig egy változónak kell lennie, amely az alprogramból származó értéket tartalmazza.

A paraméter típusát az alprogramok létrehozásakor kell megemlíteni.

VISSZATÉRÉS

A RETURN az a kulcsszó, amely arra utasítja a fordítót, hogy a vezérlést az alprogramról a hívó utasításra váltsa. Egy alprogramban a RETURN egyszerűen azt jelenti, hogy a vezérlésnek ki kell lépnie az alprogramból; amint a vezérlő megtalálja a RETURN kulcsszót, a mögötte lévő kódot kihagyja.

Normális esetben a szülő- vagy főblokk hívja meg az alprogramokat, és a vezérlés a szülőblokkról a meghívott alprogramra helyeződik át. Az alprogramban a RETURN utasítás visszaadja a vezérlést a szülőblokknak. Függvények esetén a RETURN utasítás szintén egy értéket ad vissza, amelynek adattípusát a függvénydeklarációkor megemlítjük.

Mi az az eljárás a PL/SQL-ben?

A Eljárás A PL/SQL-ben a program egy alprogram egység, amely név szerint meghívható PL/SQL utasítások csoportjából áll. Minden eljárásnak saját egyedi neve van, és a ... Oracle adatbázis adatbázis-objektumként.

Jegyzet: Egy alprogram nem más, mint egy eljárás, és manuálisan kell létrehozni a követelményeknek megfelelően. Létrehozás után adatbázis-objektumként tárolódik.

A PL/SQL eljárás alprogram egységének jellemzői a következők:

  • Az eljárások önálló blokkok, amelyek tárolhatók a adatbázis.
  • Nevükön hívhatók a PL/SQL utasítások végrehajtásához.
  • Főként egy folyamat végrehajtására használják őket.
  • Lehetnek beágyazott blokkok, vagy más blokkokba vagy csomagokba is beágyazhatók.
  • Tartalmaznak egy deklarációs részt (opcionális), egy végrehajtási részt és egy kivételkezelési részt (opcionális).
  • Az értékek paramétereken keresztül adhatók át egy eljárásnak, vagy kinyerhetők onnan.
  • Ezeket a paramétereket szerepeltetni kell a hívó utasításban.
  • Egy eljárás rendelkezhet egy RETURN utasítással, amely visszaadja a vezérlést a hívó blokknak, de a RETURN utasításon keresztül nem adhat vissza értéket.
  • Az eljárások nem hívhatók meg közvetlenül SELECT utasításokból; meghívhatók egy másik blokkból vagy az EXEC kulcsszó használatával.

Szintaxis

CREATE OR REPLACE PROCEDURE
<procedure_name>
(
<parameter1 IN/OUT <datatype>
..
.
)
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END;
  • A CREATE PROCEDURE utasítás arra utasítja a fordítót, hogy hozzon létre egy új eljárást. Az 'OR REPLACE' kulcsszó arra utasítja, hogy a meglévő eljárást (ha van ilyen) a jelenlegivel cserélje le.
  • Az eljárás nevének egyedinek kell lennie.
  • Az „IS” kulcsszót akkor használjuk, ha a tárolt eljárás egy másik blokkba van beágyazva. Ha az eljárás önálló, akkor az „AS” kulcsszót használjuk. Ettől a kódolási szabványtól eltekintve mindkettő jelentése ugyanaz.

1. példa: Eljárás létrehozása és meghívása EXEC használatával. Ebben a példában létrehozunk egy Oracle Egy olyan eljárás, amely egy nevet fogad bemenetként, és egy üdvözlő üzenetet nyomtat kimenetként, az EXEC parancs meghívásával.

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 Magyarázat:

  • Code 1. sor: Eljárás létrehozása 'welcome_msg' néven és egy 'p_name' paraméterrel, 'IN' típussal.
  • Code 4. sor: Az üdvözlő üzenet kinyomtatása a bemeneti név összefűzésével.
  • Az eljárás sikeresen lefordítva.
  • Code 7. sor: Az eljárás meghívása EXEC használatával a ' paraméterrelGuru99'. Az eljárás végrehajtódik és kinyomtatja a „Welcome” szöveget. Guru99. "

Mi az a függvény?

A függvény egy önálló PL/SQL alprogram. Az eljárásokhoz hasonlóan a függvényeknek is egyedi neve van, és PL/SQL adatbázis-objektumként tárolódik. Jellemzői a következők:

  • A függvények önálló blokkok, amelyeket főként számításokhoz használnak.
  • Egy függvény a RETURN kulcsszót használja egy érték visszaadására, amelynek adattípusa a létrehozáskor van definiálva.
  • Egy függvénynek vagy egy értéket kell visszaadnia, vagy kivételt kell kiváltania; a return kötelező a függvényekben.
  • Egy DML utasítások nélküli függvény közvetlenül meghívható egy SELECT lekérdezésben, míg egy DML-lel rendelkező függvény csak más PL/SQL blokkokból hívható meg.
  • Lehetnek beágyazott blokkjai, vagy más blokkokba vagy csomagokba is beágyazható.
  • Tartalmaz egy deklarációs részt (opcionális), egy végrehajtási részt és egy kivételkezelési részt (opcionális).
  • Az értékek paramétereken keresztül adhatók át a függvénynek, vagy kinyerhetők onnan.
  • Ezeket a paramétereket szerepeltetni kell a hívó utasításban.
  • Egy függvény a RETURN mellett OUT paramétereken keresztül is visszaadhat értéket.
  • Mivel mindig értéket ad vissza, a hívó utasítás mindig értékadó operátort használ a változó feltöltéséhez.

PL/SQL függvénystruktúra

Szintaxis

CREATE OR REPLACE FUNCTION
<function_name>
(
<parameter1 IN/OUT <datatype>
)
RETURN <datatype>
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END;
  • A CREATE FUNCTION parancs arra utasítja a fordítót, hogy hozzon létre egy új függvényt. Az 'OR REPLACE' parancs pedig arra utasítja, hogy a meglévő függvényt (ha van ilyen) a jelenlegivel cserélje le.
  • A függvény nevének egyedinek kell lennie.
  • Meg kell említeni a RETURN adattípust.
  • Az „IS” kulcsszót akkor használjuk, ha a függvény egy másik blokkba van beágyazva. Ha a függvény önálló, akkor az „AS” kulcsszót használjuk.

1. példa: Függvény létrehozása és meghívása egy anonim blokk használatával. Ebben a programban létrehozunk egy függvényt, amely egy nevet kap bemenetként, és egy üdvözlő üzenetet ad vissza, egy anonim blokkot és egy SELECT utasítást használva a meghívásához.

PL/SQL függvény létrehozása és meghívása

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 Magyarázat:

  • Code 1. sor: Létrehozom a 'welcome_msg_func' nevű függvényt, amelynek paramétere 'p_name', és típusa 'IN'.
  • Code 2. sor: A visszatérési típus VARCHAR2-ként való deklarálása.
  • Code 5. sor: Az összefűzött „Welcome” érték és a paraméterérték visszaadása.
  • Code 8. sor: Névtelen blokk a fenti függvény meghívásához.
  • Code 9. sor: A változó deklarálása ugyanolyan adattípussal, mint a függvény visszatérési típusa.
  • Code 11. sor: A függvény meghívása és a visszatérési érték feltöltése az 'lv_msg' változóba.
  • Code 12. sor: A változó értékének kinyomtatása. A kimenet a következő: „Üdvözöljük” Guru99. "
  • Code 14. sor: Ugyanazon függvény meghívása SELECT utasítással. A visszatérési érték a standard kimenetre kerül.

Hasonlóságok egy eljárás és egy függvény között

  • Mindkettő meghívható más PL/SQL blokkokból.
  • Ha az alprogramban keletkezett kivételt nem kezeli a program a saját programjában, kivételkezelés szakaszban a hívó blokkhoz terjed.
  • Mindkettőnek tetszőleges számú paramétere lehet.
  • Mindkettőt adatbázis-objektumként kezeli a PL/SQL.

Eljárás vs. funkció: Főbb különbségek

Eljárás Funkció
Főként egy adott folyamat végrehajtására használják. Főként valamilyen számítás elvégzésére használják.
Nem hívható meg SELECT utasításban. Egy DML utasításokat nem tartalmazó függvény meghívható SELECT utasítással.
Egy OUT paramétert használ egy érték visszaadására. A RETURN függvénnyel ad vissza egy értéket.
Nem kötelező értéket visszaadni. Kötelező értéket visszaadni.
A RETURN egyszerűen kilép az alprogram vezérléséből. A RETURN kilép az alprogram vezérléséből, és visszaadja az értéket.
A visszatérési adattípus nincs megadva a létrehozáskor. A visszatérési adattípus megadása kötelező a létrehozáskor.

Beépített funkciók PL/SQL-ben

PL / SQL különféle beépített függvényeket tartalmaz a karakterlánc és dátum adattípusok kezeléséhez. Itt láthatjuk a gyakran használt függvényeket és azok használatát.

Konverziós funkciók

Ezek a beépített függvények egyik adattípust a másikba konvertálják.

Funkció neve Használat Példa
TO_CHAR Egy másik adattípust karakteres adattípussá alakít. TO_CHAR(123);
TO_DATE (karakterlánc, formátum) A megadott karakterláncot dátummá alakítja. A karakterláncnak meg kell egyeznie a formátummal. TO_DATE('2015-JAN-15', 'YYYY-MON-DD'); teljesítmény: 1 / 15 / 2015
TO_NUMBER (szöveg, formátum) A szöveget a megadott formátumú számmá alakítja. A formátumban a '9' a számjegyek számát jelöli. Válassza ki a TO_NUMBER('1234','9999') számot a dual közül; teljesítmény: 1234. Válassza ki a TO_NUMBER('1,234.45′;'9,999.99') értéket a dual függvényből; teljesítmény: 1234.45

Húrfüggvények

Ezeket a függvényeket karakteres adattípuson használjuk.

Funkció neve Használat Példa
INSTR(szöveg, karakterlánc, kezdet, előfordulás) Megadja egy adott szöveg pozícióját a megadott karakterláncban. a text a fő karakterlánc, a string a keresendő szöveg, a start a kezdőpozíció (opcionális), az occurr pedig a keresett karakterlánc előfordulása (opcionális). Válassza ki az INSTR('AEROPLANE';'E';2;1) kifejezést a dual opcióból; teljesítmény: 2. Válassza ki az INSTR('AEROPLANE','E',2,2) értéket a kettős formátumból; teljesítmény: 9 (az E második előfordulása)
SUBSTR (szöveg, kezdet, hossz) Megadja a fő karakterlánc alkarakterláncának értékét. A text a fő karakterlánc, a start a kezdőpozíció, a length pedig a részkarakterláncba foglalandó hossza. select substr('repülőgép',1,7) from dual; teljesítmény: aeropla
NAGYBETŰS (szöveg) A megadott szöveg nagybetűs változatát adja vissza. Válassza a felső('guru99')-t a dual közül; teljesítmény: GURU99
ALSÓ (szöveg) A megadott szöveg kisbetűs változatát adja vissza. Válassza ki az alsó('AerOpLane') értéket a dual közül; teljesítmény: repülőgép
INITCAP (szöveg) Visszaadja a megadott szöveget, ahol minden szó nagybetűvel kezdődik. Válassza ki az INITCAP('guru99') értéket a dual táblából; teljesítmény: Guru99. Válaszd ki az INITCAP('my story') függvényt a dual mappából; teljesítmény: A történetem
HOSSZ (szöveg) Visszaadja a megadott karakterlánc hosszát. Válassza ki a LENGTH('guru99') értéket a dual mappából; teljesítmény: 6
LPAD (szöveg, hossz, pad_char) A bal oldali karakterláncot a megadott teljes hosszra tölti ki a megadott karakterrel. Válassza ki az LPAD('guru99', 10, '$') értéket a dual közül; teljesítmény: $$$$guru99
RPAD (szöveg, hossz, pad_char) A jobb oldali karakterláncot a megadott teljes hosszra, a megadott karakterrel tölti ki. Válassza ki az RPAD('guru99′,10,'-') értéket a dual táblából; teljesítmény: guru99--
LTRIM (szöveg) Levágja a szöveg elején lévő szóközt. Válassza az LTRIM(' parancsot Guru99') kettős hangzásból; teljesítmény: Guru99
RTRIM (szöveg) Levágja a szöveg végén lévő szóközt. Válassza az RTRIM(' függvénytGuru99 ') kettősből; teljesítmény: Guru99

Dátum funkciók

Ezek a függvények a dátumok manipulálására szolgálnak.

Funkció neve Használat Példa
ADD_MONTHS (dátum, hónapok száma) Hozzáadja a megadott hónapokat a dátumhoz. HÓNAPOK HOZZÁADÁSA('2015-01-01',5); teljesítmény: 05 / 01 / 2015
SYSDATE Visszaadja a szerver aktuális dátumát és idejét. Válassza a SYSDATE lehetőséget a kettős közül; teljesítmény: 10/4/2015 2:11:43
TÖRZS A dátumváltozó értékét lefelé kerekíti a lehető legkisebb értékre. válasszuk a sysdate, TRUNC(sysdate) dual közül; teljesítmény: 10/4/2015 2:12:39 PM, 10/4/2015
FORDULÓ A dátumot a legközelebbi határértékre kerekíti, felfelé vagy lefelé. Válassza ki a sysdate, ROUND(sysdate) értéket a dual táblából; teljesítmény: 10/4/2015 2:14:34 PM, 10/5/2015
MONTHS_BETWEEN Két dátum között eltelt hónapok számát adja vissza. Válassza ki a MONTHS_BETWEEN (sysdate+60, sysdate) értéket a dual mappából; teljesítmény: 2

GYIK

Egy függvénynek értéket kell visszaadnia, és használható egy SELECT-en belül, ha nincs DML-je. Egy eljárás egy folyamatot futtat, nem kell értéket visszaadnia, és nem hívható meg egy SELECT-ből.

Az IN egy írásvédett értéket ad át az alprogramnak. Az OUT egy értéket ad vissza a hívónak. Az IN OUT mindkettőt teszi, egy értéket fogad és egy esetleg megváltozott értéket ad vissza ugyanazon paraméteren keresztül.

Igen, ha nem tartalmaz DML-t, például INSERT, UPDATE vagy DELETE. Egy DML-t végrehajtó függvény csak egy másik PL/SQL blokkból hívható meg, közvetlenül egy lekérdezésen belül nem.

Igen. A mesterséges intelligencia képes CREATE PROCEDURE vagy CREATE FUNCTION utasításokat készíteni a megfelelő paramétermódokkal és egy RETURN típussal egy egyszerű leírásból. RevTelepítés előtt tekintse át a paramétereket és a kivételkezelést.

Az OR REPLACE parancs felülír egy meglévő, azonos nevű eljárást vagy függvényt anélkül, hogy eldobná a műveletet.ping először azt. Ez érintetlenül hagyja a támogatásokat, és ez a szokásos módja egy megváltozott alprogram újbóli telepítésének.

Foglald össze ezt a bejegyzést a következőképpen: