ORACLE SQL LISTAGG 未返回预期结果

2024-01-09

我正在运行 Oracle Database 11g Enterprise 11.2.0.4.0、PL/SQL Release 11.2.0.4.0,并且在获取 LISTAGG 函数返回我期望的数据集时遇到一些问题。

这是场景:

我有一个看起来像这样的数据集

我想在一行的一列中返回 MOD_CODE 列中的值,例如:

AR4001,AR4002

我一直在尝试使用 LISTAGG 函数来完成此操作,例如:

SELECT LISTAGG(MOD_CODE,',') WITHIN GROUP (ORDER BY MOD_CODE) 
FROM XOTEST_A
WHERE MOD_CODE IN ('AR4001','AR4002')

但它没有返回任何数据(见截图)

我究竟做错了什么?这是更广泛场景的一部分,所以我理想地希望使用 LISTAGG 或类似的(我尝试使用 wm_concat 函数,但它返回 HUGECLOB 数据类型并且也不起作用)

我已经编写了 SQL 来构建重现场景

 -- CREATE TABLE 
    CREATE TABLE XOTEST_A (
      MOD_CODE   NVARCHAR2(12),
      DOM_CODE   NVARCHAR2(12),
      MOD_SNAM   NVARCHAR2(15),
      MOD_NAME   NVARCHAR2(120),
      SCH_CODE   NVARCHAR2(6),
      LEV_CODE   NVARCHAR2(6),
      PRS_CODE   NVARCHAR2(12),
      MOT_CODE   NVARCHAR2(6),
      MOD_CRDT   NUMBER(5,2),
      MOD_HOURS  NUMBER(4),
      MAP_CODE   NVARCHAR2(12),
      MOD_EREF   NVARCHAR2(12),
      MKS_CODE   NVARCHAR2(6),
      FPT_CODE   NVARCHAR2(12),
      ESB_CODE   NVARCHAR2(6),
      MOD_NPER   NUMBER(2),
      MOD_MOAS   NVARCHAR2(1),
      MOD_PMOA   NVARCHAR2(1),
      MEP_CODE   NVARCHAR2(6),
      DPT_CODE   NVARCHAR2(12),
      ELV_CODE   NVARCHAR2(3),
      ECL_CODE   NVARCHAR2(3),
      MOD_UTYC   NVARCHAR2(3),
      MOD_COGC   NVARCHAR2(6),
      MOD_STAT   VARCHAR2(1 BYTE),
      MOD_UPDD   DATE,
      MOD_KEYW   NVARCHAR2(100),
      MOD_IUSE   VARCHAR2(1 BYTE),
      MOD_TOCC   NVARCHAR2(12),
      MOD_DVNC   NVARCHAR2(12),
      MOD_UDF1   NVARCHAR2(15),
      MOD_UDF2   NVARCHAR2(15),
      MOD_UDF3   NVARCHAR2(15),
      MOD_UDF4   NVARCHAR2(15),
      MOD_UDF5   NVARCHAR2(15),
      MOD_UDF6   NVARCHAR2(15),
      MOD_UDF7   NVARCHAR2(15),
      MOD_UDF8   NVARCHAR2(15),
      MOD_UDF9   NVARCHAR2(15),
      MOD_UDFA   NVARCHAR2(15),
      MOD_UDFB   NVARCHAR2(15),
      MOD_UDFC   NVARCHAR2(15),
      MOD_UDFD   NVARCHAR2(15),
      MOD_UDFE   NVARCHAR2(15),
      MOD_UDFF   NVARCHAR2(15),
      MOD_UDFG   NVARCHAR2(15),
      MOD_UDFH   NVARCHAR2(15),
      MOD_UDFI   NVARCHAR2(15),
      MOD_UDFJ   NVARCHAR2(100),
      MOD_UDFK   NVARCHAR2(100),
      MOD_VALC   NVARCHAR2(12),
      MOD_APRT   NUMBER(5,2),
      MOD_LANG   NVARCHAR2(1),
      MOD_ERFM   NVARCHAR2(1),
      MOD_MUSE   VARCHAR2(1 BYTE),
      MOD_FACC   NVARCHAR2(6),
      MOD_ISGX   VARCHAR2(1 BYTE),
      MOD_REGM   NVARCHAR2(1),
      MOD_FRID   VARCHAR2(1 BYTE),
      MOD_WEEI   NVARCHAR2(1),
      MOD_MODE   NVARCHAR2(1)--,
      --MOD_NOTE   NCLOB
      )
    --INSERT VALUES INTO THE TABLE  
    INSERT INTO XOTEST_A (MOD_CODE,DOM_CODE,MOD_SNAM,MOD_NAME,SCH_CODE,LEV_CODE,PRS_CODE,MOT_CODE,MOD_CRDT,MOD_HOURS,MAP_CODE,MOD_EREF,MKS_CODE,FPT_CODE,ESB_CODE,MOD_NPER,MOD_MOAS,MOD_PMOA,MEP_CODE,DPT_CODE,ELV_CODE,ECL_CODE,MOD_UTYC,MOD_COGC,MOD_STAT,MOD_UPDD,MOD_KEYW,MOD_IUSE,MOD_TOCC,MOD_DVNC,MOD_UDF1,MOD_UDF2,MOD_UDF3,MOD_UDF4,MOD_UDF5,MOD_UDF6,MOD_UDF7,MOD_UDF8,MOD_UDF9,MOD_UDFA,MOD_UDFB,MOD_UDFC,MOD_UDFD,MOD_UDFE,MOD_UDFF,MOD_UDFG,MOD_UDFH,MOD_UDFI,MOD_UDFJ,MOD_UDFK,MOD_VALC,MOD_APRT,MOD_LANG,MOD_ERFM,MOD_MUSE,MOD_FACC,MOD_ISGX,MOD_REGM,MOD_FRID,MOD_WEEI,MOD_MODE/*,MOD_NOTE*/)
    VALUES ('AR4001',   'SEN',      'AR4001',   'DESIGN STUDIO 1A', 'UL',       '1',        'HASGRA1',  'A',        15,         NULL,       'AR4001',   NULL,       'AMOD',     NULL,       NULL,       1,          'M',        'M',        NULL,       'SENDES',   NULL,       NULL,       'F',        NULL,       NULL,       NULL,       NULL,       'Y',        NULL,       NULL,       NULL,       '15/05/2008',   'V',        'P',        NULL,       'N',        NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       'N',        NULL,       NULL,       NULL,       NULL,       NULL,       NULL/*,     ''*/)
    COMMIT;
    INSERT INTO XOTEST_A (MOD_CODE,DOM_CODE,MOD_SNAM,MOD_NAME,SCH_CODE,LEV_CODE,PRS_CODE,MOT_CODE,MOD_CRDT,MOD_HOURS,MAP_CODE,MOD_EREF,MKS_CODE,FPT_CODE,ESB_CODE,MOD_NPER,MOD_MOAS,MOD_PMOA,MEP_CODE,DPT_CODE,ELV_CODE,ECL_CODE,MOD_UTYC,MOD_COGC,MOD_STAT,MOD_UPDD,MOD_KEYW,MOD_IUSE,MOD_TOCC,MOD_DVNC,MOD_UDF1,MOD_UDF2,MOD_UDF3,MOD_UDF4,MOD_UDF5,MOD_UDF6,MOD_UDF7,MOD_UDF8,MOD_UDF9,MOD_UDFA,MOD_UDFB,MOD_UDFC,MOD_UDFD,MOD_UDFE,MOD_UDFF,MOD_UDFG,MOD_UDFH,MOD_UDFI,MOD_UDFJ,MOD_UDFK,MOD_VALC,MOD_APRT,MOD_LANG,MOD_ERFM,MOD_MUSE,MOD_FACC,MOD_ISGX,MOD_REGM,MOD_FRID,MOD_WEEI,MOD_MODE/*,MOD_NOTE*/)
    VALUES ('AR4002',   'SEN',      'AR4002',   'DESIGN STUDIO 1A', 'UL',       '1',        'HASGRA1',  'A',        15,         NULL,       'AR4002',   NULL,       'AMOD',     NULL,       NULL,       1,          'M',        'M',        NULL,       'SENDES',   NULL,       NULL,       'F',        NULL,       NULL,       NULL,       NULL,       'Y',        NULL,       NULL,       NULL,       '15/05/2008',   'V',        'P',        NULL,       'N',        NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       NULL,       'N',        NULL,       NULL,       NULL,       NULL,       NULL,       NULL/*,     ''*/)
    COMMIT;

    -- NOW RUN THE SELECT STATEMENT

    SELECT LISTAGG(MOD_CODE,',') WITHIN GROUP (ORDER BY MOD_CODE) LISTAGG_OUTPUT
    FROM XOTEST_A
    WHERE MOD_CODE IN ('AR4001','AR4002')

这似乎与 bug 19461687 有关,并且上一个问题 https://stackoverflow.com/q/28812445/266304。如果您将查询中的聚合值转储到 11gR2 或 12cR1 中,您会看到:

LISTAGG_OUTPUT
--------------------------------------------------------------------------------------------------
Typ=1 Len=25 CharacterSet=AL32UTF8: 0,41,0,52,0,34,0,30,0,30,0,31,2c,0,41,0,52,0,34,0,30,0,30,0,32

在 SQL*Plus 和 SQL Developer 中,实际值显示为:

LISTAGG_OUTPUT
----------------------------------------
 A R 4 0 0 1, A R 4 0 0 2

并且您无法从 SQL Developer 复制该值。 (在 12cR2 中,转储中不再出现零,该值显示时没有空格,并且您可以复制它,因此该错误似乎已得到修复。)

这些空字节似乎导致 Toad 根本不显示该值,大概是因为它看到第一个空字节并将其视为字符串终止符(或无论如何)。

SQL Fiddle 似乎可以解决这个问题,但 dbfiddle 似乎也有问题,并且当该查询存在时,不会为整个 fiddle 返回任何内容。

您可以将表格列重新定义为varchar2代替nvarchar2,但我认为它是该数据类型是有原因的,所以这可能不切实际。

因此,您可以将其转换为查询的一部分:

SELECT LISTAGG(CAST(MOD_CODE AS VARCHAR2(12)),',')
  WITHIN GROUP (ORDER BY MOD_CODE) LISTAGG_OUTPUT
FROM XOTEST_A
WHERE MOD_CODE IN ('AR4001','AR4002');

LISTAGG_OUTPUT
----------------------------------------
AR4001,AR4002

或者查看 bug 19461687 的补丁是否可以解决您的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORACLE SQL LISTAGG 未返回预期结果 的相关文章

  • 如何在 PostgreSQL 中生成月份列表?

    我有一张桌子A with startdate列是TIMESTAMP WITHOUT TIME ZONE我需要编写一个查询 函数来生成月份列表MIN列的值直到MAX列的值 例如 startdate 2014 12 08 2015 06 16
  • 了解 Oracle Apex_Application.G_Fnn 以及如何使用它

    我对 Oracle apex application gfnn 的工作原理以及它是否仅适用于 Oracle ApEx 中的标准 SQL 报告或仅适用于 SQL 可更新报告 即表格形式 感到非常困惑 基本上我试图使用这个示例 SQL 来实现以
  • Informix:带有输出参数的程序?

    我搜索了很多 但找不到任何东西 我只是想问是否有任何方法可以创建和调用过程 Informix 没有参数 我知道如何返回一个或多个值 对于过程和函数 但这不是我想要的 如果 Informix 不允许输出参数 那就真的很奇怪了 提前致谢 EDI
  • SQL Fiddle 输出错误

    其实我对 PL SQL 还很陌生 我在 SQL Fiddle 中使用 oracle pl sql 创建了下表 create table Employee name varchar2 100 id integer salary integer
  • Oracle Developer Tools for Visual Studio 2019 无法正确安装

    在 VS 2019 中 ODT 使用扩展名安装 而不是像以前的版本那样作为安装文件安装 因此 从 VS 2017 升级的 EF 6 使用的 MVC 项目 edmx 文件在扩展安装后不显示数据库图表 空白黑页 编辑 xml 选项等 仅此而已
  • 运行 Sqoop 导入和导出时如何找到最佳映射器数量?

    我正在使用 Sqoop 版本 1 4 2 和 Oracle 数据库 运行 Sqoop 命令时 例如这样 sqoop import fs
  • 为什么我的查询在参数化后会中断?

    我有 2 张桌子 Sales and Product Sales可以将产品存储为Idn or Name 传统设计 和Type列指定实际type与之相关 Product等是连接的子集表into这个表来获取真实的数据 在这个例子中 Produc
  • 分组依据检索 3 个值

    我有以下查询 SELECT Cod MIN Id AS id Min MAX Id AS id Max retrieve value in the middle COUNT AS Tot FROM Table a NOLOCK GROUP
  • T-SQL 相当于 =rand()

    我有几个内容表 我想用随机的文本段落填充它们 在 MS Word 中 我只需输入 rand 即可 我收到三段新鲜的文字 是否有 SQL 脚本 命令可用于使用 t sql 生成随机字典单词 declare Lorem nvarchar max
  • 如何防止用户生成的 Sql 查询上的 Sql 注入

    我有一个项目 私有的 ASP net 网站 受 https 密码保护 其中要求之一是用户能够输入直接查询数据库的 Sql 查询 我需要能够允许这些查询 同时防止它们对数据库本身造成损坏 以及访问或更新它们不应该访问 更新的数据 我制定了以下
  • SQL 性能,使用 OPTION (FAST n)

    谁能告诉我在 SQL 查询中使用 OPTION FAST n 有什么缺点 比如我这么快就抓取了10万条记录 但这对SQL Server的其他进程有影响吗 我正在接近我的问题 我必须每周运行一次数据处理 因此 第一个结果会在 5 7 秒后出现
  • 如何获取共同好友列表

    你好 我想知道如何才能找到共同的朋友 我目前在思考这个问题时遇到问题 我有一个名为 users 的表 它是这样的 id name 1 Kenny 2 Jack 3 Jimmy 4 Chris 5 Meg 6 Jake 7 Micheal 8
  • MySQL 中有“connect by”替代方案吗?

    如果我使用 Oracle 有connect by可用于创建分层查询的关键字 目前我正在一个项目中使用MySQL 我想知道是否有替代方案connect by在 MySQL 中 我尝试过谷歌 但到目前为止还没有结果 我想要实现的是通过一个查询从
  • SQL如何显示某个日期之前的数据

    我有几张桌子 一个是一个工人表显示工人代码 名字和姓氏 工作日期其中显示工人代码 工作开始日期 结束日期和工作区域代码 导师有工人编号 名字 姓氏和工作区号 Job area有工作区域代码名称和主管 我想要做的是在日期 10 09 10 之
  • 转置和聚合 Oracle 列数据

    我有以下数据 Base End RMSA Item 1 RMSA Item 2 RMSA Item 3 RMSB Item 1 RMSB Item 2 RMSC Item 4 我想将其转换为以下格式 Key Products RMSA RM
  • Postgres 上的 C 语言环境和 Posix 语言环境有什么区别?

    我知道 Postgres 上的数据库区域设置负责国家字符的正确顺序 正确的小写 大写等 但为什么有两种语言中立的语言环境 posix and c 它们之间有什么区别 还是只是一个中立的语言环境有两个不同的名称 UPDATE正如 Magnus
  • 如何手动设置auto_increment的下一个值?

    我手动向表中添加了一些行 并且还手动设置了 ID 自动增量 现在 当我尝试通过我的应用程序将新行添加到数据库表中时 我收到错误 创建的 ID 值已存在 如何手动设置下一个ID值 例如 在表中我必须有ID 那么如何告诉PostgreSQL 下
  • SQL 中的代码重用和模块化

    代码重用和模块化对于 SQL 存储过程编程来说是一个好主意吗 如果是这样 将这些功能添加到 SQL 存储过程代码库的最佳方法是什么 我通常为常见且重复的任务创建标量值函数 我发现它不仅可以简化与现有程序类似的新程序的开发 而且还有助于错误跟
  • 金融 - 计算到期收益率

    我读了this https stackoverflow com questions 1173555 open source financial library specifically yield to maturity发布关于 net 库
  • 查询从同一表中的另一条记录获取值并按大于间隙阈值的差异进行过滤

    我将数据导入到 MS Access 中的临时表中 如下所示 我添加了需要使用 SQL 查询计算的 Gap 和 Previous Current 列 间隙阈值 是用户输入或范围提供给查询和例如是 300 GlobalID 对 ItemID 进

随机推荐

  • 在 C++ 中寻找 MemoryStream

    在 C 的奇妙世界中 我可以创建一个内存流而不指定其大小 写入其中 然后只获取底层缓冲区 我怎样才能在 C 中做同样的事情 基本上我需要做 memory stream ms GROW AS MUCH AS YOU LIKE ms lt lt
  • 似乎无法从 Windows Phone 7 中的 TouchPanel 获得触摸输入

    我已经在 Visual Studio 中启动了一个新项目 并一直在尝试使用静态 TouchPanel 类来获取输入 我已通过 EnabledGestures 属性启用了 点击 手势 但是当我点击屏幕时 手势未注册 即 TouchPanel
  • 尝试使用表达式树过滤可为空类型

    我已将整个测试应用程序粘贴在下面 它相当紧凑 所以我希望这不是问题 您应该能够简单地将其剪切并粘贴到控制台应用程序中并运行它 我需要能够过滤任何一个或多个 Person 对象的属性 并且直到运行时我才知道是哪一个 我知道这个问题已经在各地进
  • ENOTDIR:不是目录node_modules/.staging/@types/node-16824c86/package.json

    当我运行 docker exec t image npm run production 时出现错误 npm 警告 电子邮件受保护 cdn cgi l email protection需要 utf 8 validate 5 0 2 的同级 但
  • React-router-dom:在返回事件中返回历史两次

    我有三个组件C1 C2 C3映射在路线上 c1 c2 c3 我想阻止组件C3从允许 通过浏览器事件处理 返回到C2而是直接转到C1 我该如何实现这一目标 需要此功能是因为 C2 充当 后重定向 想象一下浏览器执行 POST 的情况 操作 当
  • Material Table React 上的选择和远程数据分页

    我需要帮助 我需要使用材料表来反应我的数据表 我想同时使用选择和分页 但问题是如果我选择某一行并更改页面并返回到上一页 它不会选择该行 这是我创建的示例片段 是否可以覆盖选择道具 const Table gt const selectedR
  • 在 iOS 中从 NSDictionary 生成 JSON 字符串

    我有一个dictionary我需要生成一个JSON string通过使用dictionary 可以转换吗 你们能帮忙解决这个问题吗 Apple 在 iOS 5 0 和 Mac OS X 10 7 中添加了 JSON 解析器和序列化器 看NS
  • 在 Tomcat 上配置 PHP 会出现异常:UnsatisfiedLinkError

    我一直在尝试在 Tomcat 上使用 PHP 不要问为什么 我只是必须这样做 并且一直遵循使用 Tomcat 配置 PHP http toostep com trends configure php with tomcat以及一些使用 PE
  • 使用神经网络功能时出现错误

    我在可用的波士顿数据集上尝试了 R 中的神经网络 data Boston package MASS data lt Boston 只保留我们想要使用的变量 keeps lt c crim indus nox rm age dis tax p
  • Mongodb pymongo.errors.ServerSelectionTimeoutError:localhost:27017:[Errno 111]连接被拒绝,超时:30秒,

    我正在尝试本地连接到我的数据库 我已经在 MongoDB Compass 上建立了与数据库的连接 但是当我运行简单的代码时 出现以下错误 pymongo errors ServerSelectionTimeoutError localhos
  • macOS swift - 将数据保存到本地存储 - 最佳实践

    我是 macOS 开发的新手 我有一个应用程序 我需要将字符串 例如令牌 保存到某些本地存储 在关闭并打开应用程序后 我想检索该字符串 是否有可能只有我的应用程序才能检索该字符串 是不是最好写到txt文件或还有其他一些可能性 谢谢 这取决于
  • 如何从面板中加载的子用户控件访问父类功能/控件

    我有一个主窗体 其中包含一个面板 该面板将不同的用户控件加载到面板中 现在我需要从用户控件访问主窗体中的功能 下面我给出了我的代码 这是我的主要 Windows 窗体类 public partial class Form1 Form pub
  • 如何在 iPhone 中更改方向时更改视图控制器的视图?

    我正在开发一个支持 2 个方向的 iPhone 应用程序 我有这个视图控制器的 2 个 UIView 文件 我需要根据设备界面方向将相应的 UIView 文件设置到视图控制器 你能指导我如何改变方向吗 为什么要对两个方向使用两个视图 如果纵
  • 每次使用 pip 3 时如何解决“错误:外部管理环境”?

    错误信息 error externally managed environment This environment is externally managed gt To install Python packages system wi
  • 将自定义列添加到 Woocommerce 3+ 中的“我的帐户订单”表

    Woocommerce 3 5 x 在用户帐户 我的帐户 区域有一个特殊页面 其中显示用户以前的订单 此页面现在默认显示 5 列 这是 woocommerce 订单区域的屏幕截图 共有 5 列 我的订单 https i stack imgu
  • 如何在 R 中为蒙特卡洛创建更高效​​的模拟循环

    此练习的目的是创建营养摄入值的人群分布 早期数据中有重复的测量值 这些测量值已被删除 因此每一行都是数据框中唯一的人 我有这段代码 在使用少量数据框行进行测试时效果非常好 对于所有 7135 行 速度非常慢 我试图给它计时 但当我的机器上的
  • 条目压缩大小无效

    我使用称为 ASM 的字节码库来更改类文件 然后我想将每个类文件写回 jar 文件而不是填充类文件的文件夹中 我通过运行以下代码来做到这一点 当因未达到预期大小而引发 ZipException 时 即出现我的问题 java util zip
  • jQuery Datepicker 中的“今天”按钮不起作用

    我正在使用 jQueryUI Datepicker 并显示 今天 按钮 但这不起作用 它在演示中也不起作用 http www jqueryui com demos datepicker buttonbar http www jqueryui
  • Python pandas 与 OR 逻辑合并

    我正在搜索 但没有找到这个问题的答案 你可以使用 OR 逻辑执行 pandas 数据帧的合并吗 基本上 相当于使用 where t1 A t2 A OR t1 A t2 B 的 SQL 合并 我遇到一种情况 我将信息从一个数据库提取到数据帧
  • ORACLE SQL LISTAGG 未返回预期结果

    我正在运行 Oracle Database 11g Enterprise 11 2 0 4 0 PL SQL Release 11 2 0 4 0 并且在获取 LISTAGG 函数返回我期望的数据集时遇到一些问题 这是场景 我有一个看起来像