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

plpgsql変数を使用してn_distinctを設定するときにエラーが発生しました

    これは仕様によるものです。マニュアルでは、可変置換の章で説明しています。

    変数の置換は現在、SELECTでのみ機能します 、INSERTUPDATE 、およびDELETE これは、メインSQLエンジンがこれらのコマンドでのみクエリパラメータを許可するためです。他のステートメントタイプ(一般にユーティリティステートメントと呼ばれる)で非定数の名前または値を使用するには、ユーティリティステートメントを文字列およびEXECUTEとして作成する必要があります。

    できません EXECUTEを使用して動的ステートメントの値をパラメーター化します 動的コマンドの実行の章を引用しているためです。

    パラメータシンボルのもう1つの制限は、SELECTでのみ機能することです。 、INSERTUPDATE 、およびDELETE コマンド。他のステートメントタイプ(一般にユーティリティステートメントと呼ばれます)では、値が単なるデータ値であっても、テキストで値を挿入する必要があります。

    唯一のオプション plpgsql関数では、値をコマンド文字列に連結します。 format()を使用できます 、ただし、単純な例では、単純な連結は安全で簡単です::

    CREATE OR REPLACE FUNCTION pg_temp.setdistinct(_cnt real)
      RETURNS void
      LANGUAGE plpgsql AS
    $$
    BEGIN
       EXECUTE 'ALTER TABLE _temp ALTER COLUMN id SET (n_distinct=' || _cnt || ')';
    END
    $$;
    

    スキーマ修飾pg_temp. 質問を反映した(文書化されていない!)「一時的な」機能にします。
    n_distinctに関するマニュアル 。




    1. Ubuntu 10.10(Maverick)でMySQLリレーショナルデータベースを使用する

    2. MariaDBでのUTC_TIMESTAMP()のしくみ

    3. REST APIを作成する方法は?

    4. SQLServerカーソルの手順を定義する-SQLServer/TSQLチュートリアル