惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

I
InfoQ
C
CERT Recently Published Vulnerability Notes
The Last Watchdog
The Last Watchdog
P
Proofpoint News Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
GbyAI
GbyAI
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
P
Privacy & Cybersecurity Law Blog
Simon Willison's Weblog
Simon Willison's Weblog
Jina AI
Jina AI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
博客园_首页
F
Fortinet All Blogs
博客园 - Franky
Latest news
Latest news
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
U
Unit 42
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Hugging Face - Blog
Hugging Face - Blog
D
Docker
Project Zero
Project Zero
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
F
Full Disclosure
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
Cisco Talos Blog
Cisco Talos Blog
Y
Y Combinator Blog
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
H
Help Net Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Blog — PlanetScale
Blog — PlanetScale
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Schneier on Security
C
Cybersecurity and Infrastructure Security Agency CISA
P
Proofpoint News Feed
PCI Perspectives
PCI Perspectives
Cloudbric
Cloudbric
V
Visual Studio Blog
Recorded Future
Recorded Future
人人都是产品经理
人人都是产品经理

博客园 - _herbert

小程序拍证件并局部裁剪 信创-为什么ORACLE使用JDBC查询SYSDATE时,RS.getDate能获取到时间部分? linux宝塔面板使用API自动部署更新文件 JSON JAVA找出哪个类import了不存在的类 LocalDate,LocalDateTime,Date,日期串相互转换 PostMan加载三方JS PostMan内置对象 微信支付集成_JSAPI VUE中使用AXIOS包装API代理 spring中el表达式安全和扩展 Spring使用el表达式 springboot中File默认路径 Springboot启动时记录进程ID ORACLE解析游标生成JSON AI教我一条SQL实现明细转树形结构 Springboot构建包使用BOOT-INF中的class覆盖依赖包中的class Maven 构建知识库 MAVEN构建分离依赖JAR JAVA实现读取最后几行日志 信创-ORACLE迁移到KingbaseV9 信创-ORACLE迁移到DM8 sql分组 group by rollup,cube,grouping sets,group_id,groupingId
ORACLE游标序列化
_herbert · 2025-11-07 · via 博客园 - _herbert

ORACLE游标序列化

ORACLE中可以直接调用接口,需要把数据构造成xml格式,方便请求参数构造.比如在使用select utl_http.request('http://www.baidu.com') from dual可以访问百度页面

1. 使用DBMS_XMLGEN序列化

declare
  ctx DBMS_XMLGEN.CTXHANDLE;
  c_result CLOB;
  v_source SYS_REFCURSOR; 
BEGIN
  OPEN v_source FOR 
  select '小游戏1' F_A,'地心侠士' F_B from dual
  union all
  select '小游戏2','地心侠士' from dual;
  ctx := DBMS_XMLGEN.newcontext(v_source);
  -- 20251107 公众号 小满小慢
  -- 设置顶层节点,可以使用默认值(不设置默认 ROWSET 和 ROW)
  DBMS_XMLGEN.setrowsettag(ctx, 'EMPLOYEES'); 
  DBMS_XMLGEN.setrowtag(ctx, 'EMPLOYEE'); 
  c_result := DBMS_XMLGEN.getxml(ctx);
  DBMS_OUTPUT.PUT_LINE(SUBSTR(c_result, 1, 2000)); 
  DBMS_XMLGEN.closecontext(ctx);
  CLOSE v_source;
END xml_print;

返回结果,注意顶层节点为EMPLOYEES,行节点为EMPLOYEE

<?xml version="1.0"?>
<EMPLOYEES>
 <EMPLOYEE>
  <F_A>小游戏1</F_A>
  <F_B>地心侠士</F_B>
 </EMPLOYEE>
 <EMPLOYEE>
  <F_A>小游戏2</F_A>
  <F_B>地心侠士</F_B>
 </EMPLOYEE>
</EMPLOYEES>

2.使用xmltype序列化

declare
  x       xmltype;
  ref_cur SYS_REFCURSOR;
begin
  OPEN ref_cur FOR
    select 'a1' F_A, 'b1' F_B from dual
    union all
    select 'a2', 'b2' from dual;
  x := xmltype(ref_cur);
  Dbms_Output.put_line(x.getClobVal());
end;

返回结果

<?xml version="1.0"?>
<ROWSET>
 <ROW>
  <F_A>a1</F_A>
  <F_B>b1</F_B>
 </ROW>
 <ROW>
  <F_A>a2</F_A>
  <F_B>b2</F_B>
 </ROW>
</ROWSET>

3. 序列化JSON

目前没有找到游标直接转换JSON的的实现方式,如果要实现动态列,目前可行的方案.如果有大牛实现了,可否告知分享下

-- 20251107 herbert
with t as( 
  select 'a1' F_A,'b1' F_B from dual
  union all
  select 'a2','b2' from dual)
  SELECT JSON_ARRAYAGG(
         JSON_OBJECT(
           'F_A' VALUE F_A,
           'F_B' VALUE F_B)
         )
        AS employees_json
FROM t;

原文地址: https://mp.weixin.qq.com/s/VdPF8p-sNT9--thfP9GLVg