SQL高级使用,提取字段、获取JSON、解析XML

SQL高级使用,提取字段、获取JSON、解析XML

提取表中所有字段,返回clob类型数据

在这里插入图片描述

-- 提前表中所有的字段
-- SEQ,CHT_ID,DATESEQ,SOURCE,STATUS,I_HIS_CUST_TYPE...
SELECT WM_CONCAT(COLUMN_NAME) COL_NM
  FROM (SELECT *
          FROM USER_TAB_COLUMNS
         WHERE TABLE_NAME = UPPER('表名')
         ORDER BY COLUMN_ID);

提取表中所有字段,并将字段拼接成JSON串

在这里插入图片描述

-- 将表中的所有字段拼接成JSON串
-- {"SEQ":"SEQ","CHT_ID":"CHT_ID..."}
SELECT '{' || WM_CONCAT('"' || COLUMN_NAME || '":"'|| COLUMN_NAME || '"') || '}' COL_NM
  FROM (SELECT *
          FROM USER_TAB_COLUMNS
         WHERE TABLE_NAME = UPPER('表名')
         ORDER BY COLUMN_ID);

将表中的所有字段拼接成指定类型的JSON串

-- 将表中的所有字段拼接成指定类型的JSON串
-- {"SEQ":"'||V_AMP.SEQ||'","CHT_ID":"'||V_AMP.CHT_ID||...'"}
SELECT '{' || WM_CONCAT('"' || COLUMN_NAME || '":"''||V_AMP.' || COLUMN_NAME || '||''"') || '}' COL_NM
  FROM (SELECT *
          FROM USER_TAB_COLUMNS
         WHERE TABLE_NAME = UPPER('表名')
         ORDER BY COLUMN_ID);

检查查看JSON串,看SQL是否出错

-- 检查查看JSON串
SELECT TO_CLOB('{"ampTraceId":"V_AMP.I_AMP_TRACE_ID", "traceId":"V_AMP.I_TRACE_ID",
              "orgTraceNo":"V_AMP.I_ORG_TRACE_NO", "orgCode":"V_AMP.I_ORG_CODE",
              "subOrgCode":"V_AMP.I_SUB_ORG_CODE", "refundReason":"V_AMP.I_REFUND_REASON",
              "refundAmount":"V_AMP.I_REFUND_AMOUNT", "refundType":"V_AMP.I_REFUND_TYPE",
              "outRefundNo":"V_AMP.I_OUT_REFUND_NO", "orgRefundSn":"V_AMP.I_ORG_REFUND_SN"}') json FROM dual   T ; 

SQL解析XML数据

在这里插入图片描述

<o> <!-- 一级父节点 -->
   <code>200</code> <!-- 二级子节点 -->
   <message>success</message> <!-- 二级子节点 -->
   <data> <!-- 二级子节点节点 -->
       <digest>200</digest> <!-- 三级子节点 -->
       <downloadUrl>2022</downloadUrl> <!-- 三级子节点 -->
       <digestType>7</digestType> <!-- 三级子节点 -->
       <billType>21</billType> <!-- 三级子节点 -->
   </data>
 </o>

SQL语句解析XML数据,获取XML中的指定值

SELECT A.*
  FROM DUAL,
       XMLTABLE('$A/o' PASSING XMLTYPE(
       'XML格式数据') AS A COLUMNS ---指定列名称
                 CODE VARCHAR2(20) PATH '/xml父节点/xml节点',
                 MSG VARCHAR2(500) PATH '/xml父节点/xml节点',
                 DIGEST VARCHAR2(40) PATH '/xml父节点/xml层级/xml节点',
                 DOWNLOADURL VARCHAR2(40) PATH '/xml父节点/xml层级/xml节点',
                 DIGESTTYPE VARCHAR2(40) PATH '/xml父节点/xml层级/xml节点',
                 BILLTYPE VARCHAR2(40) PATH '/xml父节点/xml层级/xml节点') A;

完整SQL数据示例

-- 提前表中所有的字段
-- SEQ,CHT_ID,DATESEQ,SOURCE,STATUS,I_HIS_CUST_TYPE...
SELECT WM_CONCAT(COLUMN_NAME) COL_NM
  FROM (SELECT *
          FROM USER_TAB_COLUMNS
         WHERE TABLE_NAME = UPPER('表名')
         ORDER BY COLUMN_ID);


-- 将表中的所有字段拼接成JSON串
-- {"SEQ":"SEQ","CHT_ID":"CHT_ID..."}
SELECT '{' || WM_CONCAT('"' || COLUMN_NAME || '":"'|| COLUMN_NAME || '"') || '}' COL_NM
  FROM (SELECT *
          FROM USER_TAB_COLUMNS
         WHERE TABLE_NAME = UPPER('表名')
         ORDER BY COLUMN_ID);


-- 将表中的所有字段拼接成指定类型的JSON串
-- {"SEQ":"'||V_AMP.SEQ||'","CHT_ID":"'||V_AMP.CHT_ID||...'"}
SELECT '{' || WM_CONCAT('"' || COLUMN_NAME || '":"''||V_AMP.' || COLUMN_NAME || '||''"') || '}' COL_NM
  FROM (SELECT *
          FROM USER_TAB_COLUMNS
         WHERE TABLE_NAME = UPPER('表名')
         ORDER BY COLUMN_ID);


-- 检查查看JSON串
SELECT TO_CLOB('{"ampTraceId":"V_AMP.I_AMP_TRACE_ID", "traceId":"V_AMP.I_TRACE_ID",
              "orgTraceNo":"V_AMP.I_ORG_TRACE_NO", "orgCode":"V_AMP.I_ORG_CODE",
              "subOrgCode":"V_AMP.I_SUB_ORG_CODE", "refundReason":"V_AMP.I_REFUND_REASON",
              "refundAmount":"V_AMP.I_REFUND_AMOUNT", "refundType":"V_AMP.I_REFUND_TYPE",
              "outRefundNo":"V_AMP.I_OUT_REFUND_NO", "orgRefundSn":"V_AMP.I_ORG_REFUND_SN"}') json FROM dual   T ; 


-- SQL语句解析XML数据
SELECT A.*
  FROM DUAL,
       XMLTABLE('$A/o' PASSING XMLTYPE(
       '<o>
          <code>200</code>
          <message>success</message>
          <data>
              <digest>200</digest>
              <downloadUrl>2022</downloadUrl>
              <digestType>7</digestType>
              <billType>21</billType>
          </data>
        </o>') AS A COLUMNS ---指定列名称
                 CODE VARCHAR2(20) PATH '/o/code',
                 MSG VARCHAR2(500) PATH '/o/message',
                 DIGEST VARCHAR2(40) PATH '/o/data/digest',
                 DOWNLOADURL VARCHAR2(40) PATH '/o/data/downloadUrl',
                 DIGESTTYPE VARCHAR2(40) PATH '/o/data/digestType',
                 BILLTYPE VARCHAR2(40) PATH '/o/data/billType') A;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JSON是一种轻量级的数据交换格式,在现代的Web开发中,它被广泛应用。由于其简单、灵活和可读性强等特点,JSON已经成为了比XML更受欢迎的数据交换格式。SQL语言是关系型数据库的标准查询语言之一,它可以用于访问和管理关系型数据库中的数据。如果我们想要从包含JSON数据的列中检索数据并在关系型数据库中进行分析和查询,这时候就需要使用SQL解析JSON的功能了。 SQL解析JSON需要使用到一些特殊的函数和操作符。其中,最常用的函数是JSON_VALUE函数。该函数接受两个参数:第一个是包含JSON数据的列,第二个是需要解析JSON值的路径。例如,使用以下SQL语句可以查询一列名为"json_data"的表中的"name"字段的值: SELECT JSON_VALUE(json_data, '$.name') FROM table; 在这个例子中,$表示JSON数据的根节点,"."后面是需要解析的值的路径。 另一个常用的函数是JSON_QUERY函数。它用于检索符合特定条件的JSON数据。例如,以下SQL语句将检索出一个表格中包含"name"字段并且"name"的值等于"John"的所有行: SELECT * FROM table WHERE JSON_VALUE(json_data, '$.name') = 'John'; 除了JSON_VALUE和JSON_QUERY函数之外,SQL还提供了其他一些用于解析JSON数据的函数和操作符,例如JSON_MODIFY、JSON_UNQUOTE、JSON_ARRAY等。这些函数和操作符可以使我们对包含JSON数据的列进行更复杂的查询和分析。 总而言之,SQL解析JSON可以让我们方便地从包含JSON数据的列中检索数据并进行分析和查询,而且SQL语言中关于JSON的函数和操作符也相当的强大和灵活,使得我们可以更加方便地进行一些复杂的数据处理和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值