oracle使用nullif解决除数为零的问题分析

 更新时间:2025年11月10日 09:03:08   作者:nayi_224  
文章介绍了如何使用Oracle数据库中的NULLIF函数来解决除数为零的问题,NULLIF函数在两个表达式相等时返回NULL,否则返回第一个表达式,这对于处理复杂的除数问题非常有用,因为它可以避免重复代码,提高可维护性

oracle使用nullif解决除数为零

说一下nullif的语法


NULLIF compares expr1 and expr2. If they are equal, then the function returns null. If they are not equal, then the function returns expr1. You cannot specify the literal NULL for expr1.

If both arguments are numeric data types, then Oracle Database determines the argument with the higher numeric precedence, implicitly converts the other argument to that data type, and returns that data type. If the arguments are not numeric, then they must be of the same data type, or Oracle returns an error.

The NULLIF function is logically equivalent to the following CASE expression:
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

如果两个参数相等,返回null,否则返回第一个。

第一个参数不可指定为空。对于非数字类型参数,数据类型必须一致。对于数值数据类型,会隐式的转化为更高优先级的数据类型。(这个理解可能有误,我测试了int,integer,float。但是最终都转化为number类型)。

一般来说

我们处理“除数为零”的问题会用到decode(当然也可以用case,但是写起来代码更多些)。

比如:

dividend / decode(divisor, 0, null, divisor)

但是在除数divisor非常复杂的时候,就需要把这一大串代码写两遍,或者是再套一层view。

无论是哪种,都是极其不利于维护的。

1 / 
decode((sum(t.val) over(order by t.c) +
       nvl(lead(val) over(partition by b order by c), 0)) /
      sum(val) over(partition by b order by c),
      0,
      null,
      (sum(t.val) over(order by t.c) +
       nvl(lead(val) over(partition by b order by c), 0)) / sum(val)
      over(partition by b order by c))

对于这种复杂表达式的除数,每回修改都要改两遍,很容易出错。

利用nullif,可以让除数只写一次。

因为 decode(divisor, 0, null, divisor)nullif(divisor, 0) 是等效的。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • PLSQL无法连接64位Oracle数据库/Database下拉框为空的完美解决方法

    PLSQL无法连接64位Oracle数据库/Database下拉框为空的完美解决方法

    这篇文章主要介绍了PLSQL无法连接64位Oracle数据库/Database下拉框为空的完美解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Oracle中查询结果合并的方法详解

    Oracle中查询结果合并的方法详解

    这篇文章主要给大家介绍了Oracle中查询结果合并的方法,利用union合并查询,利用intersect合并查询,利用“union all”合并查询,利用minus合并查询,需要的朋友可以参考下
    2023-08-08
  • Oracle to_date()函数的用法介绍

    Oracle to_date()函数的用法介绍

    to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,需要的朋友可以参考下
    2014-08-08
  • Oracle的默认用户密码

    Oracle的默认用户密码

    创建表空间和用户时,需要的时候竟然忘记了密码,试了好多次都没连接上,进而用户也被锁定,下面就教您处理Oracle默认用户的密码问题的方法,希望对和我一样情况的朋友们有所帮助
    2012-07-07
  • Oracle数据库升级到19C用户登录报错问题解决办法

    Oracle数据库升级到19C用户登录报错问题解决办法

    oracle是一款非常流行的关系型数据库管理系统,被广泛应用于各个领域,下面这篇文章主要给大家介绍了关于Oracle数据库升级到19C用户登录报错问题的解决办法,需要的朋友可以参考下
    2024-08-08
  • 使用MySQL语句来查询Apache服务器日志的方法

    使用MySQL语句来查询Apache服务器日志的方法

    这篇文章主要介绍了使用MySQL语句来查询Apache服务器日志的方法,五个实例均基于Linux系统进行演示,需要的朋友可以参考下
    2015-06-06
  • Oracle使用pivot和unpivot函数实现行列转换

    Oracle使用pivot和unpivot函数实现行列转换

    项目开发过程中常常会涉及到oracle数据库的一个数据操作,那就是行列的互转,本文为大家介绍了两个可以实现这一操作的函数pivot和unpivot,感兴趣的可以了解一下
    2023-06-06
  • Oracle数据库的备份与恢复

    Oracle数据库的备份与恢复

    Oracle数据库的备份与恢复...
    2007-03-03
  • 详解Oracle 11g DRCP连接方式的基本原理

    详解Oracle 11g DRCP连接方式的基本原理

    这篇文章主要为大家详细介绍了Oracle 11g DRCP连接方式的基本原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • Oracle DG 的归档缺失修复方法

    Oracle DG 的归档缺失修复方法

    文章介绍了Oracle DG归档缺失的修复方法,包括检查归档同步情况、查看GAP日志应用情况以及不同的修复思路,如归档还在主库、归档已在备库或归档已被删除等,感兴趣的朋友一起看看吧
    2025-02-02

最新评论