转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> 其他 >> 正文
DB2中結构化類型和類型化表的管理         ★★★★

DB2中結构化類型和類型化表的管理

作者:闵涛 文章来源:闵涛的学习笔记 点击数:604 更新时间:2009/4/22 23:21:35

           DB2中結构化類型和類型化表的管理

作者: CCBZZP
 
    使用結构化類型定義的表稱為類型化表,同樣使用結构化類型定義的視圖稱為類型化視圖,
一個結构化類型可以是另一個結构化類型(超類型)的子類型,子類型可以繼承超類型的所有屬
性,并且可以增加新的屬性,一個子類型也可以是其他結构類型的超類型,因此用戶可以運行子
類型和超類型去創建一個結构化類型的類型層次,下面介紹結构化類型和類型化表的管理.

1. 創建結构化類型
   CREATE TYPE語句可以創建結构化類型
   如:
   CREATE TYPE  TYPE_NEW AS
   (EMP_NO  VARCHAR(40)
    QTY_AGE  INTEGER)
   REF USING  INTEGER
   MODE DB2SQL;

2. 創建表并且引用這個新創建的類型
   CREATE TABLE EMPLOYEE OF TYPE_NEW
   (REF IS OID USER GENERATED);
   CREATE TABLE EMP OF EMP_T UNDER EMPLOYEE
   INHERIT SELECT PRIVILEGES;
   表中的列OID是對象標識符,每個類型化表中必須有OID列作為第一列的,OID列并且是唯一的.
   OID列的數据類型是REFERENCE.
   REF IS定義OID列的列名.
   USER GENERATED子語句表示每當插入新行時,該行的OID列的值由用戶決定,一旦插入成功,
   該列OID的數值就不在允許更新.
   INHERIT SELECT PRIVILEGES表示在超表中擁有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 ADD ATTRIBUTE TEL_NO CHAR(12);
   ALTER TYPE TYPE_NEW DROP ATTRIBUTE TEL_NO;
   注意:
   如果一個類型或它的子類型是一個已經存在的表的類型,則不能用ALTER TYPE來修改之.

5. 刪除類型化表
   用語句DROP TABLE HIERARCHY TABLE_NAME可以刪除類型化表
   用語句DROP VIEW  HIERARCHY VIEW_NAME可以刪除類型化視圖

6. 從類型化表中查詢
   查詢全部記錄
   SELECT *  FROM EMPLOYEE;
   只查詢表EMPLOYEE上的行,使用ONLY語句
   SELECT *  FROM ONLY(EMPLOYEE);
   不僅查詢指定表上的列,還要查詢該表的子表上的列,可以使用OUTER語句
   SELECT *  FROM OUTER(EMPLOYEE);

7. 更新類型化表中的記錄
   UPDATE EMPLOYEE SET QTY_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 (NAME CHAR(10),;OCATION CHAR(20))
    REF USING INTEGER MODE DB2SQL;
   CREATE TYPE EMP_T UNDER TYPE_NEW
    AS (SALARY INTEGER,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 OF DEPT_T(REF IS OID USER GENERATED);
   CREATE TABLE EMP OF EMP_T UNDER EMPLOYEE
   INHERIT SELECT PRIVILEGES
   (DEPTREF WITH OPTIONS SCOPE DEPT);

   DEPTREF WITH OPTIONS SCOPE DEPT表示DEPTREF列的數值指向DEPT表中的行
   SCOPE被稱為作用域,類型化表EMP引用領一個類型化表的引用列,這种關系在CREATE TABLE時稱為作用域.


11.解除引用操作符(DEREFERENCE OPERATOR)
   解除引用操作符(->)從有OID列匹配的行返回目標表或它的子表的命名列值.
   如:
   SELECT E.NAME FROM EMP E
   WHERE E.DEPTREF->LOCATION='AUSTN';
   上面的語句等价于
   SELECT E.NAME FROM EMP E,DEPT D
   WHERE E.DEPTREF=D.OID
   AND D.LOCATION='AUSTN';


12.類型化表和類型化視圖上的SQL函數
   DEREF(函數)
   返回變量的結构化類型.
  
   TYPE_ID(表達式)
   返回動態數据類型的內部類型標識符,它的變量必須是結构化類型.  
   如:
   SELECT TYPE_ID(DEREF(OID)),NAME FROM EMP;
  
   TYPE_NAME(表達式)
   返回動態數据類型的內部類型的絕對名,它的變量必須是結构化類型.  
   如:
   SELECT TYPE_NAME(DEREF(OID)),NAME,SALARY FROM EMP;
  
   TYPE_SCHEMA(表達式)
   返回動態數据類型的內部類型的模式名,它的變量必須是結构化類型.  
   如:
   SELECT TYPE_SCHEMA(DEREF(OID)),NAME,SALARY FROM EMP;

13.使用類型化表和視圖的注意事項
   在子表(主鍵OID從超表繼承)上不能創建主關鍵字
   在子表上不能創建唯一索引
   定義在表上的檢查約束自動應用到該表的所有子表上
   不支持LOAD命令
   不支持復制
   RUNSTATS,REORG和REORGCHK只在根表上執行

 


  

 

 


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台