设为首页 收藏本站
查看: 1082|回复: 0

[经验分享] DB2中结构化类型和类型化表的管理

[复制链接]

尚未签到

发表于 2016-11-17 08:26:09 | 显示全部楼层 |阅读模式
  DB2中结构化类型和类型化表的管理
 
   使用结构化类型定义的表称为类型化表,同样使用结构化类型定义的视图称为类型化视图,
一个结构化类型可以是另一个结构化类型(超类型)的子类型,子类型可以继承超类型的所有属
性,并且可以增加新的属性,一个子类型也可以是其它结构类型的超类型,因此用户可以运行子
类型和超类型去创建一个结构化类型的类型层次,下面介绍结构化类型和类型化表的管理.
1. 创建结构化类型
   CREATETYPE语句可以创建结构化类型
   如:
   CREATE TYPE TYPE_NEW AS
   (EMP_NO VARCHAR(40)
   QTY_AGE  INTEGER)
   REF USING INTEGER
   MODE DB2SQL;
2. 创建表并且引用这个新创建的类型
   CREATE TABLE EMPLOYEE OFTYPE_NEW
   (REF IS OID USERGENERATED);
   CREATE TABLE EMP OF EMP_TUNDER EMPLOYEE
   INHERIT SELECTPRIVILEGES;
  表中的列OID是对象标识符,每个类型化表中必须有OID列作为第一列的,OID列并且是唯一的.
  OID列的数据类型是REFERENCE.
   REF IS定义OID列的列名.
   USERGENERATED子语句表示每当插入新行时,该行的OID列的值由用户决定,一旦插入成功,
  该列OID的数值就不在允许更新.
   INHERIT SELECTPRIVILEGES表示在超表中拥有SELECT权限的任何用户或组在新建的子表中
   将被授予一个相同的权限.
3. 新建表EMPLOYEE进行插入数据
   INSERT INTO EMPLOYEE
   (OID,EMP_NO,QTY_AGE)
   VALUES
  (TYPE_NEW(1),'S1895',33);
  上面的例子中结构化类型TYPE_NEW用两个属性EMP_NO,QTY_AGE来定义的,然后在类型化表
  EMPLOYEE中使用该结构化类型TYP_NEW进行定义
4. 修改结构化类型
   ALTER TYPE语句可以增加或删除一个已经存在的结构化类型的属性
   如:
   ALTER TYPE TYPE_NEW ADDATTRIBUTE TEL_NO CHAR(12);
   ALTER TYPE TYPE_NEW DROPATTRIBUTE TEL_NO;
   注意:
  如果一个类型或它的子类型是一个已经存在的表的类型,则不能用ALTERTYPE来修改之.
5. 删除类型化表
   用语句DROP TABLE HIERARCHYTABLE_NAME可以删除类型化表
   用语句DROPVIEW  HIERARCHY VIEW_NAME可以删除类型化视图
6. 从类型化表中查询
   查询全部记录
   SELECT * FROM EMPLOYEE;
  只查询表EMPLOYEE上的行,使用ONLY语句
   SELECT * FROM ONLY(EMPLOYEE);
  不仅查询指定表上的列,还要查询该表的子表上的列,可以使用OUTER语句
   SELECT * FROM OUTER(EMPLOYEE);
7. 更新类型化表中的记录
   UPDATE EMPLOYEE SETQTY_AGE=40  WHERE OID=TYPE_NEW(2) ;
  强制转换函数TYPE_NEW将整数类型转换为REFERENCE类型
8. 删除类型化表中的记录  
   DELETE FROM TABLE;
  如果用户只删除特定类型表(不包括它的子表)中的行,可以使用ONLY语句
   DELETE FROM ONLY(TABLE);
9. 类型化表属性的查询
  SYSCAT.TABLES中的ROWTYPESCHEMA列和ROWTYPENAME列包含类型化表的信息.
  SYSCAT.DATATYPES可以查询每一个结构化类型.
  SYSCAT.HIERARCHIES包括子表和它的直接超表间的关系以及子类型和它的直接超类型间的关系.
  其中METATYPE列的包括对象的关系类型编码如下:
   R---结构化类型之间的关系
   U---类型化表间关系
   W---类型化视图间关系
10.引用列
  在类型化表定义中,用户可以将列定义为另一个类型化表的引用列.
  被引用的类型化表称为目标表
   如:
   CREATE TYPE DEPT_T AS (NAMECHAR(10),;OCATION CHAR(20))
    REF USINGINTEGER MODE DB2SQL;
   CREATE TYPE EMP_T UNDERTYPE_NEW
    AS (SALARYINTEGER,DEPTREF REF(DEPT_T)) MODE DB2SQL;
  EMP_T的定义中规定了两个属性,一个是INTEGER的SALARY,另一个是REFERENCE类型的DEPTREF,
  REF(DEPT_T)意味EMP_T类型的DEPTREF属性是引用类型的,并且引用目标是行类型DEPT_T或
  DEPT_T的子类型的表中的行.
  下面是创建基于上门的结构化类型的类型化表
   CREATE TABLE DEPT OFDEPT_T(REF IS OID USER GENERATED);
   CREATE TABLE EMP OF EMP_TUNDER EMPLOYEE
   INHERIT SELECTPRIVILEGES
   (DEPTREF WITH OPTIONS SCOPEDEPT);
   DEPTREF WITH OPTIONS SCOPEDEPT表示DEPTREF列的数值指向DEPT表中的行
  SCOPE被称为作用域,类型化表EMP引用领一个类型化表的引用列,这种关系在CREATETABLE时称为作用域.
  11.解除引用操作符(DEREFERENCEOPERATOR)
  解除引用操作符(->)从有OID列匹配的行返回目标表或它的子表的命名列值.
   如:
   SELECT E.NAME FROM EMP E
   WHEREE.DEPTREF->LOCATION='AUSTN';
   上面的语句等价于
   SELECT E.NAME FROM EMP E,DEPTD
   WHERE E.DEPTREF=D.OID
   ANDD.LOCATION='AUSTN';
  12.类型化表和类型化视图上的SQL函数
   DEREF(函数)
   返回变量的结构化类型.
  
   TYPE_ID(表达式)
  返回动态数据类型的内部类型标识符,它的变量必须是结构化类型.  
   如:
   SELECTTYPE_ID(DEREF(OID)),NAME FROM EMP;
  
   TYPE_NAME(表达式)
  返回动态数据类型的内部类型的绝对名,它的变量必须是结构化类型.  
   如:
   SELECTTYPE_NAME(DEREF(OID)),NAME,SALARY FROM EMP;
  
   TYPE_SCHEMA(表达式)
  返回动态数据类型的内部类型的模式名,它的变量必须是结构化类型.  
   如:
   SELECTTYPE_SCHEMA(DEREF(OID)),NAME,SALARY FROM EMP;
13.使用类型化表和视图的注意事项
  在子表(主键OID从超表继承)上不能创建主关键词
   在子表上不能创建唯一索引
  定义在表上的检查约束自动应用到该表的所有子表上
   不支持LOAD命令
   不支持复制
RUNSTATS,REORG和REORGCHK只在根表上執行

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-301400-1-1.html 上篇帖子: DB2 XML 编程,第 2 部分: 在应用程序体系结构中使用 XML 数据库支持 下篇帖子: 执行批处理时,DB2 报数据库的事务日志已满的错误,解决办法.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表