|
![]() | Příkaz FOR | ![]() | Řídící příkazy | Příkaz SIGNAL | ![]() |
volání_procedury ::= CALL [
DETACHED] [schema.]jméno ([skutečný_parametr {, skutečný_parametr}… ]); skutečný_parametr ::= klíčový_parametr | poziční_parametr klíčový_parametr ::= jméno_formálního_parametru => výraz poziční_parametr ::= výraz
Příkaz CALL zavolá proceduru vytvořenou příkazem CREATE PROCEDURE (globální - uloženou jako objekt aplikace) nebo lokální (deklarovanou pomocí DECLARE PROCEDURE) nebo standardní deklarovanou v jazyce (např. SQL_execute
, Log_write
, Free_deleted
, Set_sql_option
).
Je možné volat i procedury uložené v jiné aplikaci - jméno procedury prefixujte jménem aplikace (v SQL terminologii schématu) a tečkou. Upozornění: procedura je kompilovaná v kontextu aplikace, kde je uložena, ne v kontextu aplikace, odkud je volána. Zavolá-li procedura tabulku neprefixovanou jménem aplikace, použije se tabulka v té aplikaci, kde je procedura uložena.
Je-li použito slovo DETACHED, procedura se spustí v samostatném vlákně - podrobnosti. Jako DETACHED nelze spustit lokální nebo standardní procedury.
Poziční skutečné parametry se přiřazují formálním parametrům uvedeným v popisu procedury na základě své pozice (po řadě zleva doprava), zatímco klíčové parametry jsou rozlišeny na základě jména formálního parametru. Poziční parametry musí být uvedeny před klíčovými.
Hodnota vstupního parametrem je udána hodnotou výrazu. Typ výrazu musí být takový, aby se jeho hodnota dala přiřadit do formálního parametru. Výstupním nebo vstupně-výstupním skutečným parametrem musí být proměnná nebo sloupec stejného typu, jakého je formální parametr.
Rozšíření jazyka SQL proti normě
Implementací definované vlastnosti SQL ve 602SQL
Příklady použití:
Mějme proceduru PARAM s jedním vstupním a jedním výstupním parametrem definovanou takto:
PROCEDURE Param( IN dt DATE, OUT res INT );
BEGIN
SELECT COUNT(*) INTO res
FROM Tab1
WHERE dat = dt;
END
Proceduru lze volat z klientského prostředí, kde jsou deklarovány proměnné
CALL Param(:<datum, :>kolik);
nebo takto (klíčové parametry):
CALL Param(res=>:>kolik, dt=>:<datum);
![]() | Příkaz FOR | ![]() | Řídící příkazy | Příkaz SIGNAL | ![]() |