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

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
H
Heimdal Security Blog
Jina AI
Jina AI
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
C
Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Hacker News
The Hacker News
The Cloudflare Blog
Hugging Face - Blog
Hugging Face - Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
S
Securelist
P
Privacy International News Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 聂微东
博客园 - 叶小钗
J
Java Code Geeks
V
V2EX
博客园 - Franky
Spread Privacy
Spread Privacy
K
Kaspersky official blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Simon Willison's Weblog
Simon Willison's Weblog
Project Zero
Project Zero
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
C
Cybersecurity and Infrastructure Security Agency CISA
C
CERT Recently Published Vulnerability Notes
Latest news
Latest news
NISL@THU
NISL@THU
罗磊的独立博客
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园_首页
V
Visual Studio Blog

博客园 - _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