Oracle Uložená procedura a funkce PL/SQL s příklady
Procedury a funkce jsou podprogramy, které lze vytvořit a uložit do databáze jako databázové objekty. Mohou být volány nebo odkazovány také v jiných blocích.
Kromě toho pokryjeme hlavní rozdíly mezi těmito dvěma podprogramy. Také budeme diskutovat o Oracle vestavěné funkce.
Terminologie v podprogramech PL/SQL
Než se seznámíme s podprogramy PL/SQL, probereme různé terminologie, které jsou součástí těchto podprogramů. Níže jsou uvedeny terminologie, o kterých budeme diskutovat.
Parametr
Parametr je proměnný nebo zástupný symbol jakéhokoli platného datový typ PL/SQL prostřednictvím kterého si podprogram PL/SQL vyměňuje hodnoty s hlavním kódem. Tento parametr umožňuje zadat vstup do podprogramů a extrahovat z těchto podprogramů.
- Tyto parametry by měly být definovány spolu s podprogramy v době vytvoření.
- Tyto parametry jsou obsaženy ve volacím příkazu těchto podprogramů pro interakci hodnot s podprogramy.
- Datový typ parametru v podprogramu a volajícího příkazu by měly být stejné.
- Velikost datového typu by neměla být uvedena v době deklarace parametru, protože velikost je pro tento typ dynamická.
Na základě jejich účelových parametrů jsou klasifikovány jako
- Parametr IN
- Parametr OUT
- Parametr IN OUT
Parametr IN
- Tento parametr se používá pro zadávání vstupu do podprogramů.
- Je to proměnná pouze pro čtení uvnitř podprogramů. Jejich hodnoty nelze v podprogramu měnit.
- Ve volajícím příkazu mohou být tyto parametry proměnná nebo doslovná hodnota nebo výraz, například to může být aritmetický výraz jako „5*8“ nebo „a/b“, kde „a“ a „b“ jsou proměnné .
- Ve výchozím nastavení jsou parametry typu IN.
Parametr OUT
- Tento parametr se používá pro získání výstupu z podprogramů.
- Je to proměnná pro čtení a zápis uvnitř podprogramů. Jejich hodnoty lze měnit uvnitř podprogramů.
- Ve volajícím příkazu by tyto parametry měly být vždy proměnnou, která bude obsahovat hodnotu z aktuálních podprogramů.
Parametr IN OUT
- Tento parametr se používá jak pro zadávání vstupu, tak pro získávání výstupu z podprogramů.
- Je to proměnná pro čtení a zápis uvnitř podprogramů. Jejich hodnoty lze měnit uvnitř podprogramů.
- Ve volajícím příkazu by tyto parametry měly být vždy proměnnou, která bude obsahovat hodnotu z podprogramů.
Tyto typy parametrů by měly být uvedeny při vytváření podprogramů.
VRÁTIT SE
RETURN je klíčové slovo, které dává kompilátoru pokyn k přepnutí řízení z podprogramu na volající příkaz. V podprogramu RETURN jednoduše znamená, že ovládací prvek potřebuje opustit podprogram. Jakmile kontrolér najde v podprogramu klíčové slovo RETURN, následující kód bude přeskočen.
Normálně nadřazený nebo hlavní blok zavolá podprogramy a poté se řízení přesune z těchto rodičovských bloků na volané podprogramy. RETURN v podprogramu vrátí ovládací prvek zpět do jejich rodičovského bloku. V případě funkcí příkaz RETURN také vrací hodnotu. Datový typ této hodnoty je vždy uveden v době deklarace funkce. Datový typ může být libovolného platného datového typu PL/SQL.
Co je procedura v PL/SQL?
A Postup v PL/SQL je jednotka podprogramu, která se skládá ze skupiny příkazů PL/SQL, které lze volat jménem. Každá procedura v PL/SQL má svůj jedinečný název, pod kterým se na ni lze odkazovat a volat ji. Tato jednotka podprogramu v Oracle databáze je uložena jako databázový objekt.
Poznámka: Podprogram není nic jiného než procedura a musí být vytvořen ručně podle požadavku. Po vytvoření budou uloženy jako databázové objekty.
Níže jsou uvedeny charakteristiky jednotky podprogramu Procedure v PL/SQL:
- Procedury jsou samostatné bloky programu, které lze uložit do databáze.
- Volání těchto procedur PLSQL lze provést odkazem na jejich název a provést příkazy PL/SQL.
- Používá se hlavně k provádění procesu v PL/SQL.
- Může mít vnořené bloky nebo může být definován a vnořen do jiných bloků nebo balíčků.
- Obsahuje část deklarace (nepovinná), prováděcí část, část zpracování výjimek (nepovinná).
- Hodnoty lze předávat do Oracle procedura nebo načtená z procedury prostřednictvím parametrů.
- Tyto parametry by měly být zahrnuty do příkazu volání.
- Procedura v SQL může mít příkaz RETURN, který vrátí ovládací prvek do volajícího bloku, ale nemůže vrátit žádné hodnoty prostřednictvím příkazu RETURN.
- Procedury nelze volat přímo z příkazů SELECT. Mohou být volány z jiného bloku nebo pomocí klíčového slova EXEC.
Syntax
CREATE OR REPLACE PROCEDURE <procedure_name> ( <parameterl IN/OUT <datatype> .. . ) [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- CREATE PROCEDURE instruuje kompilátor, aby vytvořil novou proceduru v Oracle. Klíčové slovo 'OR REPLACE' dává kompilaci pokyn k nahrazení existující procedury (pokud existuje) aktuální.
- Název procedury by měl být jedinečný.
- Klíčové slovo 'IS' bude použito, když je uložená procedura v Oracle je vnořena do některých dalších bloků. Pokud je postup samostatný, použije se „AS“. Kromě tohoto standardu kódování mají oba stejný význam.
Příklad1: Vytvoření procedury a její volání pomocí EXEC
V tomto příkladu vytvoříme Oracle procedura, která vezme jméno jako vstup a vytiskne uvítací zprávu jako výstup. K volání procedury použijeme příkaz EXEC.
CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2) IS BEGIN dbms_output.put_line (‘Welcome '|| p_name); END; / EXEC welcome_msg (‘Guru99’);
Vysvětlení kódu:
- Řádek kódu 1: Vytvoření procedury s názvem 'welcome_msg' as jedním parametrem 'p_name' typu 'IN'.
- Řádek kódu 4: Tisk uvítací zprávy zřetězením názvu vstupu.
- Postup je úspěšně zkompilován.
- Řádek kódu 7: Volání procedury pomocí příkazu EXEC s parametrem 'Guru99'. Procedura se provede a zpráva se vytiskne jako „Welcome Guru99“.
Co je Funkce?
Funkce je samostatný podprogram PL/SQL. Stejně jako procedura PL/SQL mají funkce jedinečný název, pod kterým se na ně lze odkazovat. Ty jsou uloženy jako databázové objekty PL/SQL. Níže jsou uvedeny některé charakteristiky funkcí.
- Funkce jsou samostatný blok, který se používá hlavně pro účely výpočtu.
- Funkce používá klíčové slovo RETURN k vrácení hodnoty a její datový typ je definován v době vytvoření.
- Funkce by měla buď vrátit hodnotu, nebo vyvolat výjimku, tj. návrat je ve funkcích povinný.
- Funkci bez příkazů DML lze volat přímo v dotazu SELECT, zatímco funkci s operací DML lze volat pouze z jiných bloků PL/SQL.
- Může mít vnořené bloky nebo může být definován a vnořen do jiných bloků nebo balíčků.
- Obsahuje část deklarace (nepovinná), prováděcí část, část zpracování výjimek (nepovinná).
- Hodnoty mohou být předány do funkce nebo načteny z procedury prostřednictvím parametrů.
- Tyto parametry by měly být zahrnuty do příkazu volání.
- Funkce PLSQL může také vrátit hodnotu prostřednictvím parametrů OUT jinak než pomocí RETURN.
- Protože vždy vrátí hodnotu, při volání příkazu vždy doprovází operátor přiřazení k naplnění proměnných.
Syntax
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 dává kompilátoru pokyn k vytvoření nové funkce. Klíčové slovo 'OR REPLACE' dává kompilátoru pokyn, aby nahradil existující funkci (pokud existuje) aktuální.
- Název funkce by měl být jedinečný.
- Je třeba uvést datový typ RETURN.
- Klíčové slovo 'IS' bude použito, když je procedura vnořena do jiných bloků. Pokud je postup samostatný, použije se „AS“. Kromě tohoto standardu kódování mají oba stejný význam.
Příklad1: Vytvoření funkce a její volání pomocí anonymního bloku
V tomto programu vytvoříme funkci, která vezme jméno jako vstup a vrátí uvítací zprávu jako výstup. K volání funkce použijeme příkaz anonymního bloku a výběru.
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;
Vysvětlení kódu:
- Řádek kódu 1: Vytvoření Oracle funkce s názvem 'welcome_msg_func' as jedním parametrem 'p_name' typu 'IN'.
- Řádek kódu 2: deklaruje návratový typ jako VARCHAR2
- Řádek kódu 5: Vrací zřetězenou hodnotu 'Vítejte' a hodnotu parametru.
- Řádek kódu 8: Anonymní blok pro volání výše uvedené funkce.
- Řádek kódu 9: Deklarování proměnné s datovým typem stejným jako návratový datový typ funkce.
- Řádek kódu 11: Volání funkce a vyplnění návratové hodnoty do proměnné 'lv_msg'.
- Řádek kódu 12: Tisk hodnoty proměnné. Výstup, který zde získáte, je „Welcome Guru99“
- Řádek kódu 14: Volání stejné funkce prostřednictvím příkazu SELECT. Návratová hodnota je směrována přímo na standardní výstup.
Podobnosti mezi procedurou a funkcí
- Oba lze volat z jiných bloků PL/SQL.
- Pokud výjimka vyvolaná v podprogramu není zpracována v podprogramu zpracování výjimek sekce, pak se rozšíří do volajícího bloku.
- Oba mohou mít libovolný počet parametrů.
- Oba jsou v PL/SQL považovány za databázové objekty.
Postup vs. Funkce: Klíčové rozdíly
Postup | funkce |
---|---|
Používá se hlavně k provedení určitého procesu | Používá se hlavně k provedení některých výpočtů |
Nelze volat v příkazu SELECT | Funkci, která neobsahuje žádné příkazy DML, lze volat v příkazu SELECT |
Pomocí parametru OUT vrátíte hodnotu | Pomocí RETURN vrátíte hodnotu |
Vrácení hodnoty není povinné | Je povinné vrátit hodnotu |
RETURN jednoduše ukončí ovládání z podprogramu. | RETURN ukončí řízení z podprogramu a také vrátí hodnotu |
Návratový datový typ nebude v době vytvoření zadán | Návratový datový typ je povinný v době vytvoření |
Vestavěné funkce v PL/SQL
PL / SQL obsahuje různé vestavěné funkce pro práci s řetězci a datovým typem data. Zde se podíváme na běžně používané funkce a jejich použití.
Konverzní funkce
Tyto vestavěné funkce se používají k převodu jednoho datového typu na jiný datový typ.
Název funkce | Používání | Příklad |
---|---|---|
TO_CHAR | Převede druhý datový typ na znakový datový typ | TO_CHAR(123); |
TO_DATE ( řetězec, formát ) | Převede daný řetězec na datum. Řetězec by měl odpovídat formátu. |
TO_DATE('2015-JAN-15', 'RRRR-MON-DD'); Výstup: 1 / 15 / 2015 |
TO_NUMBER (text, formát) |
Převede text na číselný typ daného formátu. Informat '9' označuje počet číslic |
Vyberte TO_NUMBER('1234′,'9999') z duálního;
Výstup: 1234 Vyberte TO_NUMBER('1,234.45′,'9,999.99') z duálního; Výstup: 1234 |
Řetězcové funkce
Toto jsou funkce, které se používají na datovém typu znaku.
Název funkce | Používání | Příklad |
---|---|---|
INSTR(text, řetězec, začátek, výskyt) | Udává pozici konkrétního textu v daném řetězci.
|
Vyberte INSTR('AEROPLANE','E',2,1) z duálního
Výstup: 2 Vyberte INSTR('AEROPLANE','E',2,2) z duálního Výstup: 9 (2nd výskyt E) |
SUBSTR ( text, začátek, délka) | Udává hodnotu podřetězce hlavního řetězce.
|
select substr('aeroplane',1,7) from dual
Výstup: aeropla |
HORNÍ ( text ) | Vrátí velká písmena zadaného textu | Vyberte horní('guru99') z dual;
Výstup: GURU99 |
DOLNÍ ( text ) | Vrátí malá písmena zadaného textu | Vyberte nižší ('AerOpLane') z duálního;
Výstup: letadlo |
INITCAP ( text) | Vrátí zadaný text s počátečním písmenem velkým. | Vyberte ('guru99') z dual
Výstup: Guru99 Vyberte ('můj příběh') z dual Výstup: Můj příběh |
DÉLKA ( text ) | Vrátí délku zadaného řetězce | Vyberte LENGTH ('guru99') z dual;
Výstup: 6 |
LPAD ( text, délka, pad_char) | Doplní řetězec na levé straně pro danou délku (celkový řetězec) daným znakem | Vyberte LPAD('guru99', 10, '$') z dual;
Výstup: $$$$ guru99 |
RPAD (text, délka, pad_char) | Doplní řetězec na pravou stranu pro danou délku (celkový řetězec) daným znakem | Vyberte RPAD('guru99′,10,'-') z dual
Výstup: guru99—- |
LTRIM ( text ) | Ořízne úvodní bílé místo z textu | Vyberte LTRIM(' Guru99') z dual;
Výstup: Guru99 |
RTRIM ( text ) | Ořízne bílé místo na konci textu | Vyberte RTRIM('Guru99') z dual;
Výstup; Guru99 |
Funkce data
Jedná se o funkce, které se používají pro manipulaci s daty.
Název funkce | Používání | Příklad |
---|---|---|
ADD_MONTHS (datum, počet měsíců) | Přidá dané měsíce k datu | ADD_MONTH('2015-01-01',5);
Výstup: 05 / 01 / 2015 |
SYSDATE | Vrátí aktuální datum a čas serveru | Vyberte SYSDATE z dual;
Výstup: 10. 4. 2015 2:11:43 |
KMEN | Zaokrouhlení proměnné data na nižší možnou hodnotu | vyberte sysdate, TRUNC(sysdate) z dual;
Výstup: 10. 4. 2015 2:12:39 10. 4. 2015 |
KOLO | Zaokrouhlí datum na nejbližší limit buď vyšší nebo nižší | Vyberte sysdate, ROUND(sysdate) z dual
Výstup: 10. 4. 2015 2:14:34 10. 5. 2015 |
MONTHS_BETWEEN | Vrátí počet měsíců mezi dvěma daty | Vyberte MONTHS_BETWEEN (sysdate+60, sysdate) z dual
Výstup: 2 |
Shrnutí
V této kapitole jsme se naučili následující.
- Jak vytvořit proceduru a různé způsoby jejího volání
- Jak vytvořit funkci a různé způsoby jejího volání
- Podobnosti a rozdíly mezi procedurou a funkcí
- Parametry a RETURN běžné terminologie v podprogramech PL/SQL
- Běžné vestavěné funkce v Oracle PL / SQL