sql >> Database >  >> RDS >> PostgreSQL

Waar worden '$$' voor gebruikt in PL/pgSQL

Deze dollartekens ($$ ) worden gebruikt voor dollarcitaten , wat op geen enkele manier specifiek is voor functiedefinities . Het kan worden gebruikt om enkele aanhalingstekens te vervangen die letterlijke tekenreeksen (constanten) overal in SQL-scripts omsluiten.

Het lichaam van een functie is zo'n letterlijke tekenreeks. Dollar-aanhalingstekens zijn een PostgreSQL-specifieke vervanging voor enkele aanhalingstekens om te voorkomen dat geneste enkele aanhalingstekens (recursief) ontsnappen. U kunt de hoofdtekst van de functie net zo goed tussen enkele aanhalingstekens plaatsen. Maar dan zou je moeten ontsnappen aan alle enkele aanhalingstekens in de body:

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

Dit is niet zo'n goed idee. Gebruik in plaats daarvan dollarcitaten. Meer specifiek, plaats ook een token tussen de $$ om elk paar uniek te maken, wilt u misschien geneste dollar-aanhalingstekens gebruiken in de hoofdtekst van de functie. Ik doe dat eigenlijk veel.

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

Zie:

  • Tekst invoegen met enkele aanhalingstekens in PostgreSQL

Wat betreft uw tweede vraag:
Lees de meest uitstekende handleiding over CREATE FUNCTION om de laatste regel van uw voorbeeld te begrijpen.



  1. Testgegevens genereren in SQL Server

  2. LEFT OUTER JOIN of RIGHT OUTER JOIN vinden met ORACLE JOIN (+)

  3. PLSQL-codeprestaties afstemmen of testen in Oracle D2k-formulieren

  4. Impact op de prestaties van verschillende technieken voor foutafhandeling