PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

A quoi servent les '$$' en PL/pgSQL

Ces signes dollar ($$ ) sont utilisés pour les cotations en dollars , qui n'est en aucun cas spécifique aux définitions de fonction . Il peut être utilisé pour remplacer les guillemets simples entourant des littéraux de chaîne (constantes) n'importe où dans les scripts SQL.

Le corps d'une fonction se trouve être un tel littéral de chaîne. Dollar-quoting est un substitut spécifique à PostgreSQL pour les guillemets simples afin d'éviter l'échappement des guillemets simples imbriqués (récursivement). Vous pouvez également placer le corps de la fonction entre guillemets simples. Mais alors vous devrez échapper tous les guillemets simples dans le corps :

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
';

Ce n'est pas une si bonne idée. Utilisez plutôt des guillemets en dollars. Plus précisément, mettez également un jeton entre les $$ pour rendre chaque paire unique - vous pouvez utiliser des guillemets en dollars imbriqués dans le corps de la fonction. Je le fais souvent, en fait.

CREATE OR REPLACE FUNCTION check_phone_number(text)
  RETURNS boolean  
  LANGUAGE plpgsql STRICT IMMUTABLE AS
$func$
BEGIN
 ...
END
$func$;

Voir :

  • Insérer du texte avec des guillemets simples dans PostgreSQL

Quant à votre deuxième question :
Lisez l'excellent manuel sur CREATE FUNCTION pour comprendre la dernière ligne de votre exemple.