PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wofür wird '$$' in PL/pgSQL verwendet

Diese Dollarzeichen ($$ ) werden für die Dollarnotierung verwendet , die in keiner Weise spezifisch für Funktionsdefinitionen ist . Es kann verwendet werden, um einfache Anführungszeichen zu ersetzen, die String-Literale (Konstanten) an beliebiger Stelle in SQL-Skripten einschließen.

Der Körper einer Funktion ist zufällig ein solches String-Literal. Dollar-Quoting ist ein PostgreSQL-spezifischer Ersatz für einfache Anführungszeichen, um zu vermeiden, dass verschachtelte einfache Anführungszeichen (rekursiv) maskiert werden. Sie könnten den Funktionskörper genauso gut in einfache Anführungszeichen setzen. Aber dann müssten Sie alle einfachen Anführungszeichen im Text maskieren:

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

Das ist keine so gute Idee. Verwenden Sie stattdessen Dollarnotierungen. Fügen Sie insbesondere auch ein Token zwischen $$ ein Um jedes Paar einzigartig zu machen, möchten Sie möglicherweise verschachtelte Dollar-Anführungszeichen im Funktionskörper verwenden. Ich mache das eigentlich oft.

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

Siehe:

  • Text mit einfachen Anführungszeichen in PostgreSQL einfügen

Zu Ihrer zweiten Frage:
Lesen Sie das beste Handbuch zu CREATE FUNCTION um die letzte Zeile Ihres Beispiels zu verstehen.