PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

A cosa serve '$$' in PL/pgSQL

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.