Oracle OCP认证考试题目详解082系列第49题

一、考察的知识点摘要

本题主要考察对Oracle数据库中 NULLIFCOALESCE 这两个函数的语法规则返回值逻辑的理解。核心知识点包括:

  1. NULLIF(expr1, expr2) 函数 :比较两个表达式。如果二者相等,返回NULL;如果不相等,返回第一个表达式 expr1 的值。特别注意 :第一个参数 expr1 不能直接为字面量 NULL
  2. COALESCE(expr1, expr2, ..., expr_n) 函数 :返回参数列表中第一个非空(NOT NULL)表达式 的值。如果所有参数均为NULL,则返回NULL。该函数需要至少两个参数。
  3. 数据类型一致性:在调用这些函数时,提供的参数应在数据类型上是兼容或可隐式转换的,否则可能导致错误。

二、英文题目与答案

题目 :Which two queries execute successfully?

A. SELECT NULLIF(100, 100) FROM DUAL;

B. SELECT NULLIF(100, 'A') FROM DUAL;

C. SELECT COALESCE(100, 'A') FROM DUAL;

D. SELECT COALESCE(100, NULL, 200) FROM DUAL;

E. SELECT NULLIF(NULL, 100) FROM DUAL;

正确答案AD

三、题目翻译

哪两个查询可以成功执行?

A. SELECT NULLIF(100, 100) FROM DUAL;

B. SELECT NULLIF(100, 'A') FROM DUAL;

C. SELECT COALESCE(100, 'A') FROM DUAL;

D. SELECT COALESCE(100, NULL, 200) FROM DUAL;

E. SELECT NULLIF(NULL, 100) FROM DUAL;

四、题目解析

  1. 选项A解析:正确执行NULLIF(100, 100) 比较两个数值100。由于它们相等,根据函数定义,返回 NULL。这是一个有效的函数调用,查询语法正确。
  2. 选项B解析:执行错误NULLIF(100, 'A') 试图比较一个数字(100)和一个字符串('A')。在Oracle数据库中,数字和字符串属于不同的数据类型。虽然数据库可能尝试隐式转换,但在严格的类型检查或无法进行合理转换的场景下,这种类型不匹配可能导致错误。
  3. 选项C解析:执行错误COALESCE(100, 'A') 试图返回第一个非NULL值。这里100是数字,'A'是字符串。COALESCE 函数要求所有参数的数据类型一致或可隐式转换为同一类型。数字和字符串的混合类型通常会导致错误。
  4. 选项D解析:正确执行COALESCE(100, NULL, 200) 从参数列表中寻找第一个非NULL值。第一个参数100就是非NULL的,因此函数返回100。这是一个语法和逻辑都正确的COALESCE函数调用,符合其需要至少两个参数的要求。
  5. 选项E解析:执行错误NULLIF(NULL, 100) 的第一个参数直接是字面量 NULL。根据 NULLIF 函数的定义,第一个参数不允许为字面量 NULL 。虽然逻辑上比较NULL和100不相等应返回第一个参数NULL,但Oracle语法规则明确禁止这种写法,会导致错误。

五、考察的知识点详情

  1. NULLIF 函数深度解析

    • 逻辑等价NULLIF(expr1, expr2) 在逻辑上完全等价于以下的 CASE 表达式:

      sql 复制代码
      CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END
    • 返回值类型NULLIF 函数的返回值数据类型与第一个参数 expr1 的数据类型相同。

    • 常见应用场景

      • 防止除零错误 :在除法运算中,使用 NULLIF 将分母为零的情况转换为 NULL,从而避免运行时错误。例如:SELECT 100 / NULLIF(0, 0) FROM DUAL; 结果是 NULL 而非错误。
      • 数据清洗 :将数据中特定的占位符(如表示无效值的999)转换为 NULL。例如:SELECT NULLIF(salary, 999) FROM employees;
  2. COALESCE 函数深度解析

    • 逻辑等价COALESCE(expr1, expr2, ..., expr_n) 可以用 CASE 表达式实现:

      sql 复制代码
      CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE COALESCE(expr2, ..., expr_n) END

      最简单的形式 COALESCE(expr1, expr2) 等价于:

      sql 复制代码
      CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
    • 短路评估(Short-circuit Evaluation) :Oracle数据库在计算 COALESCE 函数时采用短路评估。它会从左到右依次评估参数,一旦找到第一个非NULL值,就立即返回该值,并停止评估后续参数。这能提升性能。

    • NVL 函数的关系COALESCENVL 函数的泛化。NVL(expr1, expr2) 等价于 COALESCE(expr1, expr2),但 COALESCE 可以接受两个以上的参数,更为灵活。

  3. 关键区别与注意事项

    • 核心功能NULLIF 用于在特定条件(两值相等)下产生NULL ;而 COALESCE 用于从一系列值中寻找第一个非NULL
    • 参数限制NULLIF 必须且只能 接受两个参数。COALESCE 必须接受至少两个参数。
    • 数据类型一致性:两个函数都要求参数数据类型兼容。不兼容的数据类型(如选项B和C中的数字和字符串直接比较)是常见的错误来源。
    • NULL 字面量的使用 :特别注意 NULLIF 函数的第一个参数不能是字面量 NULL(如选项E),这是一个语法限制。

希望这份详细的解析能帮助你彻底理解 NULLIFCOALESCE 函数的相关知识。如果对SQL中的其他函数或概念还有疑问,我们可以继续探讨。

相关推荐
不知更鸟3 小时前
Django 项目是什么
数据库·sqlite
我是小超人-雨石花5 小时前
Jenkins&Robot Framework持续集成
运维·jenkins·ci
有一个好名字6 小时前
MyBatis-Plus 三种数据库操作方式详解 + 常用方法大全
数据库·mybatis
-Xie-6 小时前
Redis(八)——多线程与单线程
java·数据库·redis
wanhengidc6 小时前
云手机的软件核心是什么
运维·服务器·web安全·游戏·智能手机
G探险者7 小时前
为什么 VARCHAR(1000) 存不了 1000 个汉字? —— 详解主流数据库“字段长度”的底层差异
数据库·后端·mysql
芬加达7 小时前
jvm八股
运维·服务器·jvm
小兔薯了7 小时前
11. Linux firewall 防火墙管理
linux·运维·服务器
Albert Tan8 小时前
Oracle EBS R12.2.14 清理FND_LOBS并释放磁盘空间
数据库·oracle
L.EscaRC8 小时前
图数据库Neo4j原理与运用
数据库·oracle·neo4j