Oracle 解码与 Postgres 等效的函数
Oracle decode equivalent function to Postgres
所以,我正在将数据库从 oracle 迁移到 Postgres,这是我的错误:
Caused by: org.postgresql.util.PSQLException: ERROR: function decode(unknown, unknown, integer, unknown, integer, unknown, integer, unknown, integer, unknown, integer) does not exist
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
这是我的代码:
sqlQuery.append(" order by ");
sqlQuery.append(" decode('pts.process_status', 'PTSPS_INPROGRESS', 1, 'PTSPS_SUBMITTED', 2, ");
sqlQuery.append(" 'PTSPS_DRAFT', 3, 'PTSPS_REJECTED', 4, 'PTSPS_APPROVED', 5) ");
你有什么线索吗?
根据我的阅读,有人说用 COALESCE 替换解码函数,但我不知道语法是怎样的。
您可以使用标准 case
表达式:
order by case pts.process_status
when 'PTSPS_INPROGRESS' then 1
when 'PTSPS_SUBMITTED' then 2
when 'PTSPS_DRAFT' then 3
when 'PTSPS_REJECTED' then 4
when 'PTSPS_APPROVED' then 5
end
Postgres 有一个使用数组的简化形式的逻辑:
order by array_position(array['PTSPS_INPROGRESS', 'PTSPS_SUBMITTED', 'PTSPS_DRAFT', 'PTSPS_REJECTED', 'PTSPS_APPROVED'],
pts.process_status
)
我应该注意到,GMB 建议的 CASE
解决方案是标准的 SQL 并且适用于 Postgres 和 Oracle(以及几乎所有其他数据库),所以这只是一个快捷方式。
所以,我正在将数据库从 oracle 迁移到 Postgres,这是我的错误:
Caused by: org.postgresql.util.PSQLException: ERROR: function decode(unknown, unknown, integer, unknown, integer, unknown, integer, unknown, integer, unknown, integer) does not exist
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
这是我的代码:
sqlQuery.append(" order by ");
sqlQuery.append(" decode('pts.process_status', 'PTSPS_INPROGRESS', 1, 'PTSPS_SUBMITTED', 2, ");
sqlQuery.append(" 'PTSPS_DRAFT', 3, 'PTSPS_REJECTED', 4, 'PTSPS_APPROVED', 5) ");
你有什么线索吗?
根据我的阅读,有人说用 COALESCE 替换解码函数,但我不知道语法是怎样的。
您可以使用标准 case
表达式:
order by case pts.process_status
when 'PTSPS_INPROGRESS' then 1
when 'PTSPS_SUBMITTED' then 2
when 'PTSPS_DRAFT' then 3
when 'PTSPS_REJECTED' then 4
when 'PTSPS_APPROVED' then 5
end
Postgres 有一个使用数组的简化形式的逻辑:
order by array_position(array['PTSPS_INPROGRESS', 'PTSPS_SUBMITTED', 'PTSPS_DRAFT', 'PTSPS_REJECTED', 'PTSPS_APPROVED'],
pts.process_status
)
我应该注意到,GMB 建议的 CASE
解决方案是标准的 SQL 并且适用于 Postgres 和 Oracle(以及几乎所有其他数据库),所以这只是一个快捷方式。