sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Para qué se usan '$$' en PL/pgSQL?

Estos signos de dólar ($$ ) se utilizan para cotización en dólares , que no es específico de las definiciones de funciones . Se puede usar para reemplazar comillas simples que encierran literales de cadena (constantes) en cualquier lugar de los scripts SQL.

El cuerpo de una función resulta ser un literal de cadena de este tipo. Dollar-quoting es un sustituto específico de PostgreSQL para comillas simples para evitar el escape de comillas simples anidadas (recursivamente). También podría encerrar el cuerpo de la función entre comillas simples. Pero entonces tendrías que escapar de todas las comillas simples en el cuerpo:

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

Esta no es una buena idea. Utilice cotizaciones en dólares en su lugar. Más específicamente, también coloque un token entre $$ para hacer que cada par sea único, es posible que desee utilizar cotizaciones de dólar anidadas dentro del cuerpo de la función. Lo hago mucho, en realidad.

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

Ver:

  • Insertar texto con comillas simples en PostgreSQL

En cuanto a su segunda pregunta:
Lea el manual más excelente sobre CREATE FUNCTION para entender la última línea de tu ejemplo.