141.Oracle数据库SQL开发之 集合——使用映射方法比较嵌套表的内容
来源:互联网 发布:手机信号屏蔽器软件 编辑:程序博客网 时间:2024/06/06 00:45
141.Oracle数据库SQL开发之 集合——使用映射方法比较嵌套表的内容
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50180833
在满足下面3个条件时,两个嵌套表才相等:
n 两个嵌套表具有相同的类型
n 两个嵌套表具有相同的行数
n 两个嵌套表的所有元素的值都相同
下面创建一个类型t_address2,包含一个名为get_string的映射函数。
CREATETYPE t_address2 AS OBJECT (
streetVARCHAR2(15),
city VARCHAR2(15),
state CHAR(2),
zip VARCHAR2(5),
-- declarethe get_string() map function,
-- whichreturns a VARCHAR2 string
MAP MEMBER FUNCTION get_string RETURNVARCHAR2
);
/
CREATETYPE BODY t_address2 AS
-- define theget_string() map function
MAP MEMBER FUNCTION get_string RETURNVARCHAR2 IS
BEGIN
-- return aconcatenated string containing the
-- zip,state, city, and street attributes
RETURN zip|| ' ' || state || ' ' || city || ' ' || street;
ENDget_string;
END;
/
当比较t_address2对象,数据库会自动调用get_string.
例如下:
CREATE TYPE t_nested_table_address2 AS TABLE OFt_address2;
/
CREATETABLE customers_with_nested_table2 (
id INTEGER PRIMARY KEY,
first_nameVARCHAR2(10),
last_name VARCHAR2(10),
addresses t_nested_table_address2
)
NESTEDTABLE
addresses
STORE AS
nested_addresses2;
INSERTINTO customers_with_nested_table2 VALUES (
1, 'Steve','Brown',
t_nested_table_address2(
t_address2('2 State Street', 'Beantown', 'MA', '12345'),
t_address2('4 Hill Street', 'Lost Town', 'CA', '54321')
)
);
然后查询WHERE子句中包含一个嵌套表。
collection_user@PDB1> selectcn.id,cn.first_name,cn.last_name from customers_with_nested_table2 cn wherecn.addresses=
t_nested_table_address2(
t_address2('2 State Street','Beantown','MA','12345'),
t_address2('4 Hill Street','Lost Town','CA','54321'));
ID FIRST_NAME LAST_NAME
---------- ---------- ----------
1 Steve Brown
接下来查询,没有返回行,因为WHERE子句中等于号后面的单个地址只匹配cn.addresses中的一个地址。
collection_user@PDB1> selectcn.id,cn.first_name,cn.last_name from customers_with_nested_table2 cn wherecn.addresses=
t_nested_table_address2(
t_address2('4 Hill Street','Lost Town','CA','54321'))
no rows selected
在10g或更高版本中,使用SUBMULTISET操作符来检查一个嵌套表的内容是否为另一个嵌套表的子集。
如下:
collection_user@PDB1> select cn.id,cn.first_name,cn.last_namefrom customers_with_nested_table2 cn where t_nested_table_address2(
t_address2('4 Hill Street','Lost Town','CA','54321')) submultiset ofcn.addresses;
ID FIRST_NAME LAST_NAME
---------- ---------- ----------
1 Steve Brown
注意:变长数组的内容不能直接比较。
- 141.Oracle数据库SQL开发之 集合——使用映射方法比较嵌套表的内容
- 135.Oracle数据库SQL开发之 集合——使用集合类型定义表列
- 143.Oracle数据库SQL开发之 集合——在PLSQL中使用集合
- 145.Oracle数据库SQL开发之 集合——10g对集合的增强
- 54.Oracle数据库SQL开发之 高级查询——使用集合操作符
- 142.Oracle数据库SQL开发之 集合——使用CAST转换类型
- 161.Oracle数据库SQL开发之 SQL优化——比较执行查询的成本
- Oracle三种集合数据类型(索引表,嵌套表,VARRAY 数组)的比较-PLSQL—之三
- Oracle三种集合数据类型(索引表,嵌套表,VARRAY 数组)的比较-PLSQL—之三
- Oracle三种集合数据类型(索引表,嵌套表,VARRAY 数组)的比较-PLSQL—之三
- 52.Oracle数据库SQL开发之 子查询——编写嵌套子查询
- 134.Oracle数据库SQL开发之 集合——创建集合类型
- 136.Oracle数据库SQL开发之 集合——获取集合信息
- 137.Oracle数据库SQL开发之 集合——填充集合元素
- 138.Oracle数据库SQL开发之 集合——检索集合元素
- 139.Oracle数据库SQL开发之 集合——集合视为一系列
- 140.Oracle数据库SQL开发之 集合——更改集合元素
- 144.Oracle数据库SQL开发之 集合——多级集合类型
- 139.Oracle数据库SQL开发之 集合——集合视为一系列
- B树、B-树、B+树、B*树
- JAVA中Socket编程(二)---通过UDP协议实现通信
- 140.Oracle数据库SQL开发之 集合——更改集合元素
- 怎样有效减少用户咨询的客服成本
- 141.Oracle数据库SQL开发之 集合——使用映射方法比较嵌套表的内容
- Android开发笔记(十一)自定义视图的构造方法
- cakephp开发记录(一)
- dot(.) is a synonym of `source`
- 142.Oracle数据库SQL开发之 集合——使用CAST转换类型
- R语言数据处理(二)字符分隔
- 21_Java 异常处理
- Redhat 安装&配置 MySQL
- UML总结(对九种图的认识和如何使用Rational Rose 画图)