関数を移行する際のポイントをまとめました!
テーブルの行数をカウントして返す関数を例として紹介します。
・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/pgSQL | LANGUAGE plpgsql; |
PL/Python | LANGUAGE plpythonu; |
PL/Perl | LANGUAGE plperl; |
・ドル引用符($$)について
ドル引用符は、シングルコーテーションで囲むのと同じ効果があります。
(シングルコーテーションだとエスケープが必要ですが、
ドル引用符を使用することでエスケープが不要になり楽です。)
移行終わってないじゃんーーー(=゚ω゚)ノ
定時後、急いで対応しました泣泣