PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

За какво се използват '$$' в PL/pgSQL

Тези знаци за долар ($$ ) се използват за доларово котиране , което по никакъв начин не е специфично за дефинициите на функции . Може да се използва за замяна на единични кавички, обхващащи низови литерали (константи) навсякъде в 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 за да разберете последния ред от вашия пример.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изберете записи от последните 24 часа в PostgreSQL

  2. Прехвърляне на данни между бази данни с PostgreSQL

  3. PostgreSQL индекс на JSON

  4. не може да накара проста PostgreSQL вмъкване да работи

  5. Как Acosh() работи в PostgreSQL