Oracle中xmltype类型toObject函数用法实例

news/2024/11/6 14:47:54/

Oracle中xmltype类型toObject函数用法总结。

用法总结

xmltype是oracle中的type object类型。在实际使用中,可以当做xml对象来使用:

set serveroutput ondrop type person_typex;
create type person_typex is object (name varchar2(32),age number
);
/declarexmltype_var xmltype;person_obj person_typex;
beginxmltype_var := xmltype('<root><NAME>John Doe</NAME><AGE>30</AGE></root>');xmltype_var.toObject(person_obj);dbms_output.put_line(person_obj.name);dbms_output.put_line(person_obj.age);
end;
/

执行结果

John Doe
30PL/SQL procedure successfully completed.

toObject函数实际将xmltype类型变量中的值,输出到自定义类型中。

那么这里最关键的是如何将xml的字段 mapping 到自定义类型中。

ORACLE文档中描述的是:

在这里插入图片描述

那么如果不提供schema的话,cannonical映射规则到底如何?文档中没有进一步描述。

下面做一些验证,这里总结下:

  1. 首先,必须是合法的XML类型。
  2. xml中的每一列都必须匹配到自定义类型中。不允许出现多余的列、重复的列。
  3. 顺序不能乱,指的是xml中可以缺少一些字段,但字段的出现顺序必须和自定义类型一致。
    • 例如:<a123><NAME>John Doe</NAME><YEAR>30</YEAR></a123>
    • 自定类型:name varchar2(32), age number, year number 是可以匹配的。
    • 但如果:<a123><YEAR>30</YEAR><NAME>John Doe</NAME></a123> 是不能匹配的。

验证过程

位置不匹配?不支持;
多一列?不支持;
位置反了?不支持;

declarexmltype_var xmltype;person_obj person_typex;
beginxmltype_var := xmltype('<r1><NAME>John Doe</NAME><AA>a</AA><AGE>30</AGE></r1>');xmltype_var.toObject(person_obj);dbms_output.put_line(person_obj.name);dbms_output.put_line(person_obj.age);
end;
/

ORA-19031: XML element or attribute AA does not match any in type SYS.PERSON_TYPEX


缺后一列?支持;
缺前一列?支持;


set serveroutput on
declarexmltype_var xmltype;person_obj person_typex;
beginxmltype_var := xmltype('<r1><NAME>John Doe</NAME></r1>');xmltype_var.toObject(person_obj);dbms_output.put_line(person_obj.name);dbms_output.put_line(person_obj.age);
end;
/

数据类型不对?不支持

declarexmltype_var xmltype;person_obj person_typex;
beginxmltype_var := xmltype('<r1><NAME>John Doe</NAME><AGE>aaa</AGE></r1>');xmltype_var.toObject(person_obj);dbms_output.put_line(person_obj.name);dbms_output.put_line(person_obj.age);
end;
/

ORA-01722: invalid number


xml两层?不支持

declarexmltype_var xmltype;person_obj person_typex;
beginxmltype_var := xmltype('<outter><root><NAME>John Doe</NAME><AGE>30</AGE></root></outter');xmltype_var.toObject(person_obj);dbms_output.put_line(person_obj.name);dbms_output.put_line(person_obj.age);
end;
/

ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing


xml根节点是任意值?支持

declarexmltype_var xmltype;person_obj person_typex;
beginxmltype_var := xmltype('<a123><NAME>John Doe</NAME><AGE>30</AGE></a123>');xmltype_var.toObject(person_obj);dbms_output.put_line(person_obj.name);dbms_output.put_line(person_obj.age);
end;
/

PG联想

简化一下,输入为:

<a123><NAME>John Doe</NAME><YEAR>30</YEAR></a123>

输出元组

{NAME = 'John Doe', YEAR = 30}

在PostgreSQL中,使用xmltable函数可以实现类似效果:

select * from 
xmltable('/a123' passing '<a123><name>John Doe</name><YEAR>30</YEAR></a123>' columns name text, "YEAR" int
);

在这里插入图片描述


http://www.ppmy.cn/news/350644.html

相关文章

【redis-初级】redis安装

文章目录 1.非关系型数据库&#xff08;NoSQL&#xff09;2.在Linux上安装redis2.1 安装前准备2.2 安装2.3 启动2.4 关闭 3. redis客户端3.1 命令客户端3.2redis远程客户端3.3 redis编程客户端 1.非关系型数据库&#xff08;NoSQL&#xff09; 2.在Linux上安装redis 2.1 安装前…

背光补偿

背光补偿能提供在非常强的背景光线前面目标的理想的曝光&#xff0c;无论主要的目标移到中间、上下左右或者荧幕的任一位置。 背光补偿也称作逆光补偿或逆光补正&#xff0c;它可以有效补偿摄像机在逆光环境下拍摄时画面主体黑暗的缺陷。 当摄像机处于逆光环境中拍摄时&#…

boe背光驱动linux,[技术资料]Local Dimming LED TV 背光驱动整体方案

目前&#xff0c;液晶电视的使用越来越广泛&#xff0c;在人们的日常生活中占据越来越重要的位置&#xff0c;而其消耗的能量也越来越引起人们的关注。因此&#xff0c;各个电视、液晶厂商都投入极大的物力、人力、财力加大研发力量去降低功耗&#xff0c;从技术发展趋势上来说…

LCD背光控制芯片

PWM信号可通过调整占空比来调节输出电压&#xff0c;可以使用PWM来控制LCD的背光。 但CPU的pwm引脚驱动能力太弱&#xff0c;常外接一个背光芯片。rt9293就是这样的一个恒流升压转换器。 IledVref/Rset VfbDuty * 300mV (Duty是EN输入信号的占空比&#xff0c;300mV是内部参考电…

反射式液晶屏为什么在市面上很少见到了?

液晶屏随处可见&#xff0c;经过多年的发展&#xff0c;现在的显示技术已经非常成熟。 然而&#xff0c;液晶屏的发展也并非一帆风顺。 今天我们就来看看曾经火热的反射式液晶屏的兴衰。 目前我们常见的液晶屏本身是不发光的。 之所以能看到成像&#xff0c;是因为在液晶屏面板…

导光板背光种类有哪些?

导光板背光源目前按光源类型主要有EL、CCFL及LED三种背光源类型&#xff0c;依光源分布位置不同则分为侧光式和直下式&#xff08;底背光式&#xff09;。边光式。即将线形或点状光源设置在经过特殊设计的导光板的侧边做成的背光源。根据实际使用的需要&#xff0c;又可做成双边…

应用在液晶背光领域中的环境光传感芯片

背光显示是指当使用者使用电子设备时&#xff0c;机身上的显示屏能否发出背光&#xff0c;以便更清晰地显示内容。大部分的电子设备只要有显示屏&#xff0c;就有背光显示&#xff0c;只要有字幕显示&#xff0c;背光就算正常。背光显示技术已经开始应用在LED照明领域提供均匀的…

LCD液晶屏模块工作响应时间和背光寿命?

显示屏工作响应时间是多少&#xff1f;对于一些高清晰度的影像&#xff0c;通常是几毫秒&#xff0c;静态图像不需要普通图像显示屏: 时间为16-5ms左右。 响应时间通常以毫秒为单位&#xff0c;这是指液晶显示屏 对输入信号的响应速度。也就是说&#xff0c;液晶颗粒从暗到亮或…