沿用 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 抓取的数据如下