沿用 Oracle OCI操作UDT相关学习 一文中定义的类型和表。

1、更改数据

 

在sqldeveloper 中更新数据,

update dxl.cust set addr.street='a11' where addr.street ='aaa';
commit;

上边这个语句会报错,而如果采用下边这个语句操作则正确
update dxl.cust a set a.addr.street='a11' where a.addr.street ='aaa';
commit;

 

2、OCI 更改数据

 

同样的,如果在OCI中 SQL中的语句没有用别名来更新,会报错。

应该使用如下语句。

 

3 UTD 与 Logminer相关

3.1  insert 语句

 

insert into dxl.cust(id,addr) values(1, dxl.addr_type('aaa', 'b', 'c', 'd'));
commit;


由 logminer 抓取的结果如下

可以看到,col1 列就是 id; col2 列就是addr ; col3 列到col6 列都是addr下类型中个属性的值。这

这里 col2 只起到占位的作用(只有1个字节) 插入该列的数据为0。 可以参考 Oracle UDT有关数据字典的研究 一文中2.2 章节中的 addr列的属性。

3.2 update语句

 

update dxl.cust a set a.addr.street='a11' where a.addr.street ='aaa';
commit;

logminer 抓取的数据如下:

 

 

update dxl.cust a set a.id=234 where a.addr.street = 'a11';
commit;

logminer 抓取的数据如下

 

上边两个例子可以看到,如果不修改addr下的数据, col2 不会出现,如果涉及到修改addr下的列,则addr列(col2列)就会跟着一起更新。

3.3 delete 语句

 

delete dxl.cust a where a.addr.street = 'aaa';
commit;

logminer 抓取的数据如下

 

 

posted on 2017-03-02 13:47  dspeeding  阅读(438)  评论(0编辑  收藏  举报