ITPub博客

首页 > 数据库 > 国内数据库 > DM7 SQL域

DM7 SQL域

原创 国内数据库 作者:eric0435 时间:2020-02-20 12:27:12 0 删除 编辑

管理SQL域
为了支持SQL标准中的域对象定义与使用,DM支持DOMAIN的创建、删除以及授权DDL语句,并支持在表定义中使用DOMAIN。域(DOMAIN)是一个可允许值的集合。域在模式中定义,并由< 域名>标识。域是用来约束由各种操作存储于基表中某列的有效值集。域定义说明一种数据类型,它也能进一步说明约束域的有效值的< 域约束>,还可说明一个< 缺省子句>,该子句规定没有显式指定值时所要用的值或列的缺省值。

创建DOMAIN
CREATE DOMAIN 创建一个新的数据域。定义域的用户成为其所有者。DOMAIN为模式类型对象,其名称在模式内唯一。

举例说明

SQL> CREATE DOMAIN DA INT CHECK (VALUE < 100); executed successfully used time: 11.754(ms). Execute id is 148. SQL> select name,id from sysobjects where name='DA';
LINEID     NAME ID         
---------- ---- -----------
1          DA   419430401
used time: 0.945(ms). Execute id is 149.

使用 DOMAIN
在表定义语句中,支持为表列声明使用域。如果列声明的类型定义使用域引用,则此列定义直接继承域中的数据类型、缺省值以及CHECK 约束。如果列定义使用域,然后又自己定义了缺省值,则最终使用自己定义的缺省值。用户可以使用自己的域。如果要使用其它用户的域,则必须被授予了该域的USAGE 权限。DBA 角色默认拥有此权限。
例如在 T 表中使用上面创建的域DA。

SQL> CREATE TABLE T(ID DA);
executed successfully
used time: 12.655(ms). Execute id is 149.
SQL> select name,id from sysobjects where name='T';
LINEID     NAME ID         
---------- ---- -----------
1          T    1540
used time: 1.255(ms). Execute id is 157.
SQL> select * from syscolumns where id=1540;
LINEID     NAME ID          COLID       TYPE$   LENGTH$     SCALE       NULLABLE$ DEFVAL INFO1       INFO2      
---------- ---- ----------- ----------- ------- ----------- ----------- --------- ------ ----------- -----------
1          ID   1540        0           INTEGER 4           0           Y         NULL   0           0
used time: 1.249(ms). Execute id is 158.
SQL> insert into t values(1);   
affect rows 1
used time: 1.180(ms). Execute id is 160.
SQL> insert into t values(100);
insert into t values(100);
[-6604]:Violate check constraint of [CONS134218952].
used time: 1.176(ms). Execute id is 0.

列定义虽然使用了域后,其SYSCOLUMNS 系统表中类型相关字段记录域定义的数据类型。也就是说,从SYSCOLUMNS 系统表中不会表现出对域的引用。使用某个域的用户必须具有该域的USAGE DOMAIN 或USAGE ANY DOMAIN 权限。

删除DOMAIN
删除一个用户定义的域。用户可以删除自己拥有的域,具有DROP ANY TABLE系统权限的用户则可以删除任意模式下的域。RESTRICT表示仅当DOMAIN未被表列使用时才可以被删除; CASCADE表示级联删除。
例如:

SQL> DROP DOMAIN DA CASCADE;
executed successfully
used time: 29.834(ms). Execute id is 163.


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26015009/viewspace-2676362/,如需转载,请注明出处,否则将追究法律责任。

上一篇: DM7 数组索引
请登录后发表评论 登录
全部评论
系统架构师 Oracle ACE

注册时间:2011-10-12

  • 博文量
    574
  • 访问量
    6251664