sql >> Databasteknik >  >> RDS >> PostgreSQL

Vad används '$$' för i PL/pgSQL

Dessa dollartecken ($$ ) används för dollarnotering , som inte på något sätt är specifik för funktionsdefinitioner . Den kan användas för att ersätta enstaka citattecken som omger strängliteraler (konstanter) var som helst i SQL-skript.

En funktions kropp råkar vara en sådan sträng bokstavlig. Dollar-quoting är ett PostgreSQL-specifikt substitut för enstaka citattecken för att undvika att kapslade enstaka citattecken undviks (rekursivt). Du kan lika gärna inkludera funktionskroppen i enstaka citattecken. Men då måste du undvika alla enstaka citattecken 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 här är inte en så bra idé. Använd dollarnotering istället. Mer specifikt, lägg också en token mellan $$ för att göra varje par unikt - du kanske vill använda kapslade dollarcitattecken i funktionskroppen. Jag gör det mycket, faktiskt.

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

Se:

  • Infoga text med enkla citattecken i PostgreSQL

När det gäller din andra fråga:
Läs den mest utmärkta manualen om CREATE FUNCTION för att förstå den sista raden i ditt exempel.



  1. Hur man släpper bordet i oracle

  2. Ersätt enstaka citattecken i SQL Server

  3. MySQL välj koordinater inom räckvidd

  4. Hur använder man Partition By eller Max?