ざっくりと説明すると、 SELECT で取得した全レコードそれぞれについて逐次処理をしたい場合に使用するものです。 カーソルを定義して使う カーソルは書き方がいくつかあるのですが、まずは基本から。 Oracle では 明示カーソル と呼ばれます。 PostgreSQL のドキュメントでは Bound Cursor と書かれています。 CURSOR でカーソルを定義して、 RECORD型の変数を用意しておきます。 LOOP を使用して、 SELECT の結果全行に対して処理を行います。 DO $$ DECLARE C CURSOR FOR SELECT * FROM table_name WHERE some_condition = TRUE; CR RECORD; BEGIN OPEN C; LOOP FETCH C INTO CR; IF NOT FOUND THEN EXIT; END