oracle数据库if函数,Oracle中函数应⽤技巧(2)-NULLIF NULLIF 函数
功能
通过⽐较表达式提供缩写的 CASE 表达式。
语法
NULLIF ( expression-1, expression-2 )
为什么容易犯困参数
expression-1 要⽐较的表达式。
expression-2 要⽐较的表达式。
⽤法
NULLIF ⽐较两个表达式的值。
如果第⼀个表达式的值与第⼆个表达式的值相等,NULLIF 返回 NULL。
如果第⼀个表达式的值不等于第⼆个表达式的值,或者第⼆个表达式为 NULL,则 NULLIF 返回第⼀个表达式。
NULLIF 函数提供了编写某些 CASE 表达式的简便⽅法。
标准和兼容性
SQL/92 初级特性。
SQL/99 核⼼特性。
⽰例
下⾯的语句返回值 a:
SELECT NULLIF( 'a', 'b' )
下⾯的语句返回 NULL。
SELECT NULLIF( 'a', 'a' )
---------------------------------------------------------------
CASE 表达式
CASE 表达式提供条件 SQL 表达式。Ca 表达式可以在能够使⽤表达式的任何地⽅使⽤。
CASE 表达式的语法如下:
CASE expression
WHEN expression
THEN expression, ...
[ ELSE expression ]
END
如果 CASE 语句后的表达式等于 WHEN 语句后的表达式,则返回 THEN 语句后的表达式。否则,返回 ELSE 语句后的表达式(如果它存在)。
例如,以下代码⽤ CASE 表达式作为 SELECT 语句的第⼆⼦句。
SELECT id,
( CASE name卖饼
WHEN 'Tee Shirt' then 'Shirt'
WHEN 'Sweatshirt' then 'Shirt'
WHEN 'Baball Cap' then 'Hat'
ELSE 'Unknown'
END ) as Type
FROM "DBA".Product
可以替换的语法如下:
CASE
关于成功的演讲稿WHEN arch-condition
THEN expression, ...
[ ELSE expression ]
END
如果满⾜ WHEN 语句后的搜索条件,则返回 THEN 语句后的表达式。否则,返回 ELSE 语句后的表达式(如果它存在)。
例如,以下语句⽤ CASE 表达式作为 SELECT 语句的第三⼦句,以将字符串与搜索条件相关联。
SELECT id, name,
( CASE
WHEN name='Tee Shirt' then 'Sale'
WHEN quantity >= 50 then 'Big Sale'
ELSE 'Regular price'
FROM "DBA".Product
⽤于简写 CASE 表达式的 NULLIF 函数
NULLIF 函数提供了⼀种以短格式写出某些 CASE 语句的⽅法。NULLIF 语法如下:
NULLIF ( expression-1, expression-2 )
NULLIF ⽐较两个表达式的值。如果第⼀个表达式的值与第⼆个表达式的值相等,NULLIF 返回 NULL。如果它们不相等,NULLIF 则返回第⼀个表达式。
CASE 语句不同于 CASE 表达式
不要将 CASE 表达式的语法和 CASE 语句的语法混淆。
------------------------------------------------
CASE 语句
说明
此语句⽤于根据多种情况选择执⾏路径。
语法 1
CASE value-expression
WHEN [ constant | NULL ] THEN statement-list ...
[ WHEN [ constant | NULL ] THEN statement-list ] ...
[ ELSE statement-list ]
END CASE
语法 2
CASE
合同能源管理WHEN [ arch-condition | NULL] THEN statement-list ...
[ WHEN [ arch-condition | NULL] THEN statement-list ] ...
[ ELSE statement-list ]
END CASE
⽤法
语法 1 CASE 语句是控制语句,它允许您根据表达式的值选择要执⾏的 SQL 语句列表。value-expression 是具有单值的表达式,它的值可以是字符串、数字、⽇期或其它 SQL 数据类型。如果 value-expression 的值存在匹配的 WHEN ⼦句,则执⾏ WHEN ⼦句中的statement-list。如果没有合适的 WHEN ⼦句⽽有 ELSE ⼦句,则执⾏ ELSE ⼦句中的 statement-list。执⾏在 END CASE 后的第⼀个语句重新开始。
如果 value-expression 可以为空,使⽤ ISNULL 函数⽤不同的表达式替换 NULL value-expression。
语法 2 在这种格式下,执⾏ CASE 语句中第⼀个满⾜ arch-condition 的语句。如果不满⾜ arch-conditions,则执⾏ ELSE ⼦句。
如果表达式可以为 NULL,对第⼀个 arch-condition 使⽤以下语法:
WHEN arch-condition IS NULL THEN statement-list
权限
杜甫客至
⽆。
副作⽤
五香熏鲅鱼正宗做法
⽆。
标准和兼容性
SQL/92 持久存储模块特性。
SQL/99 持久存储模块特性。
⽰例
下⾯的过程使⽤ CASE 语句,将⽰例数据库的产品表中列出的产品分为衬⾐、帽⼦、短裤、未知⼏⼤类。
CREATE PROCEDURE ProductType (IN product_id INT, OUT type CHAR(10))
BEGIN
DECLARE prod_name CHAR(20);
SELECT name INTO prod_name FROM "DBA"."product"
WHERE id = product_id;
CASE prod_name
WHEN 'Tee Shirt' THEN
SET type = 'Shirt'
WHEN 'Sweatshirt' THEN
SET type = 'Shirt'
WHEN 'Baball Cap' THEN
SET type = 'Hat'
独立女性
WHEN 'Visor' THEN
SET type = 'Hat'
WHEN 'Shorts' THEN
SET type = 'Shorts'
ELSE
SET type = 'UNKNOWN'
END CASE;
END
下⾯的⽰例使⽤语法 2 ⽣成关于⽰例数据库中产品数量的消息。CREATE PROCEDURE StockLevel (IN product_id INT) BEGIN
DECLARE qty INT;
SELECT quantity INTO qty FROM product
WHERE id = product_id;
CASE
WHEN qty < 30 THEN
MESSAGE 'Order Stock' TO CLIENT;
柿子树如何修剪
WHEN qty > 100 THEN
MESSAGE 'Overstocked' TO CLIENT;
ELSE
MESSAGE 'Sufficient stock on hand' TO CLIENT;
END CASE;
END