DM7 SQL域

eric0435發表於2020-02-20

管理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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章