将数据从Oracle迁移到PostgreSQL时需要进行SQL语句的修改

在从Oracle迁移到PostgreSQL的过程中,需要重新编写SQL语句。
下面列举了一些在重新编写时出现的错误以及修改的函数。

错误:FROM子查询必须有一个别名。

SELECT * FROM (
    SELECT 1
)

在PostgreSQL中,如果不给副查询取别名,将会产生错误。因此,请给副查询取一个别名。

SELECT * FROM (
    SELECT 1
) sub

解码函数

由于PostgreSQL中没有解密功能,所以我将其改写为CASE语句。

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

NVL 函数

由于NVL函数不可用,将其更改为COALESCE函数。

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

GREATEST函数和LEAST函数的行为差异

如果列表中有null,Oracle会返回null,而PostgreSQL会忽略null并返回LEAST中的最小值1。

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

根据列表中是否可能包含空值来改写SQL。

获取序列

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

除此之外还有一些选项,我挑选了几个。

广告
将在 10 秒后关闭
bannerAds