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

postgresでの動的SQLクエリ

    EXECUTE ... USING PL /PgSQLでのみ機能します-つまり、関数内またはDO PL/PgSQL言語で記述されたブロック。プレーンSQLでは機能しません。 EXECUTE プレーンSQLでは、プリペアドステートメントを実行するために完全に異なります。 PostgreSQLのSQLダイアレクトで動的SQLを直接使用することはできません。

    比較:

    • PL/PgSQLのEXECUTE ... USING;
    • SQLのEXECUTE

    以前の回答の最後から2番目のパーを参照してください。

    PL / PgSQL以外で実行されないことに加えて、SQLステートメントが間違っているだけでなく、期待どおりに機能しません。 (select id from ids where condition = some_condition)の場合 戻り値は42と言います 、idの場合、ステートメントは失敗します は整数です。テキストにキャストすると、次のようになります。

    EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
    EXECUTE format('SELECT * from result_%s_table', '"42"');
    EXECUTE 'SELECT * from result_"42"_table';
    

    それは無効です。実際にはresult_42_tableが必要です または"result_42_table" 。次のようなものを書く必要があります:

    EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
    

    ... quote_identを使用する必要がある場合 。



    1. SQL完全結合

    2. MySQLのD.O.Bフィールドから年齢を取得するにはどうすればよいですか?

    3. OracleTriggerWHEN句の例

    4. Azureの自動化メソッド