sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvad bruges '$$' til i PL/pgSQL

Disse dollartegn ($$ ) bruges til notering i dollars , som på ingen måde er specifik for funktionsdefinitioner . Det kan bruges til at erstatte enkelte anførselstegn, der omslutter strengliteraler (konstanter) hvor som helst i SQL-scripts.

En funktions krop er tilfældigvis sådan en streng bogstavelig. Dollar-citat er en PostgreSQL-specifik erstatning for enkelte anførselstegn for at undgå at undslippe indlejrede enkelte anførselstegn (rekursivt). Du kan lige så godt indsætte funktionsteksten i enkelte anførselstegn. Men så bliver du nødt til at undslippe alle enkelte anførselstegn i kroppen:

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

Det er ikke så god en idé. Brug dollar-citering i stedet. Mere specifikt, læg også et token mellem $$ for at gøre hvert par unikt - vil du måske bruge indlejrede dollaranførselstegn inde i funktionsteksten. Det gør jeg faktisk meget.

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

Se:

  • Indsæt tekst med enkelte anførselstegn i PostgreSQL

Med hensyn til dit andet spørgsmål:
Læs den mest fremragende manual om CREATE FUNCTION for at forstå den sidste linje i dit eksempel.



  1. Gyldig datotjek i Oracle

  2. Kopiering af data fra en fil til en CLOB i Oracle

  3. Hvordan får man script af SQL Server-data?

  4. ORA-16205 Opgradering til 11.2.0.3