Questi segni del dollaro ($$
) sono usati per citare il dollaro , che non è in alcun modo specifico per le definizioni delle funzioni . Può essere utilizzato per sostituire le virgolette singole che racchiudono stringhe letterali (costanti) ovunque negli script SQL.
Il corpo di una funzione sembra essere una tale stringa letterale. Dollar-quoting è un sostituto specifico di PostgreSQL per virgolette singole per evitare l'escape delle virgolette singole nidificate (ricorsivamente). Potresti anche racchiudere il corpo della funzione tra virgolette singole. Ma poi dovresti sfuggire a tutte le virgolette singole nel corpo:
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
';
Questa non è una buona idea. Usa invece la quotazione in dollari. Più specificamente, inserisci anche un token tra $$
per rendere ogni coppia unica, potresti voler usare virgolette nidificate all'interno del corpo della funzione. Lo faccio spesso, in realtà.
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean
LANGUAGE plpgsql STRICT IMMUTABLE AS
$func$
BEGIN
...
END
$func$;
Vedi:
- Inserisci testo con virgolette singole in PostgreSQL
Per quanto riguarda la tua seconda domanda:
Leggi il manuale più eccellente su CREATE FUNCTION
per capire l'ultima riga del tuo esempio.