My Photo

« source または .(ドット)コマンド | Main | ソーシャルボタンの設置方法 »

September 07, 2014

PL/pgSQL その2

関連記事:PL/pgSQL

PL/pgSQLで書いたコードの実行

以前の記事ではPL/pgSQLの使いみちと使い方を書いていなかった。PL/pgSQLは関数の定義に使う。実行は関数として実行する。
関数はSELECT文で実行する。下記のように、FROMがなくてもエラーにならない。

SELECT <関数名>

OracleのPL/SQLはコードをファイルに保存しファイルを指定して実行することができたと思うが、PL/pgSQLはそういうことができない。あくまで関数を記述して関数として実行するしかない。その点はPL/SQLより不便な気がする。

データを変更するPL/pgSQLコードの例

以前の記事ではデータを検索する例だけだったので、データを変更するコードを示す。
下記の例では、table1 を条件を指定して検索し、その検索結果の user_id を area_id=5 で table2 に挿入している。戻り値は挿入した件数である。

CREATE OR REPLACE FUNCTION insert_table2()
RETURNS int AS '
DECLARE
  cur CURSOR FOR 
    SELECT user_id 
    FROM table1 
    WHERE flag_delete IS NULL type = 1
      AND user_id NOT IN (SELECT user_id FROM table2 WHERE area_id = 5) 
    ORDER BY user_id;
  r table1;
  count int;
BEGIN
  count := 0;
  OPEN cur;
  LOOP
    FETCH cur INTO r;
    IF NOT FOUND THEN
      EXIT;
    END IF;
    INSERT INTO table2 (user_id, area_id, create_date) 
    VALUES (r.user_id, 5, CURRENT_TIMESTAMP);
    count := count + 1;
  END LOOP;
  CLOSE cur;
  RETURN count;
END
' LANGUAGE plpgsql;

17~19行目で最後までフェッチしたら終了するようにしている。この部分がないと無限ループになる可能性がある。
#この関数の場合はINSERT文でSQLエラーになり止まる。

« source または .(ドット)コマンド | Main | ソーシャルボタンの設置方法 »

PostgreSQL」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/60273084

Listed below are links to weblogs that reference PL/pgSQL その2:

« source または .(ドット)コマンド | Main | ソーシャルボタンの設置方法 »

March 2017
Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof