免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 998 | 回复: 0
打印 上一主题 下一主题

oracle 自定义类型研究 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:43 |只看该作者 |倒序浏览
一.自定义数组类型
语法:create type [myarray] as varray(数组长度) of varchar2(长度);

create type myarray as varray(10) of varchar2(10);
create table mytable(id number(10), course myarray);

insert into mytable values(1,myarray('java','oracle'));
insert into mytable values(2,myarray('java','oracle','db'));
insert into mytable values(3,myarray('java','oracle','db','c'));
commit;

dump redofile
1.
col  0: [ 2]  c1 02
col  1: [19]  88 01 13 01 01 00 02 04 6a 61 76 61 06 6f 72 61 63 6c 65
2.
col  0: [ 2]  c1 03
col  1: [22]
 88 01 16 01 01 00 03 04 6a 61 76 61 06 6f 72 61 63 6c 65 02 64 62
3.
col  0: [ 2]  c1 04
col  1: [24]
 88 01 18 01 01 00 04 04 6a 61 76 61 06 6f 72 61 63 6c 65 02 64 62 01 63

说明自定义的数组类型 还是会放在一个col里,
88 01
13 col长度
01 01 
00 02 数组长度
04 第一个数组成员长度
6a 61 76 61 第一个数组成员内容
06 第二个数组成员长度
6f 72 61 63 6c 65 第二个数组成员内容

上面的例子里varrary的长度是10,当我把长度设为254时:
如:create type myarray2 as varray(254) of number(10);
insert into mytable values(1,myarray(111,222));
insert into mytable values(2,myarray(111,222,333));
insert into mytable values(3,myarray(111,222,333,444));
插入3行,commit.
观察dump datafile结果:
00 01 00 00 00 00 00 01 00 00 00 19 56 8f 00 1f 09 00 00 00 00 00 00 0f 00
00 00 00 00 01 88 01 0f 01 01 00 02 03 c2 02 0c 03 c2 03 17

00 01 00 00 00 00 00 01 00 00 00 19 56 90 00 23 09 00 00 00 00 00 00 13 00
00 00 00 00 01 88 01 13 01 01 00 03 03 c2 02 0c 03 c2 03 17 03 c2 04 22

00 01 00 00 00 00 00 01 00 00 00 19 56 91 00 27 09 00 00 00 00 00 00 17 00
00 00 00 00 01 88 01 17 01 01 00 04 03 c2 02 0c 03 c2 03 17 03 c2 04 22 03
c2 05 2d

88 01从第31个字节开始,第33个字节是数据长度,第37个字节是有多少个成员。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP