将数据从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('シーケンス名')
除此之外还有一些选项,我挑选了几个。