如何在PL/SQL中实现MySQL的CASE条件查询等效逻辑
Oracle 适配实现方案
Oracle 原生SQL完全支持CASE表达式,不存在需要找特殊替代语法的情况,你之前的MySQL语句无法在Oracle中运行,核心是2个语法差异需要调整:
- Oracle 中字符串常量必须使用单引号包裹,双引号仅用于标记大小写敏感的标识符(比如带空格、特殊字符的表名/列名)。你原语句里用双引号包裹的
"CORRECT"、"INCORRECT"会被Oracle识别为列名,直接触发「标识符无效」的报错。 - 普通查询不需要额外套PL/SQL语法,直接写标准SQL就能在Oracle SQL Developer中执行,只有需要做流程控制、写存储过程/函数时才需要用到PL/SQL块结构。
直接可用的查询语句如下:
SELECT CASE WHEN City LIKE '%Berlin' AND CustomerName LIKE '%kiste' THEN 'CORRECT' ELSE 'INCORRECT' END AS Result, CustomerName, City FROM Customers;
如果你确实需要在PL/SQL逻辑中执行这段查询(比如需要遍历结果做后续计算、输出),可以参考下面的匿名块写法,注意Oracle中PL/SQL块内的查询结果需要用变量或游标接收:
DECLARE CURSOR c_customer IS SELECT CASE WHEN City LIKE '%Berlin' AND CustomerName LIKE '%kiste' THEN 'CORRECT' ELSE 'INCORRECT' END AS Result, CustomerName, City FROM Customers; BEGIN -- 打开输出开关后可在SQL Developer的输出窗口看到结果 DBMS_OUTPUT.ENABLE; FOR rec IN c_customer LOOP DBMS_OUTPUT.PUT_LINE( '校验结果:'|| rec.Result || ',客户名:' || rec.CustomerName || ',城市:' || rec.City ); END LOOP; END; /
内容的提问来源于stack exchange,提问作者tj12345
相关产品推荐
相关产品推荐

