V tomto tutoriálu uvidíte podrobný popis vytváření a provádění pojmenovaných bloků (procedur a funkcí).
Procedury a funkce jsou podprogramy, které lze vytvořit a uložit do databáze jako databázové objekty. Mohou být také voláni nebo odkazováni uvnitř ostatních bloků.
Kromě toho probereme hlavní rozdíly mezi těmito dvěma podprogramy. Budeme také diskutovat o vestavěných funkcích Oracle.
V tomto výukovém programu Oracle Stored Procedure se naučíte-
- Terminologie v podprogramech PL / SQL
- Co je procedura v PL / SQL?
- Co je funkce?
- Podobnosti mezi postupem a funkcí
- Postup vs. Funkce: Klíčové rozdíly
- Integrované funkce v PL / SQL
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 uvádíme terminologie, o kterých budeme diskutovat.
Parametr:
Parametr je proměnná nebo zástupný symbol jakéhokoli platného datového typu PL / SQL, jehož prostřednictvím si podprogram PL / SQL vyměňuje hodnoty s hlavním kódem. Tento parametr umožňuje vstupovat do podprogramů a extrahovat z těchto podprogramů.
- Tyto parametry by měly být definovány společně s podprogramy v době vytváření.
- Tyto parametry jsou zahrnuty do volajícího příkazu těchto podprogramů pro interakci hodnot s podprogramy.
- Datový typ parametru v podprogramu a volajícím příkazu by měl být stejný.
- Velikost datového typu by se neměla zmínit v době deklarace parametru, protože velikost je pro tento typ dynamická.
Na základě jejich účelu jsou parametry klasifikovány jako
- V parametru
- Parametr OUT
- Parametr IN OUT
V parametru:
- Tento parametr se používá pro zadávání vstupů do podprogramů.
- Jedná se o proměnnou jen 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ávání výstupu z podprogramů.
- Jedná se o proměnnou 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á drží hodnotu z aktuálních podprogramů.
IN OUT Parametr:
- Tento parametr se používá jak pro zadávání vstupů, tak pro získávání výstupů z podprogramů.
- Jedná se o proměnnou 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á drží hodnotu z podprogramů.
Tyto typy parametrů by měly být zmíněny v době vytváření podprogramů.
VRÁTIT SE
RETURN je klíčové slovo, které dává kompilátoru pokyn k přepnutí ovládacího prvku z podprogramu na volající příkaz. V podprogramu RETURN jednoduše znamená, že řízení musí opustit podprogram. Jakmile řídicí jednotka v podprogramu najde klíčové slovo RETURN, bude kód přeskočen.
Normálně nadřazený nebo hlavní blok zavolá podprogramy a potom se ovládací prvek přesune z těchto nadřazených bloků do volaných podprogramů. RETURN v podprogramu vrátí ovládací prvek zpět do jeho nadřazeného bloku. V případě funkcí příkaz RETURN vrátí také hodnotu. Datový typ této hodnoty je vždy uveden v době deklarace funkce. Datový typ může být jakéhokoli platného datového typu PL / SQL.
Co je procedura v PL / SQL?
Postup v PL / SQL je podprogram jednotka, která se skládá ze skupiny příkazů PL / SQL, které lze nazvat podle názvu. Každá procedura v PL / SQL má svůj vlastní jedinečný název, pod kterým jej lze odkazovat a volat. Tato podprogramová jednotka v databázi Oracle je uložena jako databázový objekt.
Poznámka: Podprogram není nic jiného než postup a je třeba ho vytvořit ručně podle požadavku. Po vytvoření budou uloženy jako databázové objekty.
Níže jsou vlastnosti jednotky podprogramu Procedura v PL / SQL:
- Postupy jsou samostatné bloky programu, které lze uložit do databáze.
- Volání na tyto procedury PLSQL lze provést odkazem na jejich jméno, aby bylo možné provést příkazy PL / SQL.
- Používá se hlavně k provedení procesu v PL / SQL.
- Může mít vnořené bloky nebo může být definováno a vnořeno do ostatních bloků nebo balíčků.
- Obsahuje deklarační část (volitelná), prováděcí část, část pro zpracování výjimek (volitelná).
- Hodnoty lze předat do procedury Oracle nebo načíst z procedury prostřednictvím parametrů.
- Tyto parametry by měly být zahrnuty do volajícího příkazu.
- Procedura v SQL může mít příkaz RETURN pro vrácení ovládacího prvku 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. Lze je volat z jiného bloku nebo pomocí klíčového slova EXEC.
Syntax:
CREATE OR REPLACE PROCEDURE( … )[ IS | AS ] BEGIN EXCEPTION END;
- CREATE PROCEDURE dává kompilátoru pokyn, aby v Oracle vytvořil nový postup. Klíčové slovo „NEBO VYMĚNIT“ dává kompilátoru pokyn k nahrazení stávající procedury (pokud existuje) současnou.
- Název postupu by měl být jedinečný.
- Klíčové slovo „IS“ bude použito, když je uložená procedura v Oracle 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říklad 1: Vytvoření procedury a její volání pomocí EXEC
V tomto příkladu vytvoříme proceduru Oracle, která vezme název jako vstup a vytiskne uvítací zprávu jako výstup. K vyvolání procedury použijeme příkaz EXEC.
CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2)ISBEGINdbms_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' a s 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ě sestaven.
- Řádek kódu 7 : Volání procedury pomocí příkazu EXEC s parametrem 'Guru99'. Procedura je provedena a zpráva je vytištěna jako „Welcome Guru99“.
Co je funkce?
Funkce je samostatný podprogram PL / SQL. Stejně jako procedura PL / SQL mají i funkce jedinečný název, na který je možné je odkazovat. Ty jsou uloženy jako objekty databáze PL / SQL. Níže uvádíme některé z charakteristik 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 jeho datový typ je definován v době vytvoření.
- Funkce by měla buď vrátit hodnotu, nebo zvýšit výjimku, tj. Návrat je ve funkcích povinný.
- Funkci bez příkazů DML lze přímo volat 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áno a vnořeno do ostatních bloků nebo balíčků.
- Obsahuje deklarační část (volitelná), prováděcí část, část pro zpracování výjimek (volitelná).
- Hodnoty lze předat do funkce nebo načíst z procedury prostřednictvím parametrů.
- Tyto parametry by měly být zahrnuty do volajícího příkazu.
- Funkce PLSQL může také vrátit hodnotu prostřednictvím parametrů OUT, než pomocí RETURN.
- Protože vždy vrátí hodnotu, ve volajícím příkazu vždy doprovází operátor přiřazení k naplnění proměnných.
Syntax
CREATE OR REPLACE FUNCTION( )RETURN [ IS | AS ] BEGIN EXCEPTION END;
- CREATE FUNCTION dává kompilátoru pokyn, aby vytvořil novou funkci. Klíčové slovo „NEBO VYMĚNIT“ dává kompilátoru pokyn, aby nahradil stávající funkci (pokud existuje) aktuální.
- Název funkce by měl být jedinečný.
- Měl by být uveden datový typ RETURN.
- Klíčové slovo „IS“ bude použito, pokud je procedura 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říklad 1: 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 vyvolání funkce použijeme anonymní příkaz block a select.
CREATE OR REPLACE FUNCTION welcome_msgJune ( p_name IN VARCHAR2) RETURN VAR.CHAR2ISBEGINRETURN (‘Welcome ‘|| p_name);END;/DECLARElv_msg VARCHAR2(250);BEGINlv_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í funkce Oracle s názvem „welcome_msg_func“ as jedním parametrem „p_name“ typu „IN“.
- Řádek kódu 2 : deklarování návratového typu jako VARCHAR2
- Řádek kódu 5 : Vrácení zřetězené hodnoty „Vítejte“ a hodnoty 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é jako návratový datový typ funkce.
- Řádek kódu 11 : Volání funkce a naplně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 postupem a funkcí
- Oba lze volat z jiných bloků PL / SQL.
- Pokud výjimka vyvolaná v podprogramu není zpracována v sekci zpracování výjimek podprogramu, bude se šířit do volajícího bloku.
- Oba mohou mít tolik parametrů, kolik je požadováno.
- Oba jsou považovány za databázové objekty v PL / SQL.
Postup vs. Funkce: Klíčové rozdíly
Postup | Funkce |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Integrované funkce v PL / SQL
PL / SQL obsahuje různé integrované funkce pro práci s řetězci a datovým typem data. Zde uvidíme běžně používané funkce a jejich využití.
Konverzní funkce
Tyto integrované 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 datový typ znaků | 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', 'YYYY-MON-DD'); Výstup: 15. 1. 2015 |
TO_NUMBER (text, formát) | Převede text na typ čísla daného formátu. Informat '9' označuje počet číslic | Vyberte TO_NUMBER ('1234', '9999') z dual; Výstup: 1234 Vyberte TO_NUMBER ('1 234,45', '9 999,99') z duálního; Výstup: 1234 |
Řetězcové funkce
Jedná se o funkce, které se používají v datovém typu znaku.
Název funkce | Používání | Příklad |
---|---|---|
INSTR (text, řetězec, začátek, výskyt) | Dává pozici konkrétního textu v daném řetězci.
| Vyberte INSTR ('AIRPLANE', 'E', 2,1) z duálního výstupu : 2 Vyberte INSTR ('AIRPLANE', 'E', 2,2) z duálního výstupu: 9 ( 2. výskyt E) |
SUBSTR (text, začátek, délka) | Dává hodnotu podřetězce hlavního řetězce.
| vyberte substr ('airplane', 1,7) z duálního výstupu : 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žší („letadlo“) z duálního; Výstup : letadlo |
INITCAP (text) | Vrátí zadaný text s počátečním písmenem velkými písmeny. | Vyberte ('guru99') z duálního výstupu : Guru99 Vyberte ('můj příběh') z duálního výstupu : Můj příběh |
DÉLKA (text) | Vrátí délku daného řetězce | Vyberte LENGTH ('guru99') z dual; Výstup : 6 |
LPAD (text, délka, pad_char) | Vloží řetězec na levé straně pro danou délku (celkový řetězec) s daným znakem | Vyberte LPAD ('guru99', 10, '$') z dual; Výstup : $$$$ guru99 |
RPAD (text, délka, pad_char) | Vloží řetězec na pravou stranu pro danou délku (celkový řetězec) s daným znakem | Vyberte RPAD ('guru99', 10, '-') z duálního výstupu : guru99 ---- |
LTRIM (text) | Ořízne úvodní prázdné místo z textu | Vyberte LTRIM ('Guru99') z dual; Výstup : Guru99 |
RTRIM (text) | Ořízne koncové prázdné místo z 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 duálního; Výstup : 4. 10. 2015 14:11:43 |
TRUNC | Zaokrouhlení proměnné data na nižší možnou hodnotu | vyberte sysdate, TRUNC (sysdate) z dual; Výstup : 4. 10. 2015 14:12:39 4. 4. 2015 |
KOLO | Zaokrouhlí datum na nejbližší limit, buď vyšší, nebo nižší | Vyberte sysdate, ROUND (sysdate) z duálního výstupu : 4/10/2015 14:14:34 PM 10/10/2015 |
MONTHS_BETWEEN | Vrátí počet měsíců mezi dvěma daty | Vyberte MONTHS_BETWEEN (sysdate + 60, sysdate) z duálního výstupu : 2 |
souhrn
V této kapitole jsme se naučili následující.
- Jak vytvořit postup a různé způsoby jeho volání
- Jak vytvořit funkci a různé způsoby jejího volání
- Podobnosti a rozdíly mezi postupem a funkcí
- Parametry a RETURN společné terminologie v podprogramech PL / SQL
- Běžné vestavěné funkce v Oracle PL / SQL