Dessa dollartecken ($$
) används för dollarnotering , som inte på något sätt är specifik för funktionsdefinitioner . Den kan användas för att ersätta enstaka citattecken som omger strängliteraler (konstanter) var som helst i SQL-skript.
En funktions kropp råkar vara en sådan sträng bokstavlig. Dollar-quoting är ett PostgreSQL-specifikt substitut för enstaka citattecken för att undvika att kapslade enstaka citattecken undviks (rekursivt). Du kan lika gärna inkludera funktionskroppen i enstaka citattecken. Men då måste du undvika alla enstaka citattecken 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 här är inte en så bra idé. Använd dollarnotering istället. Mer specifikt, lägg också en token mellan $$
för att göra varje par unikt - du kanske vill använda kapslade dollarcitattecken i funktionskroppen. Jag gör det mycket, faktiskt.
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean
LANGUAGE plpgsql STRICT IMMUTABLE AS
$func$
BEGIN
...
END
$func$;
Se:
- Infoga text med enkla citattecken i PostgreSQL
När det gäller din andra fråga:
Läs den mest utmärkta manualen om CREATE FUNCTION
för att förstå den sista raden i ditt exempel.