您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

南大通用GBase8s 常用SQL语句(九十一)

OF TYPE 子句

使用 OF TYPE 子句为对象关系数据库创建类型表。类型表是您将已命名的 ROW 数据类型指定到目标表。

OF TYPE 子句

 

元素

描述

限制

语法

row_type

该表所基于的 ROW 类型的名称

必须是在本地数据库中注册的已命名 ROW 数据类型

标识符

supertable

该表继承其属性的表名称

必须作为类型表存在

标识符

如果您使用 UNDER 子句,则 row_type 必须从 supertable 的 ROW 类型派生得到。类型层次结构必须已经存在,其中新表的已命名 ROW 类型是 supertable 的已命名 ROW 类型的子类型。

不规则行是来自表层次结构的一组行的集合,层次结构中的类型表的列数不固定。一些 API ,例如 GBase 8s ESQL/C 和 GBase 8s JDBC Driver,不支持返回 jagged 行的查询。

当创建类型表时,CREATE TABLE 不能为它的列指定名称,因为列名称在创建 ROW 类型时已经声明了。类型表的列对应于指定 ROW 类型的字段。ALTER TABLE 已经不能向类型表添加其它列。

例如,假设您创建一个指定的 ROW 类型 student_t 如下:

CREATE ROW TYPE student_t

          (name        VARCHAR(30),

          average     REAL,

          birthdate   DATETIME YEAR TO DAY);

如果在 OF TYPE 子句中为表指定 student_t 类型,则该表是一张类型表,该表的列与指定 ROW 类型 student_t 的字段名称和数据类型都相同(顺序也相同)。 例如,以下 CREATE TABLE 语句创建了一个类型是 student_t 的名为 students 的类型表:

CREATE TABLE students OF TYPE student_t;

students 表有以下列:

name      VARCHAR(30)

average   REAL

birthdate DATETIME YEAR TO DAY

有关指定 ROW 类型的更多信息,请参阅 CREATE ROW TYPE 语句 。

在类型表中使用大对象数据

如果您想要创建的表中包含大对象的列,则使用 BLOB 或 CLOB ,而不要使用 BYTE 或 TEXT 数据类型。为保持向后兼容性,您可以创建包含 BYTE 或 TEXT 字段的指定 ROW 类型,并使用该 ROW 类型将现有的(未归类的)表重新创建为类型表。尽管您可以使用包含 BYTE 或 TEXT 字段的指定 ROW 类型来创建类型表,但是这种 ROW 类型作为列是无效的。然而,可以在类型表和列中使用包含 BLOB 或 CLOB 字段的 ROW 类型。

使用 UNDER 子句

使用 UNDER 子句来指示继承(即,将表定义为子表)。子表从它上面的超级表那里继承属性。此外,您还可以为子表定义新属性。

继续 OF TYPE 子句中的示例,以下语句创建了一个类型表 grad_students ,它继承了 students 表的所有列,同时还有对应于 grad_student_t ROW 类型中字段的 adviser 和 field_of_study 这两列:

CREATE ROW TYPE grad_student_t

        (adviser        CHAR(25),

        field_of_study CHAR(40)) UNDER student_t;

        

CREATE TABLE grad_students OF TYPE grad_student_t  UNDER students;

使用 UNDER 子句时,子表将继承这些属性:

  1. 超级表中的所有列
  2. 超级表上定义的所有约束
  3. 超级表上定义的所有索引
  4. 超级表上定义的所有触发器
  5. 参照完整性约束
  6. 存取方法
  7. 存储方法(包含分片存储策略)

如果子表未定义分片,但它的超级表定义了分片,则该子表将继承超级表的分片。

提示: 当子表已经创建后,被添加到超级表的可继承属性将自动被现有子表继承。创建子表前不需要为超级表添加所有可继承的属性。

表层级结构上的限制

继承只在一个方向发生,即从超级表到子表。子表的属性将不被超级表继承。系统目录信息的这节列出继承的数据库对象,在系统目录中没有关于这些子表的信息。

表层次结构中不能有连个表具有相同的数据类型。例如,以下的代码示例的最后一行是无效的,因为表 tab2 和 tab3 不能有相同的行类型(rowtype2):

        create row type rowtype1 (...);

        create row type rowtype2 (...) under rowtype1;

        create table tab1 of type rowtype1;

        create table tab2 of type rowtype2 under tab1;

        create table tab3 of type rowtype2 under tab1; -- This is not valid.


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进