Тези знаци за долар ($$
) се използват за доларово котиране , което по никакъв начин не е специфично за дефинициите на функции . Може да се използва за замяна на единични кавички, обхващащи низови литерали (константи) навсякъде в SQL скриптове.
Тялото на функция се оказва такъв низов литерал. Котирането в долари е специфичен за PostgreSQL заместител на единичните кавички, за да се избегне избягването на вложени единични кавички (рекурсивно). Можете също така да затворите тялото на функцията в единични кавички. Но тогава ще трябва да избягвате всички единични кавички в тялото:
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
';
Това не е толкова добра идея. Вместо това използвайте цитиране в долари. По-конкретно, също така поставете маркер между $$
за да направите всяка двойка уникална - може да искате да използвате вложени доларови котировки в тялото на функцията. Всъщност го правя често.
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean
LANGUAGE plpgsql STRICT IMMUTABLE AS
$func$
BEGIN
...
END
$func$;
Вижте:
- Вмъкнете текст с единични кавички в PostgreSQL
Що се отнася до втория ви въпрос:
Прочетете най-доброто ръководство за CREATE FUNCTION
за да разберете последния ред от вашия пример.