GaussDB(DWS)条件表达式函数返回错误结果集排查

这篇具有很好参考价值的文章主要介绍了GaussDB(DWS)条件表达式函数返回错误结果集排查。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘要:条件表达式函数中出现结果集不一致问题,我们首先要考虑是否入参数据类型不一致导致出参不一致。

本文分享自华为云社区《GaussDB(DWS)条件表达式函数返回错误结果集排查》,作者:yd_211369925 。

(一)案例背景

客户使用greatest获取并返回参数列表中值最大的表达式的值,子查询中查询结果与将子查询的结果粘出来单独执行结果集不一致。

select greatest(1,2,100,-1,0,nvl(null,0)) --结果为2,select nvl(null,0)的结果为0
select greatest(1,2,100,-1,0,0) --结果为100

(二)问题排查

首先我们要了解greatest和nvl两个函数的用法

客户使用的版本为dws820环境为mysql兼容模式,nvl(null,0)结果类型为unknown的类型即为text;

第一条greatest(1,2,100,-1,0,nvl(null,0))参数中存在int和text,即按字符排序2最大;

第二条greatest(1,2,100,-1,0)参数均为int,输出按数值排序100最大;

拓展:

对于一些非条件表达式函数可以通过\df+ 函数名(这里用min来举例) 查找入参和出参的数据类型

或者先使用 select proname,proisstrict,provolatile,prorettype,proargtypes,prosrc,proshippable from pg_proc where proname = '函数名';

再使用select oid,typname from pg_type where oid =‘xxx’;(这里oid根据上述的prorettype,proargtypes来查询)

具体函数重要属性参考

GaussDB(DWS)函数下推属性介绍
https://bbs.huaweicloud.com/blogs/250351

(三)解决方案

从上述排查中可知将,改写第一条语句,使用nvl(null,0)::int替换nvl(null,0)使得greatest函数中所有数据类型均为int即可

SELECT greatest(1,2,100,-1,0,nvl(null,0)::int)

此时结果是,100符合客户预期结果。

 

点击关注,第一时间了解华为云新鲜技术~文章来源地址https://www.toymoban.com/news/detail-461102.html

到了这里,关于GaussDB(DWS)条件表达式函数返回错误结果集排查的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • GaussDB SQL基本语法示例-CASE表达式

    目录 一、前言 二、CASE Expression(CASE表达式)介绍 三、GaussDB数据库中的简单CASE表达式 1、基本概念 2、基本语法 3、示例 四、GaussDB数据库中的搜索CASE表达式 1、基本概念 2、基本语法 3、示例 五、小结 SQL是用于访问和处理数据库的标准计算机语言。GaussDB支持SQL标准(默认支

    2024年02月08日
    浏览(77)
  • postgresql-条件表达式

    2024年02月10日
    浏览(45)
  • 3、python布尔类型和条件表达式

    使用布尔值进行分支逻辑! Python有一种称为 bool 的变量类型。它有两个可能的值: True 和 False 。 In [1]: 除了直接在代码中使用 True 或 False 之外,我们通常通过 布尔运算符 获取布尔值。这些运算符用于回答是/否问题。让我们来看一些这些运算符。 Operation Description Operation

    2024年01月17日
    浏览(46)
  • 【Flutter 开发实战】Dart 基础篇:条件循环表达式

    Dart 是一门强大的编程语言,其条件和循环表达式在编写灵活、高效代码中起着关键作用。本文将深入介绍 Dart 中的条件表达式、循环表达式、以及如 for 、 while 、 do...while 、 break 、 continue 等内容,旨在为初学者提供清晰的指导。 Dart 中的条件表达式主要通过 if 语句

    2024年02月01日
    浏览(55)
  • Python中的三元运算符:简洁高效的条件表达式

    什么是三元运算符 三元运算符是一种简洁高效的条件表达式,用于根据条件的真假来返回不同的值。它是一种特殊的运算符,由三个操作数组成,形式为 [结果为真的值] if [条件] else [结果为假的值] 。 Python中的三元运算符语法 Python中的三元运算符的语法如下: 三元运算符的

    2024年01月19日
    浏览(59)
  • JAVA中char类型加减乘除运算表达式返回类型

    我们都知道java中,如果char类型和int类型做加减法,那么char类型会被精度提升至int类型然后参与运算,返回的也是int类型的数据。 那么如果表达式中参与运算的 均为char类型 ,那么表达式返回的类型是什么呢? 经过简单测试,是 int类型 。 这个问题是在调用StringBuilder.appen

    2024年02月08日
    浏览(58)
  • 7.JS里表达式,if条件判断,三元运算符,switch语句,断点调试

    表达式就是可以被求值的代码比如什么a = 1 语句就是一段可以执行的代码比如什么if else 直接给B站的黑马程序员的老师引流一波总结的真好 就是基本上所有的语言都会有的if else 语句就是满足不同的条件执行不同的代码,让计算机有条件判断的能力。 注意在if的括号里面除了

    2024年02月20日
    浏览(52)
  • Django笔记二十三之case、when操作条件表达式搜索、更新等操作

    本文首发于公众号:Hunter后端 原文链接:Django笔记二十三之条件表达式搜索、更新等操作 这一篇笔记将介绍条件表达式,就是如何在 model 的使用中根据不同的条件筛选数据返回。 这个操作类似于数据库中 if elif else 的逻辑。 以下是本篇笔记的目录: model 和数据准备 When 和

    2023年04月13日
    浏览(68)
  • Android studio:错误: 需要常量表达式

    将一个项目作为library,通过import Moudle导入一个新项目引用时,爆出这个错误:需要常量表达式,定位到switch。于是百度一下,解决方法为把switch case,改成if else,即: 改为: 具体原因:http://tools.android.com/tips/non-constant-fields.

    2024年02月21日
    浏览(40)
  • 探索Python中的函数式编程:Lambda表达式与函数式工具【第135篇—Lambda表达式】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在Python编程世界中,函数式编程逐渐成为了一种流行的范式,特别是在处理数据和编写简洁、高效代码时。函数式编程的核心思想是将计算视

    2024年04月08日
    浏览(86)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包