Oracle9i release1 提供了很多有用的,预定义的类型。
类型 描述
xmltype 存储和操作xml数据
多种uri类型 使用这些存储和处理uri(全球统一资源定位),
如根据html 地址获得web 页面
多种any类型 用来定义xml变量并且处理各种类型
都是sys 用户创建的,创建这些类型的脚本:$ORACLE_HOME/rdbms/admin
13.5.1 xmltype
Oracle 9i release1 引入了对象类型xmltype。在oracle 9i release1 中使用xmltype必须加
前缀sys。在oracle 9i release2 之后不需要。
要使用xmltype必须要了解两件事请:
1. 它是一个oracle内置的对象类型。可以用在table的列上,也可以在plsql中作为变量的
类型来使用。
2. xquery,oracle查找和建立xml 文档的语言。在oracle 10g release2。
当然,我们还需要对xml 很熟悉,如基本概念,xpath等。
/**
使用和操作xmltype
**/
create table falls(
fall_id number,
fall xmltype
);
--使用xmltype的静态方法createxml插入xml数据
INSERT INTO falls VALUES (1, XMLType.CreateXML(
'<?xml version="1.0"?>
Munising Falls
Alger
MI
http://michiganwaterfalls.com/munising_falls/munising_falls.html
'));
INSERT INTO falls VALUES (2, XMLType.CreateXML(
'<?xml version="1.0"?>
Au Train Falls
Alger
MI
http://michiganwaterfalls.com/autrain_falls/autrain_falls.html
'));
INSERT INTO falls VALUES (3, XMLType.CreateXML(
'<?xml version="1.0"?>
Laughing Whitefish Falls
Alger
MI
'));
类型xmltype中内置了很多静态方法可以用来操作xml,具体地可以在plsqldeveloper中的
type栏目中查找xmltype。
插入的时候调用xmltype的createxml方法。下面的是静态方法existsNode的两种用法。
select fall_id from falls f where f.fall.existsNode('/fall/url')>0;--存在fall/url
select fall_id from falls where existsNode(fall,'/fall/url')>0;--fall列中存在fall下面有url的
在plsql中使用,并获得指定字符,采用静态方法extract:
--在plqldev中运行报错,在sqlplus中正确
<>
DECLARE
fall XMLType;
url VARCHAR2(100);
BEGIN
--将xml查询出来放入变量中
SELECT fall INTO demo_block.fall
FROM falls f
WHERE f.fall_id = 1;
--抽取xml文档,并获得指定字符
url := fall.extract('/fall/url/text( )').getStringVal;
DBMS_OUTPUT.PUT_LINE(url);
END;
注:fall.extract('/fall/url/text( )').getStringVal 调用静态方法extract提取相应数据,也就是
提供根目录下的url子目录下的文本,text()指url的体部文本。geteStringVal是文本的值。
select Upper(Xmltype.getStringVal(xmltype.extract(fall,'/fall/url/text()'))) from falls
where existsNode(fall,'/fall/url')>0;
上面的是将查询出来的html 地址变为大写。更多请参考具体资料和类型定义。
13.5.2 URI types
Uri类型是专门存储和处理uri(全球统一资源定位)的,如http地址。那么有三种子类型:
HttpuriType:和http相关的uri,如指向一个web 页面。(根据uri得到整个web 页面)
dburiType:支持具有xpath表达式的url
XdburiType:支持url和引用oracle xml db对象。Xml db对象是oracle内置的xml技术的集
合。
在oracle 9i release1 中需要指定前缀sys,在oracle 9i release2 中不需要。
-- user uritype
DECLARE
WebPageURL HttpUriType;
WebPage CLOB;
BEGIN
--建立一个uritype的实例,调用静态方法createuri,根据传入的uri获得整个页面,这样就获得了整个
www.163.com的页面
WebPageURL := HttpUriType.createUri(
'http://www.163.com');
--获得web页面的clob
WebPage := WebPageURL.getclob( );
--显示web页面中的指定字符
DBMS_OUTPUT.PUT_LINE((SUBSTR(WebPage,1,500)));
END;
结果是:
/p>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
网易