Oracle除了预定义类型之外,还可以自定义类型,根据需求用户可以自己定义记录数据类型(Record)和记录表类型(Table),其中记录数据类型Record存储是一条记录,记录表类型Table用来存储多条记录。如果记录数据类型Record是一维数组的话,记录表类型Table就是二维数组。Oracle中的自定义数据类型,如嵌套表,既可在PL/SQL中使用也可用作表的一列,比如我们用以下定义:
create or replace type kktype as object (kk1 varchar2(10),kk2 number);
定义一名为kktype的自定义类型。
create table test3(aa1 number,aa2 kktype);
建表,含自定义类型kktype;
在PL/SQL Developer中编辑数据,可在窗格中看到aa1,aa1.kk1,aa1.kk2三列,可输入数据。但如何查询数据呢?
select * from test3;
将显示如上3列。正常。
select aa1 from test3;
将显示两列,也正常。
select aa1.kk1 from test3;
此时肯定出错。正确的访问方式是使用表的别名:
select t.aa1.kk1 from test3 t;
原因为何,不明。同样,在insert时,似乎无法插入自定义数据类型的单元素。必须将自定义类型整体插入。
insert into test3(aa2) values(kktype('sssss',33));
由于可用别名,所以update语句可以更新自定义类型的子元素。
update test3 t set t.aa2.kk1='ffffffff' where t.aa1=33;
原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/351.html