10.4. 系统视图
本节主要介绍统一SQL支持原生Oracle数据库中的系统视图。
警告
由于Gaussdb-Oracle不存在user_tables,tabs,user_table_columns,cols,user_users所以在使用统一SQL转换查询系统视图时,需要先导入创建视图的脚本(参考快速开始-》导入目标库脚本一节)
对于user_tables,tabs,user_table_columns,cols的转换说明:
在Gaussdb-Oracle中不能存在user_tables,tabs,user_table_columns,cols同名的表和视图;
用户自定义表名和系统视图同名时,统一SQL会进行转换,在目标库执行时结果不正确。
先创建表: create table tabs(id int,name varchar2(10));查询语句: select * from tabs;统一SQL转换后: select * from unisql.tabs; //结果不正确;更新语句: update tabs set id = 1 where id = 1;统一SQL转换后: update unisql.tabs set id = 1 where id = 1;//结果不正确;对于查询【支持字段】之外的字段,统一SQL会进行转换,在目标库执行时才会报错;
使用””查询时字段名必须全部小写,以下SQL转换后在Gauss-Oracle中执行时会报错;
例如:select “TABLE_NAME”,”TABLESPACE_NAME” from user_tables;不要使用user_tables,tabs,user_table_columns,cols作为with语句的别名
Oracle SQL: with tabs AS (select * FROM cols_t) SELECT * FROM tabs;转换后SQL: with tabs AS (select * FROM cols_t) SELECT * FROM unisql.tabs // 导致语义不一致;因为COLLATION在Gaussdb-Oracle中是一个关键字,对于user_tab_columns和cols中的”COLLATION”字段,在使用时要使用以下方式:
Oracle SQL:select “COLLATION” from user_tab_columns;转换后SQL:SELECT “COLLATION” FROM unisql.user_tab_columns
10.4.1. user_tables
- 描述
- 该视图描述当前用户可访问的关系表
支持字段
字段 |
Oracle字段类型 |
unisql.user_tables字段类型 |
字段说明 |
---|---|---|---|
OWNER |
无 |
character varying(64) |
表所属用户 |
TABLE_NAME |
VARCHAR2(128) |
character varying(64) |
表名 |
TABLESPACE_NAME |
VARCHAR2(30) |
character varying(64) |
存储表的表空间名称 |
STATUS |
VARCHAR2(8) |
character varying(8) |
当前记录是否有效 |
LOGGING |
VARCHAR2(3) |
character varying(3) |
表的更改是否记入日志 |
PARTITIONED |
VARCHAR2(3) |
character varying(3) |
表是否为分区表 |
TEMPORARY |
VARCHAR2(1) |
character(1) |
是否为临时表 |
DROPPED |
VARCHAR2(3) |
character varying |
当前记录是否已删除 |
READ_ONLY |
VARCHAR2(3) |
character varying(3) |
暂不支持,置NULL |
SEGMENT_CREATED |
VARCHAR2(3) |
character varying(3) |
表段是否已被创建 |
HAS_IDENTITY |
VARCHAR2(3) |
character varying(3) |
表是否具有标识列 |
EXTERNAL |
VARCHAR2(3) |
character varying(3) |
表是否为外表 |
示例
-- 转换前Oracle SQL:
SELECT * FROM user_tables;
-- 转换后Gaussdb-Oracle SQL:
SELECT * FROM unisql.user_tables;
-- 转换前Oracle SQL:
SELECT table_name,tablespace_name,status,logging FROM user_tables
-- 转换后Gaussdb-Oracle SQL:
SELECT table_name,tablespace_name,status,logging FROM unisql.user_tables
-- 转换前Oracle SQL:
SELECT table_name,tablespace_name FROM user_tables WHERE upper(table_name) = 'A';
-- 转换后Gaussdb-Oracle SQL:
SELECT table_name,tablespace_name FROM unisql.user_tables WHERE upper(table_name)='A'
10.4.2. tabs
- 描述
- tabs是user_tables的同义词,描述当前用户可访问的关系表
支持字段
参考user_tables的支持字段
示例
-- 转换前Oracle SQL:
SELECT * FROM tabs;
-- 转换后Gaussdb-Oracle SQL:
SELECT * FROM unisql.tabs;
-- 转换前Oracle SQL:
SELECT table_name,tablespace_name,status,logging FROM tabs
-- 转换后Gaussdb-Oracle SQL:
SELECT table_name,tablespace_name,status,logging FROM unisql.tabs
10.4.3. user_tab_columns
- 描述
- 该视图描述当前用户拥有的表,视图和cluster的列
支持字段
字段 |
Oracle字段类型 |
unisql.user_table_columns字段类型 |
字段说明 |
---|---|---|---|
OWNER |
无 |
character varying(64) |
表所属用户 |
TABLE_NAME |
VARCHAR2(128) |
character varying(64) |
表名 |
COLUMN_NAME |
VARCHAR2(128) |
character varying(64) |
列名 |
DATA_TYPE |
VARCHAR2(128) |
character varying(128) |
列的数据类型 |
DATA_TYPE_MOD |
VARCHAR2(3) |
character varying(3) |
暂不支持,置NULL |
DATA_TYPE_OWNER |
VARCHAR2(128) |
character varying(128) |
列的数据类型的所有者 |
DATA_LENGTH |
NUMBER |
integer |
列的字节长度 |
DATA_PRECISION |
NUMBER |
integer |
数据类型的精度 |
DATA_SCALE |
NUMBER |
integer |
小数点右边的位数 |
NULLABLE |
VARCHAR2(1) |
bpchar |
该列是否允许为空 |
COLUMN_ID |
NUMBER |
integer |
创建表时列的序号 |
DEFAULT_LENGTH |
NUMBER |
numeric |
列的默认值字节长度 |
DATA_DEFAULT |
LONG |
text |
列的默认值 |
NUM_DISTINCT |
NUMBER |
numeric |
列中不同值的数量 |
LOW_VALUE |
RAW(1000) |
raw |
列中的最小值 |
HIGH_VALUE |
RAW(1000) |
raw |
列中的最大值 |
DENSITY |
NUMBER |
numeric |
列密度 |
NUM_NULLS |
NUMBER |
numeric |
列中空值数 |
NUM_BUCKETS |
NUMBER |
numeric |
列的直方图的桶数 |
LAST_ANALYZED |
DATE |
date |
上次分析的日期 |
SAMPLE_SIZE |
NUMBER |
numeric |
用于分析此列的样本量 |
CHARACTER_SET_NAME |
VARCHAR2(44) |
character varying(44) |
暂不支持,置NULL |
CHAR_COL_DECL_LENGTH |
NUMBER |
numeric |
字符类型列的声明长度 |
GLOBAL_STATS |
VARCHAR2(3) |
character varying(3) |
暂不支持,置NO |
USER_STATS |
VARCHAR2(3) |
character varying(3) |
暂不支持,置NO |
AVG_COL_LEN |
NUMBER |
numeric |
列的平均长度 (单位字节) |
CHAR_LENGTH |
NUMBER |
numeric |
列的长度(单位字符) |
CHAR_USED |
VARCHAR2(1) |
character varying(1) |
暂不支持,varchar,nvarchar2,bpchar,char类型置B,其余置NULL |
DEFAULT_ON_NULL |
VARCHAR2(3) |
character varying(3) |
暂不支持,置NULL |
IDENTITY_COLUMN |
VARCHAR2(3) |
character varying(3) |
暂不支持,置NULL |
COLLATION |
VARCHAR2(100) |
character varying(100) |
列的排序规则 |
示例
-- 转换前Oracle SQL:
SELECT * FROM user_tab_columns;
-- 转换后Gaussdb-Oracle SQL:
SELECT * FROM unisql.user_tab_columns
-- 转换前Oracle SQL:
SELECT table_name,column_name,data_type,data_type_mod FROM user_tab_columns;
-- 转换后Gaussdb-Oracle SQL:
SELECT table_name,column_name,data_type,data_type_mod FROM unisql.user_tab_columns
10.4.4. cols
- 描述
- cols是user_tab_columns的同义词,描述当前用户拥有的表,视图和cluster的列
支持字段
参考user_tab_columns的支持字段
示例
-- 转换前Oracle SQL:
SELECT * FROM cols;
-- 转换后Gaussdb-Oracle SQL:
SELECT * FROM unisql.cols
-- 转换前Oracle SQL:
SELECT table_name,column_name,data_type,data_type_mod FROM cols;
-- 转换后Gaussdb-Oracle SQL:
SELECT table_name,column_name,data_type,data_type_mod FROM unisql.cols
10.4.5. user_users
- 描述
- 该视图描述当前用户信息
支持字段
字段 |
Oracle字段类型 |
unisql.user_users字段类型 |
字段说明 |
备注(字段默认值) |
---|---|---|---|---|
USERNAME |
VARCHAR2(128) |
text |
用户名 |
|
USER_ID |
NUMBER |
oid |
用户ID |
|
ACCOUNT_STATUS |
VARCHAR2(32) |
text |
账户状态 |
NORMAL |
LOCK_DATE |
DATE |
timestamp |
锁定帐户的日期 |
NULL |
EXPIRY_DATE |
DATE |
timestamptz |
帐户到期日期 |
|
DEFAULT_TABLESPACE |
VARCHAR2(30) |
text |
数据默认表空间 |
NULL |
TEMPORARY_TABLESPACE |
VARCHAR2(30) |
text |
数据临时表空间 |
NULL |
CREATED |
DATE |
timestamp |
用户创建日期 |
NULL |
INITIAL_RSRC_CONSUMER_GROUP |
VARCHAR2(128) |
text |
用户的初始资源消费者组 |
NULL |
EXTERNAL_NAME |
VARCHAR2(4000) |
text |
用户外部名称 |
NULL |
示例
-- 转换前Oracle SQL:
SELECT username,user_id,account_status,lock_date,expiry_date,default_tablespace,temporary_tablespace,created,initial_rsrc_consumer_group,external_name FROM user_users;
-- 转换后Gaussdb-Oracle SQL:
SELECT username,user_id,account_status,lock_date,expiry_date,default_tablespace,temporary_tablespace,created,initial_rsrc_consumer_group,external_name FROM unisql.user_users;
-- 转换前Oracle SQL:
SELECT username,user_id,account_status FROM user_users WHERE username='TEST';
-- 转换后Gaussdb-Oracle SQL:
SELECT username,user_id,account_status FROM unisql.user_users WHERE username=upper('TEST')