sql >> Databáze >  >> RDS >> PostgreSQL

K čemu se v PL/pgSQL používají '$$'

Tyto znaky dolaru ($$ ) se používají pro dolarové kotace , který v žádném případě není specifický pro definice funkcí . Lze jej použít k nahrazení jednoduchých uvozovek uzavírajících řetězcové literály (konstanty) kdekoli ve skriptech SQL.

Tělo funkce je náhodou takový řetězcový literál. Dolar-quoting je PostgreSQL-specifická náhrada za jednoduché uvozovky, aby se zabránilo escapování vnořených jednoduchých uvozovek (rekurzivně). Tělo funkce můžete stejně dobře uzavřít do jednoduchých uvozovek. Ale pak byste museli uniknout všem jednoduchým uvozovkám v těle:

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

To není tak dobrý nápad. Místo toho použijte dolarové kotace. Konkrétněji také vložte token mezi $$ aby byl každý pár jedinečný - možná budete chtít použít vnořené dolarové uvozovky uvnitř těla funkce. Ve skutečnosti to dělám hodně.

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

Viz:

  • Vložit text s jednoduchými uvozovkami v PostgreSQL

K vaší druhé otázce:
Přečtěte si nejlepší příručku o CREATE FUNCTION abyste pochopili poslední řádek vašeho příkladu.



  1. Mýty o výkonu:Nadměrná velikost sloupců řetězců

  2. Na Duplicate Key Update to samé jako vložení

  3. Chybová zpráva sqldeveloper:Síťový adaptér nemohl navázat chybu připojení

  4. 5 užitečných dotazů MySql během vývoje projektu