これらのドル記号($$
)はドルの見積もりに使用されます 、これは関数定義に固有のものではありません 。 SQLスクリプトの任意の場所で文字列リテラル(定数)を囲む一重引用符を置き換えるために使用できます。
関数の本体は、たまたまそのような文字列リテラルです。ドル引用符は、ネストされた一重引用符が(再帰的に)エスケープされないようにするための、PostgreSQL固有の一重引用符の代わりになります。関数本体を一重引用符で囲むこともできます。ただし、本文内のすべての一重引用符をエスケープする必要があります:
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
';
これはあまり良い考えではありません。代わりにドル見積もりを使用してください。具体的には、$$
の間にトークンを配置します 各ペアを一意にするために、関数本体内でネストされたドル引用符を使用することをお勧めします。実際、私はそれをたくさんします。
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean
LANGUAGE plpgsql STRICT IMMUTABLE AS
$func$
BEGIN
...
END
$func$;
参照:
- PostgreSQLで一重引用符でテキストを挿入
2番目の質問について:
CREATE FUNCTION
に関する最も優れたマニュアルを読んでください 例の最後の行を理解するため。