sql >> データベース >  >> RDS >> PostgreSQL

PL/pgSQLで「$$」は何に使用されますか

    これらのドル記号($$ )はドルの見積もりに使用されます 、これは関数定義に固有​​のものではありません 。 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に関する最も優れたマニュアルを読んでください 例の最後の行を理解するため。



    1. postgresqlデータベースで大文字と小文字を区別しない照合を使用するにはどうすればよいですか?

    2. NHibernateを使用して同じASP.NETアプリでOracleとSQLServerの両方をサポートするための推奨事項

    3. HaproxyとKeepalivedをインストールする方法

    4. 関数に値の複数のセットまたは配列を渡します