oracle 18中通过json_table解析json

2023-12-30

有一个请求例如:

with j (sJson) as (
   select '{
      "ID":"1444284517",
      "ID_ORD":"4255;2187606199",
      "Vals":{
               "CODE":"ONB2B3BB8",
               "DORD":"25.04.2021"
             }
   }'
   from dual
)

select jt.*
from j
cross apply json_table (j.sJson, '$'
   columns
      ID varchar2(32) path '$.ID',
      ID_ORD varchar2(32) path '$.ID_ORD',
        nested path '$.Vals[*]'
              columns (
                 CODE varchar2(9) path '$.CODE',
                 DORD varchar2(30) path '$.DORD',
                 ....
              )) jt    

In column可能有不同的领域。
如何列出所有字段columns不指定类型和路径?那如何让它成为动态解析器​​呢?需要放弃CODE varchar2(9) path '$.CODE'
我期望这个结果:

| ID         | ID_ORD          | CODE      | DORD       |
+------------+-----------------+-----------+------------+
| 1444284517 | 4255;2187606199 | ONB2B3BB8 | 25.04.2021 | 

您可以定义函数:

CREATE FUNCTION get_keys(
  value IN CLOB
) RETURN SYS.ODCIVARCHAR2LIST PIPELINED
IS
  js   JSON_OBJECT_T := JSON_OBJECT_T( value );
  keys JSON_KEY_LIST;
BEGIN
  keys := js.get_keys();
  FOR i in 1 .. keys.COUNT LOOP
    PIPE ROW ( keys(i) );
  END LOOP;
END;
/

CREATE FUNCTION get_value(
  value IN CLOB,
  path  IN VARCHAR2
) RETURN VARCHAR2
IS
  js JSON_OBJECT_T := JSON_OBJECT_T( value );
BEGIN
  RETURN js.get_string( path );
END;
/

然后使用查询:

WITH j (sJson) as (
   select '{
      "ID":"1444284517",
      "ID_ORD":"4255;2187606199",
      "Vals":{
               "CODE":"ONB2B3BB8",
               "DORD":"25.04.2021"
             }
   }'
   from dual
)
SELECT jt.id,
       jt.id_ord,
       k.COLUMN_VALUE AS Key,
       get_value( jt.vals, k.COLUMN_VALUE ) AS value
FROM   j
       CROSS APPLY JSON_TABLE(
         j.sjson,
         '$'
         COLUMNS (
           id     VARCHAR2(20) PATH '$.ID',
           id_ord VARCHAR2(30) PATH '$.ID_ORD',
           vals   VARCHAR2(4000) FORMAT JSON PATH '$.Vals'
         )
       ) jt
       CROSS APPLY get_keys( jt.vals ) k

哪个输出:

ID ID_ORD KEY VALUE
1444284517 4255;2187606199 CODE ONB2B3BB8
1444284517 4255;2187606199 DORD 25.04.2021

(注意:SQL不支持动态列数,因此您需要提供固定列数,例如key and value并将输出作为行而不是列。)

数据库小提琴

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

oracle 18中通过json_table解析json 的相关文章

  • 如何防止用户生成的 Sql 查询上的 Sql 注入

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

    出于性能和简单性的原因 我想以秒的形式获取 MySQL 3 x 服务器中 DATETIME 列的内容 或者实际上任何数字类型 我只是想在使用 UNIX TIMESTAMP 时避免所有明显的时区问题 the我表中的日期确实来自不同的区域设置
  • 如何将 JsonNode 转换为 ObjectNode

    我有一个com fasterxml JsonNode带有一些数据的对象 我需要对其数据进行一些操作 我用谷歌搜索答案但没有得到正确的答案 您能建议我如何操作 JsonNode 数据吗 我也尝试过转换JsonNode to ObjectNod
  • django pyodbc 数据源名称未找到

    当尝试连接到我的数据库服务器和 Django 中的数据库时 我收到错误 django db utils InterfaceError IM002 IM002 Microsoft ODBC Driver Manager 未找到数据源名称且未指
  • 在Java Servlet中获取通过jquery ajax发送的参数[重复]

    这个问题在这里已经有答案了 我在网上搜索这个主题 但找不到有效的示例 我会很高兴有人能给我帮助 这就是我测试的 ajax url GetJson type POST dataType json contentType application
  • 查看oracle中重复行的所有数据

    我有一个有 6 列的表 id name type id code lat long 前三个是必需的 ID是私钥 按序列自动插入 我有一些重复的行 正如两者所定义的name and type id是平等的 但我想查看受骗者的所有数据 我可以很
  • 如何在 JsonNode 中创建插入新节点?

    我创建了一个新的 JsonNode JsonNode jNode new ObjectCodec createObjectNode 有了这个节点 我如何在其中添加键值对 以便我可以使用新值构造这个新节点 我读到的内容http www cow
  • Linq 选择与另一个表中的 ID 相等的项目

    我不确定这怎么可能 但我有两个表 我想通过表 1 的值从表 2 中获取值 表 1 有一个名为 rank 的外键 它是int 表 2 有一个名为 name 的值 它是string 现在表 1 的 排名 与表 2 的 ID 相关 所以当我说 v
  • 最小有效 JSON 是多少?

    我仔细阅读了 JSON 描述http json org http json org 但我不确定我是否知道这个简单问题的答案 最小可能的有效 JSON 字符串是什么 string 该字符串是有效的 JSON 吗 42简单的数字是有效的 JSO
  • SQL 中的代码重用和模块化

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

    我的 JSONP 请求有问题 数据不会显示 Firebug 显示 无效标签 错误 我的 JavaScript ajax url link dataType jsonp beforeSend function xhr var base64 b
  • MSSQL:如何使用代码编写存储过程创建脚本?

    我正在尝试使用一个数据库中存在但另一个数据库中不存在的 information schema routines 查询存储过程定义列表 SELECT t1 Routine Definition FROM server1 MyDatabase
  • 使用 Django 添加额外 \\ 字符的 JSON 编码

    我正在尝试创建一个函数 将包含消息和 Django 模型实例的字典转换为 JSON 然后我可以将其传回客户端 例如 我在 models py 中定义了模型 Test from django db import models class Te
  • 选择每组最新的项目[重复]

    这个问题在这里已经有答案了 可能的重复 检索每组中的最后一条记录 https stackoverflow com questions 1313120 retrieving the last record in each group 我有 2
  • 查询从同一表中的另一条记录获取值并按大于间隙阈值的差异进行过滤

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

    我正在使用 C NET 开发多项选择题考试生成器 每次做出报告时 都会在数据库中随机挑选问题 并随机调整选项 我可以做随机问题部分 但我不能做选择的洗牌 我有一张表 其中一行如下 question answer distractor1 di
  • 使用 IFS bash 进行 CSV 解析:选择“;”作为分隔符

    我有一个包含 130 列的 CSV 我需要用它来做 3 个 csv 我用 while 和 IFS 循环 因为我需要对每一行的变量进行一些处理 这是我所做的 while IFS read my 130 vars what i do with
  • android中如何将字符串转换为unicode

    我正在解析一些unicodes from json to my android应用程序 API 给出unicodes像这样的图标 ue600 当我将这个unicode直接添加到textview like textview setText u
  • mysql 中 INSERT 语句的计算列

    假设我想要一个表来记录其他表中的日期和列数 或者任何类型的数学 字符串连接等 CREATE TABLE log id INTEGER NOT NULL AUTO INCREMENT date DATETIME NOT NULL count
  • boost::spirit::qi::语法和可变参数模板

    我在使用可变参数模板定义语法时面临一个问题 我首先定义一些包含在某些结构中的简单语法 例如纬度 经度 如下所示 include

随机推荐

  • T-SQL - 获取具有相同 B 集的所有 As 的列表

    我正在努力编写一个棘手的 SQL 查询 看一下下表 A B 1 2 1 3 2 2 2 3 2 4 3 2 3 3 4 2 4 3 4 4 现在 从这个表中 我本质上想要一个所有 A 的列表 它们具有完全相同的 B 集 并为每个集提供一个递
  • 如何在 DAX (Power BI Desktop) 中计算总价值的百分比

    我在 Power BI Desktop 中有以下切片器 其中客户数量计算为计数 不同 Fact EHRTransaction ClientFK 在我的数据模型中 我的目标是计算占总数的百分比 13 639 并将其作为度量或另一个列添加到此切
  • parse(text = str) 中出现意外符号错误,数字后带有连字符

    我正在尝试解析 R 中的字符串 当字符串中存在数字后跟连字符时 R 会抛出 意外符号 或 意外输入结束 异常 请参阅代码 搜索并尝试不同的方法来解决这个问题并没有帮助 可能是我的知识匮乏 任何帮助或建议将不胜感激 gt str lt abc
  • Umbraco 5询问用户是否有节点权限

    我正在使用 Umbraco 5 1 beta 在互联网上 此信息来自以前的版本 找不到最新的文档 我发现我可以询问节点用户是否具有访问权限 这样我想建立我的菜单 问题是 我无法让它工作 HasAccess 和 IsProtected 属性不
  • 如何使用 SwiftUI 扩展按钮的宽度

    我不知道如何更改 SwiftUI 中按钮的宽度 我已经尝试过 使用 frame minWidth 0 maxWidth infinity 在按钮和导航链接周围使用 Spacer 在文本字段上使用框架并在按钮上使用填充 查看文档以及我在网上搜
  • 为什么 PHP 对象运算符在浏览器中被视为结束标记? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • 使用其他数组对对象数组进行排序

    我创建了这个对象数组 const palette color Blue brightness Soft color Blue brightness Medium color Blue brightness Principal color M
  • Magento 重写 getPrice()

    我已经通过覆盖 Magento 产品的价格规则getPrice 方法在 Mage Catalog Model Product Type Price 类 简单的产品工作正常 并显示我在中提到的更新价格getPrice i e public f
  • Haproxy ssl重定向握手失败

    我有 haproxy v1 5 4 可以使用 http 和 https 我将 80 和 443 绑定到相同的前端并使用相同的 acl 我想创建一个 http gt https 重定向 frontend http in bind 80 bin
  • NSXMLparser 错误代码 5

    我在我的应用程序中使用亚马逊的 simpledb 解析 xml 时出现错误 代码为 5 IE NSXMLParserErrorDomain 错误 5 有时它工作正常 并且导航没有任何重大变化就会出现该错误 当我多次重新启动应用程序而无需对系
  • Android:如何在主项目中使用测试项目

    我想在 Eclipse 中创建这样的项目结构 并将其与 Maven 一起使用 MyProject AndroidManifest xml res resources for main application src source code
  • div元素中额外空间的解决方案

    在我的应用程序中我使用的是div元素 div 元素下方和上方有一些额外的空间 我怎样才能删除它 Thanks 每个浏览器都有自己的各种元素的边距和填充的默认值 所以除非你明确设置例如 div margin 0 padding 0 在你的 C
  • 如何在不创建数据库的情况下保存谜语游戏的答案?

    我创建了一个具有不同级别的问答游戏 每个级别都包含一个问题 我没有用数据库创建它 我只是用了字符串 当用户回答第一级的问题时 他会被带到第二级 但是当用户返回到第一级时 他必须再次输入答案 即使他之前已经解决了该问题 无论如何 JAVA 是
  • Firemonkey Delphi TWebBrowser 获取文本/HTML

    我如何从 Firemonkey 平台 Android iOS 上的网页获取文本 html TWebBrowser 没有任何这方面的东西 经过一些测试 我结合了JAVAScript和Delphi代码 有一个workground 请参考我的文章
  • 不带列名的动态汇总

    如何根据列的字符串数组动态构造汇总语句 deviceTelemetry summarize
  • Node 7.1.0 new Promise() 解析器未定义不是函数

    我在 OSX 上使用最新的节点版本 7 1 0 但我仍然无法使用 Promises 我明白了 index js new Promise Error new Promise 类型错误 未定义的承诺解析器不是函数 Node 7 1 0不支持ES
  • 访问模块内的 IRQ 描述数组并显示操作名称

    我正在用 C 语言编写一个内核模块 该模块正在努力访问 IRQ 描述数组元素并显示这些元素的所有操作名称 一开始 我认为这个 irq desc 数组就像一个宏 但编译后我明白它不是 然后我使用了 for each irq desc irq
  • 安装 python 模块时出错

    我正在尝试使用标准安装 python 模块python setup py install但我收到以下错误 我对 python 相当陌生 但过去我已经能够以这种方式安装其他模块 我对这个模块的印象setuptools不是我应该从我的 pyth
  • 将初始查询集限制为 django-rest 框架中分页中的对象

    我正在定义一个ModelViewSet using django rest framework 我需要覆盖默认查询集 以便在渲染响应之前对查询集对象执行一些处理 这个过程非常耗时 因此我只想在由于分页响应而实际可供消费者使用的对象上执行它
  • oracle 18中通过json_table解析json

    有一个请求例如 with j sJson as select ID 1444284517 ID ORD 4255 2187606199 Vals CODE ONB2B3BB8 DORD 25 04 2021 from dual select