アーカイブ

  • [SQLServer]カーソル サンプル

    PostgreSQLに引き続き、あまりにもよく使用するので、テンプレート化してみた。
    比較してみると、カーソル処理に関してはPostgreSQLのほうが楽チンかも。

    --#-------------------------------------------------------------------
    --# 使用変数の定義
    --#-------------------------------------------------------------------
      DECLARE
        --# カーソル変数
          @CursorTargetData                   CURSOR
        --# 以下、フェッチした内容を格納する為の変数
        , @wCurColumn1                        int                 -- カーソルの1番目の列
        , @wCurColumn2                        int                 -- カーソルの2番目の列
      ;
    --#-------------------------------------------------------------------
    --# カーソル定義を行い、メモリに読み込む
    --#-------------------------------------------------------------------
      SET @CursorTargetData = CURSOR FOR
      --#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
      --# 以下に、読み込み対象となるSELECT文を定義(ORDER BY句は必須)
      --# <Todo>
        SELECT
            TableA.Column1
          , TableA.Column2
        FROM
          TableA
        ORDER BY
            TableA.Column1
      --# </Todo>
      --#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
      ;
    --#-------------------------------------------------------------------
    --# カーソルオープン
    --#-------------------------------------------------------------------
      OPEN @CursorTargetData;
    --#-------------------------------------------------------------------
    --# 現在のカーソルをフェッチ
    --#-------------------------------------------------------------------
      FETCH NEXT FROM @CursorTargetData INTO
      --#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
      --# 以下に、フェッチしたカーソルデータを格納する変数を順序に合わせて定義
      --# <Todo>
          @wCurColumn1
        , @wCurColumn2
      --# </Todo>
      --#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
      ;
    --#-------------------------------------------------------------------
    --# 以下、カーソルフェッチループ
    --#-------------------------------------------------------------------
      WHILE (@@FETCH_STATUS = 0)
      BEGIN
    
      --#-------------------------------------------------------------------
      --# 次のカーソルへ移動
      --#-------------------------------------------------------------------
        FETCH NEXT FROM @CursorTargetData INTO
        --#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
        --# 以下に、フェッチしたカーソルデータを格納する変数を順序に合わせて定義
        --# <Todo>
            @wCurColumn1
          , @wCurColumn2
        --# </Todo>
        --#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
        ;
      END;
    --#-------------------------------------------------------------------
    --# カーソルクローズ
    --#-------------------------------------------------------------------
      CLOSE @CursorTargetData;
    --#-------------------------------------------------------------------
    --# カーソルをメモリより解放
    --#-------------------------------------------------------------------
      DEALLOCATE @CursorTargetData;
    
    2010年 4月 8日 | Filed under SQLServer
  • [PostgreSQL]カーソル サンプル

    あまりにもよく使用するので、テンプレート化してみた。

    DECLARE
    --#-------------------------------------------------------------------
    --# 使用変数の定義
    --#-------------------------------------------------------------------
        -- アンバウンドカーソル
        cursor_mydata                       refcursor;
        -- フェッチした内容を格納する為のレコード
        rec_nowdata                         record;
    BEGIN
    
    --#-------------------------------------------------------------------
    --# カーソルオープン
    --#-------------------------------------------------------------------
      OPEN cursor_mydata FOR
      --#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
      --# 以下に、読み込み対象となるSELECT文を定義(ORDER BY句は必須)
      --# <Todo>
        SELECT
            table_dummy.pkey
        FROM
          table_dummy
        ORDER BY
            table_dummy.pkey
      --# </Todo>
      --#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
        ;
    
    --#-------------------------------------------------------------------
    --# 以下、カーソルフェッチループ
    --#-------------------------------------------------------------------
      LOOP
      --# 現在のカーソルを指定レコードに格納(フェッチする)
        FETCH cursor_mydata INTO rec_nowdata;
        IF NOT FOUND THEN
        --# 最後まで読み込み終わればループ終了
          EXIT;
        END IF;
      --#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
      --# 以下に、現在行データに対する処理を記述
      --# <Todo>
    
      -- ※ rec_nowdata.pkey という感じで、レコードのカラムを使用できます。
    
      --# </Todo>
      --#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
      END LOOP;
    
    --#-------------------------------------------------------------------
    --# カーソルクローズ
    --#-------------------------------------------------------------------
      CLOSE cursor_mydata;
    
    END
    
    2010年 2月 19日 | Filed under PostgreSQL
タグ: ‘サンプル’ の記事