Tanda dolar ini ($$
) digunakan untuk kutipan dolar , yang sama sekali tidak spesifik untuk definisi fungsi . Ini dapat digunakan untuk mengganti tanda kutip tunggal yang menyertakan string literal (konstanta) di mana saja dalam skrip SQL.
Tubuh suatu fungsi kebetulan berupa string literal. Kutipan dolar adalah pengganti khusus PostgreSQL untuk tanda kutip tunggal untuk menghindari keluarnya tanda kutip tunggal bersarang (secara rekursif). Anda juga bisa menyertakan badan fungsi dalam tanda kutip tunggal. Tapi kemudian Anda harus menghindari semua tanda kutip tunggal di tubuh:
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
';
Ini bukan ide yang bagus. Gunakan kutipan dolar sebagai gantinya. Lebih khusus lagi, letakkan juga token di antara $$
untuk membuat setiap pasangan unik - Anda mungkin ingin menggunakan tanda kutip dolar bersarang di dalam badan fungsi. Sebenarnya saya sering melakukannya.
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean
LANGUAGE plpgsql STRICT IMMUTABLE AS
$func$
BEGIN
...
END
$func$;
Lihat:
- Menyisipkan teks dengan tanda kutip tunggal di PostgreSQL
Mengenai pertanyaan kedua Anda:
Baca manual paling bagus di CREATE FUNCTION
untuk memahami baris terakhir dari contoh Anda.