从 Oracle 9i 开始,可以在 Oracle / PLSQL 的 SQL 语句中使用 CASE
语句,实现类似于 IF-THEN-ELSE 功能。
语法
Oracle / PLSQL 中 CASE
语句的语法为:
CASE [ expression ]
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
WHEN condition_n THEN result_n
ELSE result
END
参数说明:
-
expression
-
可选的。此表达式的值用作与
WHEN
的condition_*
条件值进行比较。
condition_1, condition_2, … condition_n
-
比较条件。这些条件的数据类型必须相同。他们按照列出的顺序进行比较。一旦发现条件为真,
CASE
语句将返回结果,忽略后续的条件比较。
result_1, result_2, … result_n
-
当
condition_*
条件为真时返回的值。这些结果的数据类型必须相同。
注意:CASE
语句中最多可以进行 255 次比较。每个 WHEN ... THEN
子句被认为是 2 个比较。
示例
假设我们想通过一条 SQL 语句构造出符合 Select2 的数据源,该数据为某用户已分配的角色列表:
SELECT r.ID AS id, r.ROLE_NAME AS text,
CASE
WHEN r.ID IN (SELECT r.ID AS id
FROM ROLE r
JOIN USER_ROLE u_r ON u_r.ROLE_ID = r.ID
WHERE r.DELETED = 0 AND u_r.DELETED = 0 AND u_r.USER_ID = '05c37a7d537746ee96cd54441b0a849a') THEN 'true'
ELSE 'false'
END AS selected
FROM ROLE r
WHERE r.DELETED = 0;