You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle迁移PostgreSQL:decode转CASE语句的正确性咨询

问题分析与修正

你的改写方向完全正确,PostgreSQL确实没有decode()函数,用CASE语句替代是标准方案。但当前改写的语句存在语法错误,同时可以确认else 4的写法完全符合原Oracle逻辑。

原Oracle逻辑解析

原decode(upper(code), 'EUR', 1, 'GBP', 2, 'USD', 3, 4)的逻辑是:

  • 当upper(code)等于'EUR'时,返回1
  • 等于'GBP'时返回2
  • 等于'USD'时返回3
  • 其他所有情况返回4,作为排序的默认权重

改写语句的问题

你写的PostgreSQL语句缺少CASE语句的结束标记END,PostgreSQL要求CASE必须以END收尾,否则会触发语法错误。

正确的PostgreSQL改写语句

"SELECT CODE " +
"FROM SCHEMA.TABLE_NAME " +
"WHERE TYPE='CURRENCIES' " +
"ORDER BY case upper(code) " +
    "when 'EUR' then 1 " +
    "when 'GBP' then 2 " +
    "when 'USD' then 3 " +
    "else 4 " +
"END";

验证说明

  1. else 4的写法完全正确:和原Oracledecode()的默认值逻辑完全一致,所有未匹配到EUR/GBP/USD的code都会以权重4排序
  2. upper(code)的用法兼容:PostgreSQL的upper()函数和Oracle的同名函数行为一致,都是将字符串转为大写
  3. 排序逻辑等价:修正后的语句排序结果和原Oracle查询完全相同

内容的提问来源于stack exchange,提问作者Euridice01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:45:35