PostgreSQLでDOブロック内で動的SQLを実行した後にクエリの結果を取得したい

2024年6月10日

今回はPostgreSQLでDOブロック内で動的SQLを実行した後にクエリの結果を取得したいときどのようにすれば良いのかについてご紹介いたします。



PostgreSQLでDOブロック内で動的SQLを実行した後にクエリの結果を取得したい

PostgreSQLで例えば下記のSQLを流したとき、「Query 1 OK: DO」と出るだけでSELECTなどの取得結果が出ないです。

上記のようなSQLで取得結果を取りたい場合、次の2つの方法があります。
・DOブロックではなく、ストアドプロシージャを使用する
・EXECUTEクエリの結果を一時テーブルに格納する

DOブロックではなく、ストアドプロシージャを使用する

ストアドプロシージャを作成してそこから動的SQLを実行し、結果を返す方法があります。

例えば次のようなコードになるでしょう。

EXECUTEクエリの結果を一時テーブルに格納する

DOブロック内でクエリの結果を一時テーブルに格納し、その後でそのテーブルから結果を取得する方法もあります。

一度実行してもう一度実行すると
Query 1 ERROR at Line 1: : ERROR: relation "temp_results" already exists
とエラーが出るので、
DROP TABLE IF EXISTS temp_results;
などで逐一削除しましょう。

個人的にはこれがおすすめです。

終わりに

今回はPostgreSQLでDOブロック内で動的SQLを実行した後にクエリの結果を取得したいときどのようにすれば良いのかについてご紹介いたしました。

最後までお読みいただきありがとうございます。
よろしければブログやTwitterでのシェアをお願いしております。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。

直接契約ができるフリーランスエージェント「エンハンス」を立ち上げました。
詳しくは下記LPをご参照ください。
https://enhance.decryption.co.jp/

Youtubeチャンネル開設いたしました。
チャンネル登録者10,000人を目指しているので、良いと思った方はチャンネル登録をお願いしたいです。
https://www.youtube.com/channel/UC219XhmSRxmXltTy6COxSMw






PostgreSQL

Posted by ちこ