Oracle Uložená procedura a funkce PL/SQL s příklady

⚡ Chytré shrnutí

Podprogramy v PL/SQL jsou pojmenované bloky, procedury a funkce, uložené v databázi a volané jménem. Procedura spouští proces a funkce vrací hodnotu, přičemž obě funkce si vyměňují data prostřednictvím parametrů IN, OUT a IN OUT a klíčového slova RETURN.

  • 🧩 Dva podprogramy: Procedury spouštějí proces; funkce provádějí výpočet a vracejí hodnotu.
  • 🔌 parametry: IN předává vstup, OUT vrací výstup a IN OUT provádí obojí.
  • ↩️ NÁVRAT: Vrací řízení volajícímu; ve funkci také vrací hodnotu deklarovaného typu.
  • 🗄️ Uložené objekty: Oba jsou uloženy jako databázové objekty a lze je volat z jiných bloků.
  • 🔎 VYBRAT Použití: Funkci bez DML lze volat uvnitř SELECTu; proceduru nikoli.
  • 🇧🇷 Klíčový rozdíl: Funkce musí vracet hodnotu, zatímco procedura ne.
  • 🛠️ Vestavěné funkce: Oracle dodává konverzní, řetězcové a datové funkce připravené k použití.

Oracle Uložené procedury a funkce v PL/SQL

Co jsou to podprogramy PL/SQL?

V tomto tutoriálu uvidíte podrobný popis, jak vytvořit a spustit pojmenované bloky, procedury a funkce.

Procedury a funkce jsou podprogramy, které lze vytvářet a ukládat do databáze jako databázové objekty. Lze je volat nebo na ně odkazovat i uvnitř jiných bloků.

Také se zabýváme hlavními rozdíly mezi těmito dvěma podprogramy a diskutujeme o... Oracle vestavěné funkce.

Terminologie v podprogramech PL/SQL

Než se budeme věnovat podprogramům v PL/SQL, probereme si různé terminologie, které jsou součástí těchto podprogramů.

Parametr

Parametr je proměnná nebo zástupný symbol pro jakýkoli platný Datový typ PL/SQL pomocí kterého si podprogram PL/SQL vyměňuje hodnoty s hlavním kódem. Tento parametr umožňuje vstup do podprogramů a extracodvozování hodnot z nich.

  • Tyto parametry by měly být definovány spolu s podprogramy v době vytvoření.
  • Jsou zahrnuty ve volajícím příkazu pro interakci 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 uvádět při deklaraci parametru, protože je dynamická.

Podle jejich účelu se parametry dělí na:

  1. Parametr IN
  2. Parametr OUT
  3. Parametr IN OUT

Parametr IN

  • Používá se pro zadávání vstupů do podprogramů.
  • Je to proměnná pouze pro čtení uvnitř podprogramů; její hodnotu nelze uvnitř podprogramu změnit.
  • Ve volajícím příkazu to může být proměnná, literální hodnota nebo výraz, například '5*8' nebo 'a/b'.
  • Ve výchozím nastavení jsou parametry typu IN.

Parametr OUT

  • Používá se pro získání výstupu z podprogramů.
  • Je to proměnná pro čtení i zápis uvnitř podprogramů; její hodnotu lze v nich měnit.
  • Ve volajícím příkazu by měla být vždy proměnná, která bude obsahovat hodnotu z podprogramu.

Parametr IN OUT

  • Používá se jak pro zadávání vstupů, tak pro získávání výstupů z podprogramů.
  • Je to proměnná pro čtení i zápis uvnitř podprogramů; její hodnotu lze v nich měnit.
  • Ve volajícím příkazu by měla být vždy proměnná, která bude obsahovat hodnotu z podprogramu.

Typ parametru by měl být uveden při vytváření podprogramů.

VRÁTIT SE

RETURN je klíčové slovo, které instruuje kompilátor k přepnutí řízení z podprogramu na volající příkaz. V podprogramu RETURN jednoduše znamená, že řízení musí podprogram ukončit; jakmile kontrolér najde RETURN, kód za ním se přeskočí.

Normálně nadřazený nebo hlavní blok volá podprogramy a řízení se přesune z nadřazeného bloku na volaný podprogram. Příkaz RETURN v podprogramu vrací řízení zpět do nadřazeného bloku. V případě funkcí příkaz RETURN také vrací hodnotu, jejíž datový typ je uveden v okamžiku deklarace funkce.

Co je to procedura v PL/SQL?

A Postup V PL/SQL je podprogramová jednotka, která se skládá ze skupiny příkazů PL/SQL, které lze volat jménem. Každá procedura má svůj vlastní jedinečný název a je uložena v Oracle databázi jako databázový objekt.

Poznámka: Podprogram není nic jiného než procedura a je třeba jej vytvořit ručně podle požadavku. Po vytvoření se uloží jako databázový objekt.

Charakteristiky jednotky podprogramu procedury v PL/SQL jsou:

  • Procedury jsou samostatné bloky, které lze uložit do databáze.
  • Mohou být volány svým jménem pro spuštění příkazů PL/SQL.
  • Používají se hlavně k provedení procesu.
  • Mohou mít vnořené bloky nebo být vnořeny do jiných bloků či balíčků.
  • Obsahují deklarační část (volitelné), prováděcí část a část pro ošetření výjimek (volitelné).
  • Hodnoty lze do procedury předávat nebo z ní načítat pomocí parametrů.
  • Tyto parametry by měly být zahrnuty do příkazu volání.
  • Procedura může mít příkaz RETURN pro vrácení řízení volajícímu bloku, ale nemůže vrátit žádnou hodnotu 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
<procedure_name>
(
<parameter1 IN/OUT <datatype>
..
.
)
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END;
  • Příkaz CREATE PROCEDURE instruuje kompilátor k vytvoření nové procedury. Klíčové slovo 'OR REPLACE' instruuje kompilátor k nahrazení existující procedury (pokud existuje) aktuální procedurou.
  • Název procedury by měl být jedinečný.
  • Klíčové slovo „IS“ se používá, když je uložená procedura vnořená uvnitř jiného bloku. Pokud je procedura samostatná, používá se „AS“. Kromě tohoto kódovacího standardu mají oba výrazy stejný význam.

Příklad 1: Vytvoření procedury a její volání pomocí EXEC. V tomto příkladu vytvoříme Oracle procedura, která přijímá jméno jako vstup a tiskne uvítací zprávu jako výstup, přičemž k jejímu volání se používá 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');

Code Vysvětlení:

  • Code řádek 1: Vytvoření procedury s názvem 'welcome_msg' a jedním parametrem 'p_name' typu 'IN'.
  • Code řádek 4: Výpis uvítací zprávy zřetězením vstupního názvu.
  • Procedura byla úspěšně zkompilována.
  • Code řádek 7: Volání procedury pomocí EXEC s parametrem 'Guru99'. Procedura se provede a vypíše „Vítejte Guru99. "

Co je funkce?

Funkce je samostatný podprogram v PL/SQL. Stejně jako procedura má funkce jedinečný název a je uložena jako databázový objekt PL/SQL. Její charakteristiky jsou:

  • Funkce jsou samostatné bloky používané hlavně pro výpočty.
  • Funkce používá klíčové slovo RETURN k vrácení hodnoty, jejíž datový typ je definován v době vytvoření.
  • Funkce by měla buď vrátit hodnotu, nebo vyvolat výjimku; návrat je ve funkcích povinný.
  • Funkci bez příkazů DML lze volat přímo v dotazu SELECT, zatímco funkci s DML lze volat pouze z jiných bloků PL/SQL.
  • Může mít vnořené bloky nebo být vnořen do jiných bloků či balíčků.
  • Obsahuje deklarační část (volitelné), prováděcí část a část pro ošetření výjimek (volitelné).
  • Hodnoty lze do funkce předávat nebo z ní načítat pomocí parametrů.
  • Tyto parametry by měly být zahrnuty do příkazu volání.
  • Funkce může kromě použití funkce RETURN vracet hodnotu také prostřednictvím parametrů OUT.
  • Protože vždy vrací hodnotu, volající příkaz vždy používá operátor přiřazení k naplnění proměnné.

Struktura funkcí PL/SQL

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;
  • Příkaz CREATE FUNCTION instruuje kompilátor k vytvoření nové funkce. Příkaz 'OR REPLACE' instruuje kompilátor k nahrazení existující funkce (pokud existuje) aktuální funkcí.
  • Název funkce by měl být jedinečný.
  • Je třeba zmínit datový typ RETURN.
  • Klíčové slovo 'IS' se používá, když je funkce vnořená uvnitř jiného bloku. Pokud je funkce samostatná, používá se 'AS'.

Příklad 1: Vytvoření funkce a její volání pomocí anonymního bloku. V tomto programu vytvoříme funkci, která přijímá jméno jako vstup a vrací uvítací zprávu, přičemž k jejímu volání použijeme anonymní blok a příkaz SELECT.

Vytvoření funkce v PL/SQL a její volání

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 Vysvětlení:

  • Code řádek 1: Vytvoření funkce s názvem 'welcome_msg_func' a jedním parametrem 'p_name' typu 'IN'.
  • Code řádek 2: Deklarace návratového typu jako VARCHAR2.
  • Code řádek 5: Vrátí zřetězenou hodnotu 'Vítejte' a hodnotu parametru.
  • Code řádek 8: Anonymní blok pro volání výše uvedené funkce.
  • Code řádek 9: Deklarace proměnné se stejným datovým typem, jako je návratový typ funkce.
  • Code řádek 11: Volání funkce a naplnění návratové hodnoty do proměnné 'lv_msg'.
  • Code řádek 12: Výpis hodnoty proměnné. Výstup je „Vítejte“. Guru99. "
  • Code řádek 14: Volání stejné funkce pomocí příkazu SELECT. Návratová hodnota je směrována 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í ošetřena v jeho zpracování výjimek sekce, šíří se 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.

Procedura vs. funkce: Klíčové rozdíly

Postup funkce
Používá se hlavně k provedení určitého procesu. Používá se hlavně k provádění 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.
Používá parametr OUT k vrácení hodnoty. Používá RETURN k vrácení hodnoty.
Není povinné vracet hodnotu. Je povinné vrátit hodnotu.
Příkaz RETURN jednoduše ukončí řízení podprogramu. Příkaz RETURN ukončí řízení podprogramu a zároveň vrátí hodnotu.
Typ návratových dat není při vytváření specifiková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 datovými typy řetězců a data. Zde uvidíme běžně používané funkce a jejich použití.

Konverzní funkce

Tyto vestavěné funkce převádějí jeden datový typ na jiný.

Název funkce Používání Příklad
TO_CHAR Převede jiný datový typ na datový typ znak. TO_CHAR(123);
DO_DATUM (řetězec, formát) Převede zadaný ř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 číslo v daném formátu. Ve formátu '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.45

Řetězcové funkce

Tyto funkce se používají s datovým typem znak.

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. text je hlavní řetězec, řetězec je text, který se má hledat, start je počáteční pozice (volitelné) a occurrence je výskyt hledaného řetězce (volitelné). Vyberte INSTR('LETADLO';'E';2;1) z dual; Výstup2. Vyberte INSTR('LETADLO','E',2,2) z duálního pole; Výstup: 9 (2. výskyt E)
SUBSTR (text, začátek, délka) Vrací hodnotu podřetězce hlavního řetězce. text je hlavní řetězec, start je počáteční pozice a length je délka podřetězce, která má být podřetězec převeden. vybrat substr('letadlo',1,7) z dual; Výstup: aeropla
HORNÍ (text) Vrátí velká písmena zadaného textu. Vyberte horní('guru99') z dual; Výstup: GURU99
NIŽŠÍ (text) Vrátí malá písmena zadaného textu. Vyberte lower('AerOpLane') z dual; Výstup: letadlo
INITCAP (text) Vrátí zadaný text, přičemž každé slovo je začátečním písmenem velkým. Vyberte INITCAP('guru99' z dual; Výstup: Guru99. Vyberte INITCAP('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, znak_padu) Doplní řetězec vlevo na zadanou celkovou délku daným znakem. Vyberte LPAD('guru99', 10, '$') z dual; Výstup: $$$$ guru99
RPAD (text, délka, pad_char) Doplní řetězec vpravo na zadanou celkovou délku daným znakem. Vyberte RPAD('guru99',10,'-') z dual; Výstup: guru99—-
LTRIM (text) Ořízne úvodní bílé znaky z textu. Vyberte LTRIM(' Guru99') z duality; Výstup: Guru99
RTRIM (text) Ořízne z textu koncové bílé mezery. Vyberte RTRIM('Guru99 ') z duality; Výstup: Guru99

Funkce data

Tyto funkce se používají k manipulaci s daty.

Název funkce Používání Příklad
ADD_MONTHS (datum, počet měsíců) Přičte k datu zadané měsíce. ADD_MONTHS('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 Zaokrouhlí proměnnou data dolů na nejnižší možnou hodnotu. vyberte sysdate, TRUNC(sysdate) z dual; Výstup: 10/4/2015 2:12:39 PM, 10/4/2015
KOLO Zaokrouhlí datum na nejbližší hodnotu, nahoru nebo dolů. Vyberte systémový_datum, ROUND(sysový_datum) z duálního; Výstup: 10/4/2015 2:14:34 PM, 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

Nejčastější dotazy

Funkce musí vracet hodnotu a lze ji použít uvnitř příkazu SELECT, pokud nemá DML. Procedura spouští proces, nemusí vracet hodnotu a nelze ji volat z příkazu SELECT.

IN předává do podprogramu hodnotu pouze pro čtení. OUT vrací hodnotu volajícímu. IN OUT provádí obojí, přijímá hodnotu a vrací případně změněnou hodnotu prostřednictvím stejného parametru.

Ano, pokud neobsahuje žádné DML, jako například INSERT, UPDATE nebo DELETE. Funkci, která provádí DML, lze volat pouze z jiného bloku PL/SQL, nikoli přímo uvnitř dotazu.

Ano. Umělá inteligence dokáže navrhnout proceduru CREATE PROCEDURE nebo CREATE FUNCTION se správnými režimy parametrů a typem RETURN z prostého popisu. RevPřed nasazením si prohlédněte parametry a zpracování výjimek.

NEBO NAHRADIT přepíše existující proceduru nebo funkci se stejným názvem bez jejího odstranění.ping to první. Tím se zachovají granty a je to obvyklý způsob, jak znovu nasadit změněný podprogram.

Shrňte tento příspěvek takto: