Tyto znaky dolaru ($$
) se používají pro dolarové kotace , který v žádném případě není specifický pro definice funkcí . Lze jej použít k nahrazení jednoduchých uvozovek uzavírajících řetězcové literály (konstanty) kdekoli ve skriptech SQL.
Tělo funkce je náhodou takový řetězcový literál. Dolar-quoting je PostgreSQL-specifická náhrada za jednoduché uvozovky, aby se zabránilo escapování vnořených jednoduchých uvozovek (rekurzivně). Tělo funkce můžete stejně dobře uzavřít do jednoduchých uvozovek. Ale pak byste museli uniknout všem jednoduchým uvozovkám v těle:
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean
LANGUAGE plpgsql STRICT IMMUTABLE AS
'
BEGIN
IF NOT $1 ~ e''^\\+\\d{3}\\ \\d{3} \\d{3} \\d{3}$'' THEN
RAISE EXCEPTION ''Malformed string "%". Expected format is +999 999'';
END IF;
RETURN true;
END
';
To není tak dobrý nápad. Místo toho použijte dolarové kotace. Konkrétněji také vložte token mezi $$
aby byl každý pár jedinečný - možná budete chtít použít vnořené dolarové uvozovky uvnitř těla funkce. Ve skutečnosti to dělám hodně.
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean
LANGUAGE plpgsql STRICT IMMUTABLE AS
$func$
BEGIN
...
END
$func$;
Viz:
- Vložit text s jednoduchými uvozovkami v PostgreSQL
K vaší druhé otázce:
Přečtěte si nejlepší příručku o CREATE FUNCTION
abyste pochopili poslední řádek vašeho příkladu.