tutorial programacion postgres pgsql funciones español ejemplos create crear como postgresql plpgsql quotes dollar-sign

postgresql - programacion - plpgsql tutorial español



Para qué se usa ''$$'' en PL/pgSQL (2)

Siendo completamente nuevo en PL / pgSQL, ¿cuál es el significado del doble signo de dólar en esta función ?

CREATE OR REPLACE FUNCTION check_phone_number(text) RETURNS boolean AS $$ BEGIN IF NOT $1 ~ e''^//+//d{3}// //d{3} //d{3} //d{3}$'' THEN RAISE EXCEPTION ''Wrong formated string "%". Expected format is +999 999''; END IF; RETURN true; END; $$ LANGUAGE plpgsql STRICT IMMUTABLE;

Supongo que, en RETURNS boolean AS $$ , $$ es un marcador de posición.

La última línea es un misterio: $$ LANGUAGE plpgsql STRICT IMMUTABLE;

Por cierto, ¿qué significa la última línea?


El $$ es un delimitador que utiliza para indicar dónde comienza y termina la definición de la función. Considera lo siguiente,

CREATE TABLE <name> <definition goes here> <options go here, eg: WITH OIDS>

La sintaxis de la función de creación es similar, pero como va a utilizar todo tipo de SQL en su función (especialmente el final de la declaración, el carácter), el analizador se desconectaría si no lo delimitara. Entonces debería leer su declaración como:

CREATE OR REPLACE FUNCTION check_phone_number(text) RETURNS boolean AS <code delimited by $$> LANGUAGE plpgsql STRICT IMMUTABLE;

Lo que sigue a la definición actual son opciones para proporcionar a la base de datos más información sobre su función, de modo que pueda optimizar su uso.

De hecho, si busca en "4.1.2.2 Constantes de cadenas entrecomilladas en dólares" en el manual, verá que incluso puede usar caracteres entre los símbolos en dólares y que todo contará como un delimitador.


Los signos de dólar se usan para cotizaciones en dólares y no son de ninguna manera específicos para las definiciones de funciones . Se puede usar para reemplazar comillas simples prácticamente en cualquier lugar en scripts SQL.

El cuerpo de una función pasa a ser un literal de cadena que debe estar entre comillas simples. La cotización en dólares es un sustituto específico de PostgreSQL para comillas simples para evitar problemas de cotización dentro del cuerpo de la función. También podría escribir la definición de su función con 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 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 '' LANGUAGE plpgsql STRICT IMMUTABLE;

Esta no es una buena idea. En su lugar, utilice las cotizaciones en dólares, más específicamente, coloque un token entre los $$ para que sea único; también puede usar $ -quotes dentro del cuerpo de la función. Lo hago mucho, en realidad.

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

Detalles:

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