Caused by: org.postgresql.util.PSQLException: ERROR: function nvl(numeric, integer) does not exist

本文分享了Java开发者在从Oracle数据库迁移到PostgreSQL时遇到的nvl函数不支持问题,介绍了COALESCE函数作为解决方案,并比较了NVL、COALESCE和NULLIF等空值处理函数。
摘要由CSDN通过智能技术生成
Java资深小白,不足之处,或者有任何错误欢迎指出。	--蓝紫

报错日志如下,建议:No function matches the given name and argument types. You might need to add explicit type casts.
在这里插入图片描述
非常明显,报错说nvl函数不存在,nvl()是oracle中一个空值转换函数。用法结合如下代码解释就是,此处的is_read 字段读出的值为null时就赋值为0。
在这里插入图片描述
因为项目数据库迁移,DB换成PgSQL,才导致了函数不支持,后来使用了COALESCE()替换就解决啦。

常用空值转换函数

  • NVL(ex1,ex2)
    只支持oracle,如果ex1为空,就赋值为ex2。后来在此基础上, 又新加了NVL2(ex1,ex2,ex3)函数,表示如果ex1为空,就赋值为ex3,否则就赋值为ex2,这有点类似三目运算了。
  • COALESCE(ex1,ex2,…exN)
    oracle、pgsql、mysql都支持,与nvl()不同的是,此函数支持多表达式,有更多的扩展性和灵活性。
  • NULLIF(ex1,ex2)
    oracle、pgsql、mysql都支持,亲测有效。
    在这里插入图片描述
    pqsql测试如下:
    在这里插入图片描述
  • ISNULL(ex1,ex2)
    只支持mysql。
    `(∩_∩)′晚风依旧很温柔,一个人慢慢走
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值