DB2 基础: 结构化数据类型和类型化表简介
2010-07-20 00:00:00 来源:WEB开发网Salesperson_t 和 Engineer_t 是在 Emp_t 之下创建的子类型,Emp_t 是它们的超类型。这些子类型的定义包括不属于 Emp_t 类型的其他属性,但那就是这些子类型与它们的超类型的不同之处;属性是超类型定义的一部分,不过,也可以被其子类型所继承。
已经创建了所需的结构化类型,现在我们就可以创建基于这些类型(清单 3)的类型化表。小型表层次结构的超表称为 EMP。在富有想象力的创造中,我们命名了对象标识符列 OID,并指定它的值由用户生成。插入一个 OID 列的值之后,该值就无法再修改。INHERIT SELECT PRIVILEGES 子句指定,在超表上保留了SELECT 权限的用户或组都将获准在新表上拥有同等的权限。
我们现在准备把数据插入到 ENGINEER 和 SALESPERSON 表中。两个例子中 INSERT 语句的 VALUES 子句包括了对 address_t()的调用,像先前的例子一样,它为 address_t 结构化类型调用了构造函数,创建了一个所有属性值都为空的类型实例。双点运算符调用了 mutator 方法来设置每个地址属性的值。VALUES 子句还为用户指定的 OID 列的值包括了一个 casting 函数,因为该值必须强制转换成目标表的 REFERENCE 类型。默认情况下,casting 函数的名称和结构化类型的名称相同(在这里,这两个名称分别是 Engineer_t 和 Salesperson_t)。
针对层次结构中的三个表执行的查询表明,ENGINEER 和 SALESPERSON 子表已经继承了其超表(EMP)的列,其中包括对象标识符列(OID)。
清单 3. 类型化表层次结构,演示层次结构
connect to sample
...
create type emp_t as (empno integer, lname varchar(12), fname varchar(12),
deptno char(4), salary decimal(7,2), address address_t) ref using integer mode db2sql
create type salesperson_t under emp_t as (commission decimal(7,2)) mode db2sql
create type engineer_t under emp_t as (perf_bonus decimal(7,2),
recog_award decimal(7,2)) mode db2sql
create table emp of emp_t (ref is oid user generated)
create table salesperson of salesperson_t under emp inherit select privileges
create table engineer of engineer_t under emp inherit select privileges
insert into engineer (oid, empno, lname, fname, deptno, salary,
perf_bonus, recog_award, address) values (engineer_t(1), 42, 'Kidman', 'Jennifer',
'Z004', 65000.00, 4000.00, 2000.00, address_t() ..street('7 Dorval Rd')
..city('Markham') ..province('Ontario') ..postal_code('L6G2R1'))
insert into salesperson (oid, empno, lname, fname, deptno, salary, commission, address)
values (salesperson_t(2), 69, 'Theron', 'Maggie', 'C012', 49000.00, 15000.00,
address_t() ..street('7 River St') ..city('Ottawa') ..province('Ontario')
..postal_code('K9G6R2'))
select * from emp
OID EMPNO LNAME FNAME DEPTNO SALARY ADDRESS
----------- ----------- ------------ ------------ ------ --------- --------------------
1 42 Kidman Jennifer Z004 65000.00 7 Dorval Rd, Mark...
2 69 Theron Maggie C012 49000.00 7 River St, Ottaw...
2 record(s) selected.
select oid, empno, lname, deptno, salary, perf_bonus, recog_award, address from engineer
OID EMPNO LNAME DEPTNO SALARY PERF_BONUS RECOG_AWARD ADDRESS
----------- ----------- ------------ ------ --------- ---------- ----------- ----------
1 42 Kidman Z004 65000.00 4000.00 2000.00 7 Dorva...
1 record(s) selected.
select oid, empno, lname, deptno, salary, commission, address from salesperson
OID EMPNO LNAME DEPTNO SALARY COMMISSION ADDRESS
----------- ----------- ------------ ------ --------- ---------- ----------------------
2 69 Theron C012 49000.00 15000.00 7 River St, Ottawa,...
1 record(s) selected.
connect reset
结束语
我们已经看到,用户定义的结构化数据类型是表示结构化(非原子的)数据的一种有效方法,这些数据需要作为单独的数据元素或一个独立的单元进行处理,这主要取决于应用程序。这个话题很广泛,并且可能很复杂。本文向您介绍了结构化数据类型、类型层次结构和类型化表的基本概念,这些概念都通过实际例子得以阐明,您可以立刻使用和运行这些例子。
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››db2 命令选项解释
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
- ››DB2 XML 编程,第 1 部分: 理解 XML 数据模型
- ››DB2 pureScale 实战
更多精彩
赞助商链接