Deze dollartekens ($$
) worden gebruikt voor dollarcitaten , wat op geen enkele manier specifiek is voor functiedefinities . Het kan worden gebruikt om enkele aanhalingstekens te vervangen die letterlijke tekenreeksen (constanten) overal in SQL-scripts omsluiten.
Het lichaam van een functie is zo'n letterlijke tekenreeks. Dollar-aanhalingstekens zijn een PostgreSQL-specifieke vervanging voor enkele aanhalingstekens om te voorkomen dat geneste enkele aanhalingstekens (recursief) ontsnappen. U kunt de hoofdtekst van de functie net zo goed tussen enkele aanhalingstekens plaatsen. Maar dan zou je moeten ontsnappen aan alle enkele aanhalingstekens in de body:
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
';
Dit is niet zo'n goed idee. Gebruik in plaats daarvan dollarcitaten. Meer specifiek, plaats ook een token tussen de $$
om elk paar uniek te maken, wilt u misschien geneste dollar-aanhalingstekens gebruiken in de hoofdtekst van de functie. Ik doe dat eigenlijk veel.
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean
LANGUAGE plpgsql STRICT IMMUTABLE AS
$func$
BEGIN
...
END
$func$;
Zie:
- Tekst invoegen met enkele aanhalingstekens in PostgreSQL
Wat betreft uw tweede vraag:
Lees de meest uitstekende handleiding over CREATE FUNCTION
om de laatste regel van uw voorbeeld te begrijpen.