Disse dollartegn ($$
) bruges til notering i dollars , som på ingen måde er specifik for funktionsdefinitioner . Det kan bruges til at erstatte enkelte anførselstegn, der omslutter strengliteraler (konstanter) hvor som helst i SQL-scripts.
En funktions krop er tilfældigvis sådan en streng bogstavelig. Dollar-citat er en PostgreSQL-specifik erstatning for enkelte anførselstegn for at undgå at undslippe indlejrede enkelte anførselstegn (rekursivt). Du kan lige så godt indsætte funktionsteksten i enkelte anførselstegn. Men så bliver du nødt til at undslippe alle enkelte anførselstegn i kroppen:
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
';
Det er ikke så god en idé. Brug dollar-citering i stedet. Mere specifikt, læg også et token mellem $$
for at gøre hvert par unikt - vil du måske bruge indlejrede dollaranførselstegn inde i funktionsteksten. Det gør jeg faktisk meget.
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean
LANGUAGE plpgsql STRICT IMMUTABLE AS
$func$
BEGIN
...
END
$func$;
Se:
- Indsæt tekst med enkelte anførselstegn i PostgreSQL
Med hensyn til dit andet spørgsmål:
Læs den mest fremragende manual om CREATE FUNCTION
for at forstå den sidste linje i dit eksempel.