首页 > 数据库 > 国内数据库 > GBase8s 虚拟列详解(二)
五、 虚拟列约束和索引
基于虚拟列创建约束和索引, GBase 8s 和 Oracle 的支持情况如下表所示:
|
|
GBase 8s |
ORACLE |
|
主键 |
N |
Y |
|
外键 |
N |
Y |
|
NOT NULL/NULL |
Y |
Y |
|
CHECK |
Y |
Y |
|
UNIQUE/DISTINCT |
N |
Y |
|
索引 |
只支持函数索引。 其它索引创建成功,但不生效。 |
Y |
注: NOT NULL 约束只能在 create table 定义虚拟列时指定,不支持 alter modify not null
六、 虚拟列 DML 、 DQL
1. DML
不允许对虚拟列执行 INSERT 操作;
不允许在虚拟列上执行 UPDATE 语句;
支持在 UPDATE/DELETE 的 WHERE 语句中使用虚拟列;
支持 insert into t1 select * from t2
2. DQL :
不支持在 group by 子句后使用。其余查询语法都支持。
七、 不同类型对象的使用
支持在普通表、视图、 RAW 表、分片表、 ROW TYPE 表使用虚拟列;
不支持在临时表以及外部表中使用虚拟列;
不支持作为哈希分区表的分区字段
支持在存储过程、包、触发器中使用虚拟列。
八、 虚拟列属性查询
1. SYSCOLUMNS
COLATTR 字段,新增值 256 或 768 表示:该列为虚拟列显式指定虚拟列数据类型时, COLATTR 值为 768 ,不显式指定时, COLATTR 值为 256 。
2. SYSDEFAULTSEXPR
新增 VTCOL 字段,作为虚拟列标识:
值为 1 :定义为虚拟列表达式
值为 0 : DEFAULT 表达式
DEFAULT 字段,可显式虚拟列列表达式
3. INFO COLUMNS
create table tab1(id int, mon_sal decimal(10,2), total_sal as(mon_sal * 12),v_sal float as(mon_sal*6));
info columns for tab1;
Column name Type Nulls
id Interger yes
mon_sal decimal ( 10 , 2 ) yes
total_sal Virtual yes
v_sal Virtual-float yes
4. JDBC 接口函数: getColumns ()
COLUMN_DEF 返回虚拟列表达式,否则返回 null 。
官网:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69980677/viewspace-2768918/ ,如需转载,请注明出处,否则将追究法律责任。