SQLServerからPostgreSqlへの移行(Function編)

関数を移行する際のポイントをまとめました!
テーブルの行数をカウントして返す関数を例として紹介します。

・SQLServer

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION get_rowcnt(@kbn int) RETURNS int AS
  BEGIN
    DECLARE @intcnt int
    IF kbn = 1
      BEGIN
        SELECT @intCnt = COUNT(*) FROM test_a
      END
    ELSE
      BEGIN
        SELECT @intCnt = COUNT(*) FROM test_b
      END
    END
    RETURN intcnt
  END

・PostgreSQL

CREATE FUNCTION get_rowcnt(kbn int) RETURNS int AS $$
  DECLARE intcnt int;
  BEGIN

    IF kbn = 1 THEN
      SELECT COUNT(*) INTO intcnt FROM test_a;
    ELSE
      SELECT COUNT(*) INTO intcnt FROM test_b;

    END IF;
    RETURN intcnt;
  END;
$$ LANGUAGE plpgsql;

・ANSI_NULLS、QUOTED_IDENTIFIERについて
postgreSQLでは常にONになので不要です。

・LANGUAGEプロパティについて
PL/pgSQLを使用する場合は、「plpgsql」を指定してください。
他、以下の指定方法があるようです。

LANGUAGE指定方法
PL/pgSQLLANGUAGE plpgsql;
PL/PythonLANGUAGE plpythonu;
PL/PerlLANGUAGE plperl;

・ドル引用符($$)について
ドル引用符は、シングルコーテーションで囲むのと同じ効果があります。
(シングルコーテーションだとエスケープが必要ですが、
ドル引用符を使用することでエスケープが不要になり楽です。)

移行終わってないじゃんーーー(=゚ω゚)ノ
定時後、急いで対応しました泣泣

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です