11
8

More than 3 years have passed since last update.

OracleからPostgreSQLへの移行でSQL書き換え

Last updated at Posted at 2021-09-16

OracleからPostgreSQLへ移行するにあたってSQLを書き直す必要がありました。
書き換える時に出たエラーや変更した関数をいくつかピックアップしてみます。

ERROR: subquery in FROM must have an alias

SELECT * FROM (
    SELECT 1
)

これではエラーとなります
PostgreSQLでは副問合せに別名は必須ですので別名をつけましょう

SELECT * FROM (
    SELECT 1
) sub

DECODE関数

PostgreSQLにある復号ではないのでCASEに書き換えます

Oracle
SELECT DECODE('判定する値', 1, '1の場合', 2, '2の場合', 'それ以外の場合') FROM DUAL
PostgreSQL
SELECT CASE '判定する値'
    WHEN 1 THEN '1の場合'
    WHEN 2 THEN '2の場合'
    ELSE 'それ以外の場合'
    END

NVL関数

NVL関数はありませんのでCOALESCE関数へ変更します

Oracle
SELECT NVL('null判定する値', 'nullだった場合の値') FROM DUAL
PostgreSQL
SELECT COALESCE('null判定する値', 'nullだった場合の値')

GREATESTとLEAST関数の挙動の差

リストの中にnullがあった場合、Oracleはnullを返しますが
PostgreSQLはnullを無視してLEASTであれば最小値の1を返します

Oracle
SELECT LEAST(1, 2, null) FROM DUAL
PostgreSQL
SELECT LEAST(1, 2, null)

リストの中にnullが入る可能性があるかどうかでSQLを書き換えます

シーケンス取得

Oracle
SELECT シーケンス名.NEXTVAL FROM DUAL
PostgreSQL
SELECT NEXTVAL('シーケンス名')

他にもありますがいくつかピックアップしてみました。

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8