Oracle JSON_ARRAYAGG()函数的默认排序问题

news2024/11/26 2:45:09

引入:

在实际操作中,俺写了这样一个Funtcion:

    FUNCTION fun_get_xxx(v_param_one VARCHAR2) RETURN CLOB AS
        v_OUTPUT CLOB;
    BEGIN
        WITH temp_table AS (
        	SELECT * FROM (
				( SELECT one.action_id,
                         two.log_time
				  FROM table_one one
                  LEFT JOIN table_two two on two.action_id = one.action_id
                  WHERE one.action_id = v_param_one
                )
               	UNION
                ( SELECT one.action_id,
                         two.log_time
                  FROM table_three three
                  LEFT JOIN table_four four on four.action_id = three.action_id
                  WHERE three.action_id = v_param_one)
                )
        	)
        	ORDER BY log_time DESC
        	
        SELECT JSON_OBJECT(
                       'numOfRecords' VALUE count(temp_table .action_id),
                       'records' VALUE (
                       		JSON_ARRAYAGG(
                                   JSON_OBJECT(
                                           'actionId'  VALUE temp_table.action_id,
                                           'logTime' VALUE temp_table.log_time
                                   )
                       		)
                       ) format json returning clob
               )
        INTO v_OUTPUT
        from temp_table;
        RETURN v_OUTPUT;
    END fun_get_xxx;

WITH子句中,对数据进行了关于log_time列的ORDER BY 排序,

因为中间用了UNION,因此是把ORDER BY子句放到了外层的SELECT语句中的,因此能保证排序不受UNION影响,

但是根据返回的结果显示,关于log_time的排序是失败的,但它并不是没有排序,而是关于action_id排序,

试过把ORDER BY子句放到UNION语句中,也不行,

然后怀疑上了那两个JSON封装函数头上,最终在JSON_ARRAYAGG()函数上找到了答案。

最终修改成如下:

-- 省略...
        SELECT JSON_OBJECT(
                       'numOfRecords' VALUE count(temp_table .action_id),
                       'records' VALUE (
                       		JSON_ARRAYAGG(
                                   JSON_OBJECT(
                                           'actionId'  VALUE temp_table.action_id,
                                           'logTime' VALUE temp_table.log_time
                                   )
                       		)  ORDER BY log_time DESC -- 把排序放到了这里
                       ) format json returning clob
               )
-- 省略...

原因:

先看官方文档关于JSON_ARRAYAGG()函数的结构说明:
在这里插入图片描述
可以看到JSON_ARRAYAGG()函数的结构是可以包含ORDER BY子句的。

The JSON_ARRAYAGG function is used to aggregate data from multiple rows into a single JSON array. When using this function, the data will be ordered by the unique key because the function automatically orders the data based on the order of the rows in the result set.
大概意思:
JSON_ARRAYAGG函数用于将多行数据聚合成一个JSON数组。在使用此函数时,数据将按照唯一键进行排序,因为该函数会根据结果集中行的顺序自动对数据进行排序。

所以当JSON_ARRAYAGG()函数里面没有指定ORDER BY子句的时候,他就不能保证顺序问题。

所以在WITH中的temp_table应该是已经排好序了的,但是在进行json封装的过程中,因为没有指定ORDER BY子句,不知道按照啥条件又排序了,导致了上一次排序失效。

所以在用到JSON_ARRAYAGG()函数且需要排序时,把排序写在JSON_ARRAYAGG()函数内才能达到想要的排序效果。
大大的乌龙~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/662836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python程序设计基础:字符串

文章目录 一、字符串二、字符串的索引与切片三、字符串处理与操作四、format()格式化方法五、字符串与数值的转换 一、字符串 在Python中,使用单引号或双引号括起来的内容,称为字符串类型数据(str),可以使用以下4种方…

Linux主分区,扩展分区,逻辑分区的联系和区别

基本概念 硬盘分区有三种, 主磁盘分区、扩展 磁盘分区、 逻辑分区。 一个 硬盘 主分区至少有1个,最多4个,扩展分区可以没有,最多1个。且 主分区扩展分区总共不能超过4个。 逻辑分区可以有若干个。 在windows下激活的 主分区是 …

树形结构-二叉树结构

树形结构 树形结构简介 树结构是一种非线性储存结构,存储的是具有“一对多”关系的数据元素的集合 树的相关术语 结点(Node) 使用树结构存储的每一个数据元素被成为“结点” 结点的度(Degree of Node) 某个结点所拥…

一次完整的Loadrunner基本流程操作

目录 一.生成脚本: 二.回放脚本: 三.创建场景: 四.生成报告: Loadrunner基本流程操作 准备条件: 一.安装loadrunner 二.破解loadrunner (注:本次使用lr11版本可以兼容的IE浏览器版本为I…

Qt简单讲解项目结构

Qt简单讲解项目结构 项目结构 主函数入口 #include "mainwindow.h"#include <QApplication>// 程序入口 argc 表示命令行变量的数量 argv表示命令行变量的数组 int main(int argc, char *argv[]) {// a表示应用程序对象QApplication a(argc, argv);MainWin…

绿色节能数据中心供配电系统设计

随着新一代信息技术的快速发展&#xff0c;数据资源存储、计算和应用需求大幅提升&#xff0c;机房在各个领域都有着广泛的应用&#xff0c;如学校内有专用机房、通信类企业有通信机房等。近年来&#xff0c;国家对新型数据中心机房建设也越来越重视&#xff0c;据工信部、国家…

Flutter私服搭建之package查询

温馨提示&#xff1a;这是一篇私有的package客户端查询的平台搭建文章&#xff0c;牵扯到python中的Djiango框架&#xff0c;虽和Flutter相关&#xff0c;但客户端的代码并没有关联&#xff0c;请您根据需要进行阅读。 公有的package&#xff0c;对于一个Flutter开发者而言&…

centos + lnmp + tp6部署的项目,访问的时候经常出现No input file specified

1.检查路径设置 检查你的 Nginx 配置文件是否正确指定了 PHP 路径&#xff0c;确认文件路径是否正确。同时&#xff0c;确保你的 Web 服务器具有访问权限。 server { listen 80; server_name example.com; root /usr/share/nginx/html; index index.html ind…

汽车电子行业ECU烧录工艺人必须面对的重要课题

在汽车电子行业ECU烧录是很一个关键工序&#xff0c;如何有效地通过对它的过程进行管控是每个工艺人必须面对的重要课题。 为了解决烧录过程管控的问题&#xff0c;我们合共软件针对汽车电子行业研发的HG MES中有专门的烧录模块用于应对这一问题。对ECU烧录管控的核心目标是如…

MySQL 数据库的命令操作

文章目录 一.Mysql数据库的基本概念二.Mysql数据库系统发展史三.现主流Mysql数据库介绍四.关系数据库五.非关系数据库介绍六.MySQL安装方法1. 创建新的数据库2.创建新的表3.删除指定的数据库4.删除指定的数据表5.向数据表中插入新的数据记录6.修改、更新数据表中的数据记录7.在…

腾讯云对象存储COS及CDN加速配置

1. 登陆腾讯云官网&#xff0c;进入腾讯云对象存储COS控制台 腾讯云&#xff1a;https://cloud.tencent.com 2. 创建存储空间 3. 添加自定义CDN加速域名 在腾讯云COS的指定的存储桶中添加自定义CDN加速域名 在阿里云官网添加一个解析记录&#xff0c;等待两分钟就可以用该域名…

新书上市丨开启学习自然语言处理与ChatGPT的精彩旅程,你需要这本书!

2022年10月30日&#xff0c;ChatGPT 的横空出世&#xff0c;引起了全球范围内的广泛关注。微软创始人比尔盖茨 (Bill Gates) 认为 “ChatGTP 与互联网具有同等重要的意义”。作为一个人工智能系统&#xff0c;ChatGPT 能准确识别用户意图&#xff0c;与用户进行对话并提供有价值…

postgresql优化案例三:recheck cond

文章目录 1.SQL语句2.查看改善前执行计划:3.解决方案3.1增加work_mem的size3.2.创建合适的索引 4.改善后执行计划 1.SQL语句 delete from sap_dispatchingd_hist awhere exists (select 1 from sap_dispatchingm_hist b where a.ffact_nob.ffact_noand a.fsfc_nob.fsfc_noand …

正确认识:DOTA-CH2-Alkynyl(HCl salt),螯合剂修饰肽,物理化学性质参数

1.试剂基团反应特点&#xff08;Reagent group reaction characteristics&#xff09;&#xff1a; DOTA-CH2-Alkynyl(HCl salt)使用有机溶剂或浓盐酸&#xff08;HCl&#xff09;&#xff0c;在酸化的环境中螯合剂修饰肽的主要优点是高效率和不存在有机溶剂。它可以应用于多种…

给清洁设备以“生命”,国邦从生产型制造走向服务型制造的转型之路|案例研究

国邦协同科技&#xff08;广州&#xff09;有限公司&#xff08;以下简称“国邦”&#xff09;成立于2011年&#xff0c;是行业领先的清洁解决方案服务商&#xff0c;致力于为客户提供全周期清洁解决方案&#xff0c;提高其清洁品质及效率。在2016年到2020年连续5年的时间里&am…

python 操作配置文件。

一&#xff1a;配置文件 1. 什么是配置文件 配置文件是为程序配置参数和初始设置的文件。一般为文本文件&#xff0c;以ini,conf,cnf,cfg,yaml等作为后缀名。 例如mysql的配置文件my.cnf内容如下&#xff1a; [mysqld] # Only allow connections from localhost bind-addre…

Java30天拿下---第三天(选择,循环,二重循环语句,输入,调试,标签)

Java30天拿下---第三天 一 流程图二 选择结构简单的if-else嵌套的if-else多重if的选择语句&#xff08;else-if&#xff09;switch语句 二 输入验证三 程序调试四 循环结构while循环do-while循环for循环流程控制二重循环&#xff08;重点&#xff09; 五 标签 label&#xff08…

中国移动云能力中心捐赠 secScanner 和 ksPack 项目,助力openEuler社区繁荣发展

2023 开放原子全球开源峰会于 6 月 11 日至 13 日在全球数字经济大会期间召开。本届大会以“开源赋能、普惠未来”为主题&#xff0c;全面展示开源技术应用&#xff0c;聚焦全球开源生态最新发展与前沿技术动态。中国移动云能力中心张胜举出席本次大会&#xff0c;并代表移动云…

618仿冒百出,如何保护品牌不受侵害|上云那些事

随着直播带货的兴起&#xff0c;如今的618&#xff0c;更多消费者选择在直播间下单。与传统电商不同的消费体验背后&#xff0c;是消费模式和销售渠道的改变&#xff0c;而与传统电商比较成熟的渠道风控相比&#xff0c;直播间则成为了不法分子潜伏的温床&#xff1a;大量号称“…

电能质量监测和分析仪器的设计与应用

安科瑞虞佳豪 随着电气环境中自动化程度的提高,以电力电子技术为代表的各种整流、逆变、变频等非线性负载比重不断变大,加之调控手段不完善及外来干扰等原因,使得电能质量下降。基于计算机、微处理器控制的电子仪器在国民经济企业中大量使用,对供电质量的敏感程度越来越高,对电…