Oracle 兼容性

1. 概述

UXDB 高度兼容 Oracle 数据库的功能和性能,UXDB 数据库拥有和 Oracle 数据库系统一样的成熟的事务处理和分析功能,同时还拥有更高的并发性能及更低的运维成本。UXDB 兼容 Oracle 数据库的大部分 SQL 语法和函数。在不改变现有应用程序和数据库架构的情况下,用户可以轻松地将 Oracle 数据库迁移到 UXDB,并在其中进行查询、数据修改和分析等操作。

本文将对 UXDB 数据库兼容 Oracle 12C 的各方面的功能进行详细的对比,方便用户迁移后查阅相关语法使用方法。

2. 整体比较

本章将从基本功能特性指标,可扩展性,可靠性,驱动与文档,高可用,分布式等技术指标等方面进行比较。

UXDB 与 Oracle 12c 的比较表

编号项目Oracle 12cUXDB 2.1说明
功能比较
1基本功能特性指标
1.1数据类型
基本类型不支持 timestamp with local time zone,其他类型部分值的范围差异
多媒体类型不支持 NCLOB,BFILE,LONG RAW,同时有自己独有的多媒体类型
序列UXDB 与 Oracle 序列功能相同,语法有部分差异
自定义类型UXDB 与 oracle 的自定义类型用法上有一定的不同,但是功能上完全覆盖到了 Oracle 的自定义类型
空间数据类型UXDB 与 oracle 的空间数据类型用法不同,但是 UXDB 覆盖了 Oracle 的大部分空间数据类型的功能
数据类型别名--
XML 数据类型UXDB 与 Oracle 类型名不同,作用相同
1.2基表管理
普通表一致
分区表UXDB 与 Oracle 功能相同,操作语句不同
堆表与 oracle 一致,默认创建的就是堆表
临时表功能有差异,UXDB 没有全局临时表 (2123 及以上版本支持全局临时表),生命周期与用户可见性不同
对象表--
外部表功能一致,语法有部分不同
表截断 (TRUNCATE)功能一致,语法有部分不同
记录插入、删除、更新功能一致,语法有部分不同
列的增加、删除和类型修改功能一致,语法有部分不同
建表指定物理存储信息功能一致,语法有部分不同
虚拟列兼容了 Oracle 的虚拟列,但部分功能有区别
1.3视图管理
视图创建、删除功能一致,语法有部分不同
数据插入、删除、更新部分功能一致,语法有部分不同
物化视图名称相同,但功能和语法与 Oracle 有较大差别
1.4索引管理
普通索引功能一致,语法有部分不同
唯一索引功能一致,语法有部分不同
聚集索引--
分区索引功能一致,语法有部分不同
全文检索功能一致,语法有部分不同
位图索引--
位图连接索引--
函数索引功能一致,语法有部分不同
在线重建索引功能一致,语法有部分不同
不可见索引--
1.5存储过程/函数管理
定义和删除功能一致,语法有部分不同
查询和更新功能一致,语法有部分不同
重编译--
权限管理具体功能和语法有差异,但是都支持权限管理
外部过程/函数扩展功能一致,语法有部分不同
引用游标功能一致,语法有部分不同
自定义异常功能与语法在细节上有差异
分析函数兼容了部分 Oracle 分析函数,同时有一部分自有分析函数
1.6触发器管理
BEFORE/AFTER 触发器功能一致,语法有部分不同
INSTEAD OF 触发器功能一致,语法有部分不同
行级触发器功能一致,语法有部分不同
DDL 事件触发器功能一致,语法有部分不同
系统事件触发器--
时间触发器--
启用/禁用触发器功能一致,语法不同 (Oracle 直接用 alter trigger 启用或禁用,UXDB 用 alter table 启用或禁用)
1.7包管理
UXDB 兼容了部分 Oracle 包
1.8序列管理
序列UXDB 与 Oracle 序列功能相同,语法有部分差异
1.9同义词
公共同义词UXDB 同义词不分共有和非公有,Oracle 区分
非公共同义词-UXDB 同义词不分共有和非公有,Oracle 区分
1.10类管理
--
1.11域管理
SQL 域功能一致,语法有部分不同
1.12表空间管理
表空间UXDB 与 Oracle 的功能有所不同,而且 UXDB 表空间的类型没有 Oracle 多,语法有部分不同
2可扩展性
2.1操作系统
WINDOWS一致
LINUX一致
其他,如 UNIX,SOLARIS,AIX 等一致
64 位支持一致
2.2其他
共享磁盘一致
SMP--
对流行开发工具的支持一致
3可靠性
3.1备份和恢复
热备份(物理备份)UXDB 支持热备份,冷恢复
脱机备份(物理备份)方式不同,作用一致
库级备份方式不同,作用一致
表空间备份方式不同,作用一致
表级备份方式不同,作用一致
逻辑备份方式不同,作用一致
备份加密与压缩方式不同,作用一致
备份加密与压缩-Oracle 不支持
备份还原工具 RMAN工具名一样,功能和使用方法不同
4驱动与文档
4.1接口驱动
ODBC一致
JDBC一致
OCI一致
PHP一致
OO4O一致
QODBC(QT ODBC)一致
OCCI--
Python一致
NodeJS一致
Hibernate一致
Net DataProvider一致
4.2用户文档
用户手册√ (2.1.1.5F 后版本)一致
联机帮助--
5高可用
5.1共享存储集群RACSuper RAC
自动存储管理 ASM--
负载均衡方式不同,作用一致
透明故障转移方式不同,作用一致
节点重加入方式不同,作用一致
备份恢复方式不同,作用一致
5.2双机热备DataGuardHA+repmgr
故障切换和恢复实现方式不同,功能相同
故障手工切换和自动切换实现方式不同,功能相同
备机可读实现方式不同,功能相同
6分布式
6.1大规模并行处理集群-MPP
行列融合--
TB/PB 级数据分析--
并行处理技术--
支持绝大部分单机功能--
并行高速数据加载--
6.2透明分布式数据库--
分布式存储---
分布式日志管理---
多点读写---
多副本---

3. 默认大小写

ORACLE 兼容模式数据库在创建对象时如果没有加引号,对存入数据字典时都会将对象名小写字母转换成大写字母存储,如 mytable 将转换成 MYTABLE;如果创建时加了引号,则以引号内的实际字符存储。访问时如果没加引号则会将小写字母转换成大写字母再访问,如 mytable 将转换成 MYTABLE;如果加了引号则以引号内的实际字符访问。因此在读取数据字典时只要发现对象名里有小写字母或者是除字母汉字以外开头的字符都认为是大小写敏感的 (即默认大写且敏感),并且要求在访问时需要加上引号。

另外,在 ORACLE 兼容模式下,支持登陆名部分大小写 (2122 及以上版本支持)。

4. SQL 语法

本章将从数据类型,位列,对象管理 (用户管理,模式管理,基表管理,数据操作,视图管理,索引管理,序列管理,全文索引,表空间管理),存储过程,触发器等方面进行比较。

4.1. 数据类型与伪列

4.1.1. 数据类型

Oracle 与 UXDB 支持的数据类型对照表

Oracle UXDB 备注
类型名说明类型名说明
数字类型NUMBER可变长数值列,最大数值长度为 38 个数字,p 的范围是 1-38 位,s 的范围是 -84-127 位NUMBERnumber(p, s) 用户指定精度时,p 最大 131072 位,s 的范围为 -1000 到 8191UXDB 的 number 类型范围比 Oracle 的大
SMALLINT等同于 NUMBER(38,0)SMALLINT从 -32768 到 +32767Oracle 的 SMALLINT 是非标准类型,等同于 NUMBER(38,0),和 UXDB 范围不同
INTEGER/INT等同于 NUMBER(38,0)INTEGER/INT从 -2147483648 到 +2147483647Oracle 的 INTEGER 是非标准类型,等同于 NUMBER(38,0),和 UXDB 范围不同
DECIMAL/DECDECIMAL(p,s),相当于 number(p,s),p 的范围额为 1-38,s 范围为 -84-127DECIMALDECIMAL(p,s),p,s 不超过 1000Oracle 的 DECIMAL(p,s) 是非标准类型,等同于 number(p,s),和 UXDB 范围不同
NUMERICNUMERIC(p,s),相当于 number(p,s),p 的范围额为 1-38,s 范围为 -84-127NUMERICNUMERIC(p,s),p,s 不超过 1000Oracle 的 NUMERIC(p,s) 是非标准类型,等同于 number(p,s),和 UXDB 范围不同
FLOATFLOAT 是 NUMBER 的子类型,float(p) 有效位为以科学计数法,最大精度是 126FLOATfloat(p)p 24 或者直接是 float 时相当于 double precision 类型范围大小不同
REAL可变精度,是 float(b) 的子类型,等同于 float(63),其中 63 为二进制精度,转换为十进制精度是 float(19)。精度是 19 个有效位。经过验证最大存储 20bytesREAL可变精度的数字类型。6 位十进制精度(实际验证小数点后最多 7 位)。存储长度 4bytes精度与范围大小不同
DOUBLE PRECISION相当于 float(126),范围:-3.40282E+38F 到 +3.40282E+38FDOUBLE PRECISION范围:±1E-323 到 ±1E+308范围大小不同
字符类型CHAR(n)定长字符串,最大长度 2000,长度不足 n 时,自动填充空格CHAR(n)定长字符串,最大长度 1GB,长度不足 n 时,自动填充空格UXDB 可存储的字符最大范围比 Oracle 大
VARCHAR2(n)MAX_STRING_SIZE=EXTENDED 时,范围:1-32767 字节或字符
MAX_STRING_SIZE=STANDARD 时,则范围:1-4000 字节或字符
VARCHAR2(n)变长字符串,长度范围:1-10485760 字节UXDB 可存储的字符最大范围比 Oracle 大
NVARCHAR2(n)MAX_STRING_SIZE=EXTENDED 时,范围:1-32767 字节或字符
MAX_STRING_SIZE=STANDARD 时,则范围:1-4000 字节或字符
NVARCHAR2(n)变长字符串,长度范围:1-10485760 字节UXDB 可存储的字符最大范围比 Oracle 大
NCHAR字符集是 AL16UTF16 时:1000 字节,字符集是 UTF8 时:2000 字节,超出长度部分是空格也会报错NCHAR变长,1-10485760 字节,超出长度部分是空格可以自动截断正常插入UXDB 可存储的字符最大范围比 Oracle 大
时间类型DATE固定长度 (7 字节) 的日期型,时间也作为一部分存储其中。Oracle 的 DATE 是其特有的非标准数据类型DATE存储长度与内容与 Oracle 一致,显示格式与 oracle 相同一致
timestamp(precision)7 字节或 12 字节的定宽日期/时间数据类型,精度可以到纳秒,超过指定精度会四舍五入。最小 -4173 最大 9999timestamp [ (p) ] [ without time zone ]日期和时间 (无时区),8 字节,精度到微秒。超过精度会五舍六入。最低值 4713 BC(公元前)、最高值 294276 AD(公元后)Oracle 精度到纳秒,uxdb 精度到微秒,最大值不同
timestamp(precision) with time zone该类型是在 timestamp(precision) 的基础上加入了时区偏移量的值。带时区的时间戳是时间戳的变体,其值中包含时区区域名称或时区偏移量。7 字节或 12 字节,精度到纳秒timestamp [ (p) ] with time zone日期和时间,有时区,8 字节,精度到微秒Oracle 精度到纳秒,uxdb 精度到微秒,最大值不同,对时区的处理也不同,严格来说,此类型相当于 Oracle 的 timestamp with local time zone
timestamp with local time zone存储时转化为数据库时区进行规范化存储,但不存储时区信息,当用户检索数据时,Oracle 数据库会以用户的本地会话时区返回数据。7 字节或 12 字节,精度到纳秒---
INTERVAL YEAR TO MONTH间隔使用年份和月份,最小单位是月INTERVAL YEAR TO MONTH时间间隔年份和月,最小单位是月一致
INTERVAL DAY TO SECOND使用包括小数秒在内的天,小时,分钟和秒存储间隔。最小单位是纳秒INTERVAL DAY TO SECOND使用包括小数秒在内的天,小时,分钟和秒存储间隔。最小单位是微秒最小单位不同,oracle 到纳秒,uxdb 到微秒
LOB 类型CLOB(n)可变长二进制大对象,最大长度 4G-1CLOB(n)可变长二进制大对象,最大长度超过了 1TBUXDB 存储长度比 Oracle 更大
NCLOB可变长二进制大对象,最大长度 4G-1 字节NCLOB可变长二进制大对象,最大长度超过了 1TBUXDB 存储长度比 Oracle 更大 (2122 及以上版本支持)
BLOB(n)可变长二进制大对象,最大长度 4G-1 字节BLOB(n)可变长二进制大对象,最大长度超过了 1TBUXDB 存储长度比 Oracle 更大
BFILE二进制文件,存储在数据库外的系统文件,只读的---
RAW & LONG RAW & LONGLONG可变长文本,最大长度 134217727,表中只能有一个 LONG 列LONG可变长文本,最大长度为 1G
RAW可变长二进制数据类型,最多可以存储 2000 字节的信息RAW可变长二进制数据,最大长度为 1GUXDB 比 Oracle 可存储的数据更长
LONG RAW可变长二进制数据,最大长度 134217727,表中只能有一个 LONG RAW 列---
其他类型XMLTYPE存储 XML 类型--UXDB 无同名的类型,但是有 XML 类型,虽然类型名不同,但存储内容相同,用法和对应操作函数也不同
JSON用来存储 JSON 类型JSON用来存储 JSON 类型类型相同,Oracle 中定义需要 column_name CLOB CONSTRAINT ensure_json CHECK (po_document IS JSON)),UXDB 中直接定义为 JSON 类型
可变数组用户可以自定义可变数组类型可变数组用户可以自定义可变数组类型UXDB 可变数组不能用来创建表 (2122 及以上版本支持)
嵌套表用户可以自定义嵌套表类型嵌套表用户可以自定义嵌套表类型UXDB 可嵌套表不能用来创建表 (2122 及以上版本支持)

4.1.2. 伪列

Oracle 与 UXDB 支持的伪列对照表

Oracle UXDB 备注
列名说明列名说明
ROWIDrowid 的值是由 18 位字符表示,表明了该行在 oracle 数据库中的具体物理位置,全库唯一ROWIDbigint 类型,实现了部分 Oracle 功能,没有标记物理位置的功能UXDB 实现了 Oracle 的部分 ROWID 功能,且类型不同
ROWNUMrownum 就像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作ROWNUMrownum 就像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作一致

4.2. 对象管理

4.2.1. 用户管理

Oracle 与 UXDB 用户管理对照表

操作OracleUXDB备注
创建用户CREATE USER user IDENTIFIED { BY password \| EXTERNALLY \| GLOBALLY AS 'external_name' } [ DEFAULT TABLESPACE tablespace \| TEMPORARY TABLESPACE { tablespace \| tablespace_group_name } \| QUOTA { integer [ K \| M ] \| UNLIMITED } ON tablespace ]... \| PROFILE profile \| PASSWORD EXPIRE \| ACCOUNT { LOCK \| UNLOCK };CREATE USER name [ [ WITH ] option [ ... ] ]
其中 option 可以是:
SUPERUSER \| NOSUPERUSER
CREATEDB \| NOCREATEDB
CREATEROLE \| NOCREATEROLE
INHERIT \| NOINHERIT
LOGIN \| NOLOGIN
REPLICATION \| NOREPLICATION
BYPASSRLS \| NOBYPASSRLS
CONNECTION LIMIT connlimit
[ ENCRYPTED ] PASSWORD 'password' \| PASSWORD NULL
VALID UNTIL 'timestamp'
IN ROLE role_name [, ...]
当打开安全开关时,uxdb 由于受三权分立策略的影响,系统会默认初始化 uxsao、uxsmo、uxsso 三个用户。uxdb 在安全开关开启时,创建用户对用户密码有较高的复杂性要求
修改用户ALTER USER ... (复杂语法略)ALTER USER role_specification [ WITH ] option [ ... ]
ALTER USER name RENAME TO new_name
ALTER USER ... SET configuration_parameter ...
当安全开关打开时,管理员名称不可以重命名
删除用户DROP USER user [ CASCADE ];DROP USER [ IF EXISTS ] name [, ...]在安全开关启动时,drop 操作只可以 uxsmo 用户执行,从而保障了系统的安全性

4.2.2. 模式管理

Oracle 与 UXDB 模式管理对照表

操作OracleUXDB备注
创建模式CREATE SCHEMA AUTHORIZATION schema { create_table_statement \| create_view_statement \| grant_statement } ...;CREATE SCHEMA schema_name [ AUTHORIZATION role_specification ] [ schema_element [ ... ] ]不完全一致,例如 uxdb 在创建模式时不会自动创建用户
删除模式DROP SCHEMA [ IF EXISTS ] name [, ...] [ CASCADE \| RESTRICT ]在安全开关开启时,uxdb 会默认生成 uxsao、uxsmo、uxsso 模式,且这些模式不可以被删除

4.2.3. 基表管理

Oracle 与 UXDB 基表管理对照表

操作OracleUXDB备注
创建基表CREATE [GLOBAL TEMPORARY] TABLE ...CREATE [ [GLOBAL { TEMPORARY \| TEMP } ] TABLE [ IF NOT EXISTS ] table_name ... [ ON COMMIT { PRESERVE ROWS \| DELETE ROWS \| DROP } ] ...语法上存在细微差异,例如数据类型 uxdb 支持使用 integer 或者 numeric;定义日期 uxdb 支持 date、timestamp、timestamp time zone 等。另外,2123 及以上版本支持全局临时表
修改基表ALTER TABLE ...ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] action [, ... ]
ENABLE/DISABLE [VALIDATE/NOVALIDATE] CONSTRAINT constraint_name
语法存在细微差异,比如约束处理,uxdb 支持 add constraint 和 drop constraint
删除基表DROP TABLE [schema .] table [CASCADE CONSTRAINTS];DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE \| RESTRICT ]语法存在细微差异

4.2.4. 数据操作

Oracle 与 UXDB 插入数据操作对照表

操作OracleUXDB备注
INSERT INTO ... VALUES...INSERT [INTO] <table> [(<column_name>)] VALUES(<value>);INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ] { DEFAULT VALUES \| VALUES ( { expression \| DEFAULT } [, ...] ) [, ... ] \| query } [ ON CONFLICT ... ] [ RETURNING ... ]uxdb 支持语句会返回插入的行数,也可以直接通过 insert into 语句获得插入的行数。oracle 默认 insert into 不支持返回插入行数
INSERT INTO ... SELECT ...INSERT [INTO] <table> SELECT ... FROM ...INSERT INTO table_name ... { query }query(select 语句)也可以包含 with 字句
序列值的插入<sequence>.NEXTVALNEXTVAL(sequence)通过 <sequence>.NEXTVAL 可以查询
时间类型数据插入需要 TO_DATE 进行格式转换可以直接插入或用 TO_DATE 进行格式转换UXDB 支持的插入方式比 Oracle 多

Oracle 与 UXDB 修改数据操作对照表

操作OracleUXDB备注
UPDATEUPDATE <table_or_view_name> [t_alias] SET { <column_name> = <literal> ...} [WHERE <predicate>]UPDATE [ ONLY ] {table_name [ * ] [ [ AS ] alias ] \| subquery} ... SET { column_name = { expression \| DEFAULT } ... } [, ...] [ FROM from_list ] [ WHERE condition \| WHERE CURRENT OF cursor_name ] [ ORDER BY ... ] [ LIMIT { count } ] [ RETURNING ... ]语法上存在差异

Oracle 与 UXDB 删除数据操作对照表

操作OracleUXDB备注
DELETEDELETE [FROM] <table> [WHERE <predicate>]DELETE table_name WHERE [ condition ] [ ORDER BY ... ] [ LIMIT { count } ]语法上存在差异
TRUNCATETRUNCATE TABLE <table>TRUNCATE [ TABLE ] [ ONLY ] name [ * ] [, ... ] [ RESTART IDENTITY \| CONTINUE IDENTITY ] [ CASCADE \| RESTRICT ]语法上存在差异

Oracle 与 UXDB 查询数据操作对照表

操作OracleUXDB备注
单表查询SELECT [DISTINCT] ... FROM ... [WHERE ...] [GROUP BY ...] [ORDER BY ...];SELECT [ ALL \| DISTINCT [ ON ( expression [, ...] ) ] ] ... [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY ... ] [ HAVING ... ] [ WINDOW ... ] [ UNION ... ] [ ORDER BY ... ] [ LIMIT ... ] [ OFFSET ... ] [ FETCH ... ] [ FOR { UPDATE \| SHARE } ... ]基本一致,兼容了 Oracle 的功能
连接查询join_clause ::= { inner_cross_join_clause \| outer_join_clause } ...SELECT ... FROM [ NATURAL ] join_type from_item [ ON join_condition \| USING ( join_column [, ...] ) ] [, ... ]
其中 join_type 可以是:[ INNER ] JOIN, LEFT [ OUTER ] JOIN, RIGHT [ OUTER ] JOIN, FULL [ OUTER ] JOIN, CROSS JOIN
不一致
1. uxdb 连接条件需要在 join 子句中指定
2. uxdb 不支持 natural join,需要手动指定连接条件
子查询SELECT ... FROM table_reference [ where_clause ] [ hierarchical_query_clause ] ...[ WITH [ RECURSIVE ] with_query [, ...] ] SELECT * FROM table_name
支持 SEARCH 和 CYCLE 子句
uxdb 子查询不仅可以出现在 select 子句、form 子句、where 子句也可以出现在 having 子句中。uxdb 支持子查询结果集可以是多行多列;但在某些位置上只允许子查询返回单个值
带 EXISTS 谓词的子查询exists_condition::= [NOT] EXISTS (subquery)EXISTS (subquery)基本一致,uxdb 可以支持 exists 查询也可以支持 in 关键字与子查询语句结合
查询结果的合并<SELECT EXPRESSION> UNION [ALL] ...{ UNION \| INTERSECT \| EXCEPT \| MINUS } [ ALL \| DISTINCT ] select使用 union 操作符进行查询结果合并时,uxdb 使用 union all 操作符,不进行去重操作
GROUP BY 子句GROUP BY { expr \| rollup_cube_clause \| grouping_sets_clause } ...GROUP BY grouping_element [, ...]基本一致,在部分使用上存在差异,例如非聚合列使用
ORDER BY 子句ORDER [ SIBLINGS ] BY { expr \| position \| c_alias } [ ASC \| DESC ] ...ORDER BY expression [ ASC \| DESC \| USING operator ] [ NULLS { FIRST \| LAST } ] [, ...]uxdb 支持的排序表达式可以支持多个,但是需要逗号分隔,且每个表达式必须是一个列名或者表达式。
uxdb 默认将 null 视为最大值,可以通过 NULLS FIRST 和 NULLS LAST 参数控制 NULL 值的排序顺序
HAVING 子句HAVING conditionHAVING conditionuxdb 在 having 子句中引用列的方式是通过别名或者完整的列进行引用,oracle 可以直接使用列名
选取前几条数据SELECT ... FROM (SELECT ... ORDER BY ...) WHERE ROWNUM <= n支持 LIMIT n 形式选取前几行一致。另外 UXDB 支持 limit 形式选取前几行
选取其中几条数据SELECT ... FROM ( SELECT ROWNUM RECNO, ... FROM (...) WHERE ROWNUM <= end) WHERE RECNO >= start支持 LIMIT n OFFSET m 形式一致。另外 UXDB 支持 limit 形式选取其中几行
全文检索SELECT * FROM table_name WHERE CONTAINS(fullText_column,'search contents');SELECT * FROM tablename WHERE fullText_column like '%'search contents'%';
或使用 tsvector@@ 操作符
uxdb 也可以支持 tsvector 和 tequery 数据类型以及 @@ 操作符进行全文检索。
uxdb 与 oracle 一样支持多种预研,但是 uxdb 词典和分析器的配置相对简单些。
uxdb 有内置的全文检索功能,不需要额外安装扩展
层次查询hierarchical_query_clause ::= [ START WITH condition ] CONNECT BY [ NOCYCLE ] conditionWITH RECURSIVE <alias> AS (...) SELECT ... FROM <alias>;
SELECT [level], column, expr... FROM table ... { CONNECT BY [ NOCYCLE ] condition [ START WITH condition ] ... }
对已知 Oracle 层次查询场景的全部兼容支持
查看执行计划EXPLAIN PLAN [ SET STATEMENT_ID = 'text' ] [ INTO ... ] FOR statement;EXPLAIN [ ( option [, ...] ) ] statement
EXPLAIN [ ANALYZE ] [ VERBOSE ] statement
uxdb 执行 explain 语句之后反馈是文本格式的执行计划信息,而 oracle 返回是表格格式执行计划信息。另外在执行计划信息的具体内容上也存在差异

4.2.5. 视图管理

Oracle 与 UXDB 视图管理对照表

操作OracleUXDB备注
创建视图CREATE [OR REPLACE][FORCE][NOFORCE] VIEW view_name [(column_name)...] AS Select_statement [WITH CHECK OPTION...] [WITH READ ONLY]CREATE [ OR REPLACE ] [ TEMP \| TEMPORARY ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ] [ WITH (view_option_name [=view_option_value][, ... ])] AS query [ WITH [ CASCADED \| LOCAL ] CHECK OPTION [CONSTRAINT cons_name]]uxdb 不支持 force、noforce 关键字,支持创建临时视图、递归视图。uxdb 物化视图自动更新,支持刷新时机为 on demand,on statement,never refresh(2123 及以上版本)。
修改视图利用关键字 REPLACE,语法同 CREATE VIEW 相同利用关键字 REPLACE,语法同 CREATE VIEW 相同一致
删除视图DROP VIEW view_name;DROP VIEW [ IF EXISTS ] name [, ...] [ CASCADE \| RESTRICT ]一致
SELECT与表的 SELECT 相同与表的 SELECT 基本一致一致
INSERT与表的 INSERT 相同一般情况下视图不支持 insert 插入数据,若该视图是可更新视图,则支持 insert 的操作不一致
UPDATE与表的 UPDATE 相同只有创建的视图为可更新视图,才支持 UPDATE 的操作,否则报错不一致
DELETE与表的 DELETE 相同一般情况下视图不支持 delete 插入数据,若该视图是可更新视图,则支持 delete 的操作不一致

4.2.6. 索引管理

Oracle 与 UXDB 索引管理对照表

操作OracleUXDB备注
创建索引CREATE [ UNIQUE \| BITMAP ] INDEX [ schema. ]index ON { cluster_index_clause \| table_index_clause \| bitmap_join_index_clause } ;CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON [ ONLY ] table_name [ USING method ] ( { column_name \| ( expression ) } ... ) [ INCLUDE (...) ] [ WITH (...) ] [ TABLESPACE ... ] [ WHERE predicate ]UXDB 不支持 BITMAP 关键字创建位图索引;UXDB 支持并发构建索引;支持 only 关键字,如果该表是分区表,指示不要在分区上递归创建索引。默认会递归创建索引
删除索引DROP INDEX [ schema. ]index [ FORCE ] ;DROP INDEX [CONCURRENTLY] [IF EXISTS ] name [, ...] [ CASCADE \| RESTRICT ]支持 CONCURRENTLY 关键字,删除索引并且不阻塞在索引基表上的并发选、插入、更新和删除操作。不支持 FORCE 关键字

4.2.7. 序列管理

Oracle 与 UXDB 序列管理对照表

操作OracleUXDB备注
创建序列CREATE SEQUENCE [ schema. ]sequence [ { INCREMENT BY \| START WITH } integer \| { MAXVALUE integer \| NOMAXVALUE } ... ];CREATE [ TEMPORARY \| TEMP ] SEQUENCE [ IF NOT EXISTS] name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue \| NO MINVALUE ] [ MAXVALUE maxvalue \| NO MAXVALUE ] [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY ... ]UXDB 支持 TEMPORARY、TEMP 关键字,创建临时序列;IF NOT EXISTS 如果已经存在一个同名的关系时不要抛出错误,给出一个提示;
UXDB 2123 及以上版本支持 NOCYCLE、KEEP/NOKEEP、SESSION/GLOBAL
修改序列ALTER SEQUENCE [ schema. ] sequence { INCREMENT BY integer \| ... };ALTER SEQUENCE [ IF EXISTS ] name [ AS data_type ] [ INCREMENT [ BY ] increment ] ... [ RESTART [ [ WITH ] restart ] ] ...UXDB 支持可选子句 AS data_type 改变序列的数据类型。有效类型是 smallint、integer 和 bigint。当且仅当先前的最小值和最大值是旧数据类型的最小值或最大值时,更改数据类型会自动更改序列的最小值和最大值。UXDB 2123 及以上版本支持 NOCYCLE、KEEP/NOKEEP、SESSION/GLOBAL
删除序列DROP SEQUENCE [schema.]sequence_name [CASCADE \| RESTRICT];DROP SEQUENCE [ IF EXISTS ] name [, ...] [ CASCADE \| RESTRICT ]一致

4.2.8. 全文索引

Oracle 与 UXDB 全文索引管理对照表

操作OracleUXDB备注
创建全文索引CREATE [ OR REPLACE ] CONTEXT namespace USING [ schema. ] package ...;英文检索支持语法 CREATE INDEX idx_fulltext_search ON table_name USING gin (to_tsvector('english', column_name));
中文检索使用 zhparser 插件实现此功能:
安装 zhparser 解析器;创建 FTS 配置;添加 token 映射;
uxdb 通过调用插件的方式实现,不支持 Oracle 语法
修改全文索引
删除全文索引DROP CONTEXT namespace; 不支持 Oracle 语法

4.2.9. 表空间管理

Oracle 与 UXDB 表空间管理对照表

操作OracleUXDB备注
创建表空间CREATE TABLESPACE tablespace_name [DATAFILE datefile_spec1 ... [{MININUM EXTENT ... \| BLOCKSIZE ... \| logging clause ... }]CREATE TABLESPACE tablespace_name [OWNER { new_owner \| CURRENT_USER \| SESSION_USER }] LOCATION 'directory' [WITH (tablespace_option = value [, ... ])]1. UXDB 在创建表空间时,允许用户指定表空间所有者。
2. Oracle 支持的表空间类型比 UXDB 多。
3. UXDB 不支持 EXTENT 等参数。
修改表空间alter tablespce tablespace_name (rename to new_name \| add datafile ... \| rename datafile ... to ... \| default storage_clause \| online\|offline ... \| (begin\|end) backup);ALTER TABLESPACE name RENAME TO new_name
ALTER TABLESPACE name OWNER TO {new_owner \| CURRENT_USER \| SESSION_USER }
ALTER TABLESPACE name SET (tablespace_option = value [, ... ] )
ALTER TABLESPACE name RESET (tablespace_option [, ... ] );
UXDB 不支持在线/离线操作,不支持备份模式开始、结束设置。
删除表空间drop tablespace name [including contents [and datafile ]]DROP TABLESPACE [IF EXISTS ] name;基本一致

4.2.10. rman 工具对照

Oracle 与 UXDB rman 工具对照表

操作OracleUXDB备注
坏块在线修复blockrecover datafile 6 block 130;没找到相关参数oracle 的 adg 也可以通过备库修复主库的坏块
备份单个数据文件RMAN > backup datafile 6 tag=health;没找到相关参数
备份恢复指定 dbbackup pluggable database pdb;
restore pluggable database pdb;
没找到相关参数
备份恢复 schema(表空间)backup tablespace EXAMPLE format='...';没找到相关参数
增量合并RMAN > backup incremental level_1 for recover of copy with tag level_0 database;没找到相关参数
RAC 备份可以通过配置脚本配置进行配置-主备流复制需要考虑切换相关。分布式的等多节点备份过于复杂,当然因为架构和机制原因导致,但是一致性难保
备份集可以按要求自动分片ls -没找到相关参数和 cp 一样,这个倒是问题不大,但是 rman 备份可以压缩空块
并行操作,可以手动指定并行通道CONFIGURE DEVICE TYPE DISK PARALLELISM 2 ...
Run { Allocate channel d1 ...; Allocate channel d2 ...; Backu p database; }
没找到相关参数
双工备份RMAN 在创建备份集的时候,可以同时生成这个备份集的多个完全相同的副本没找到相关参数
镜像副本类似操作系统的 os 命令 cp,不过是由 rman 来进行,恢复快和 ux_rman 中的备份类似
管理更友好,查看和管理使用的命令更多,细节更丰富RMAN>list backupset 12956
RMAN> list archivelog all;
RMAN>list expired backup;
ux_rman show detall -B /home/uxdo/backup/rmanbak/fullbackup/ rman showrman 的备份脚本更成熟,也好写

4.3. 存储过程

Oracle 与 UXDB 存储模块管理对照表

操作OracleUXDB备注
创建存储过程CREATE [OR REPLACE] PROCEDURE procedure_name [ ( argument[{IN \| OUT \| IN OUT}] type,...) ] {IS \| AS} procedure_bodyCREATE [ OR REPLACE ] PROCEDURE name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT \| = } default_expr ] [, ...] ] ) { [ LANGUAGE lang_name] ... } ... { IS \| AS } body /UXDB 从 2.1.2.2 开始支持 OUT,2123 及以上版本支持 out 实际参数是包变量
删除存储过程DROP PROCEDURE <name>;DROP PROCEDURE [ IF EXISTS ] name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] [, ...] [ CASCADE \| RESTRICT ]支持 oracle 用法
调用存储过程CALL <name>([ <argument>{, <argument>}]);CALL name ( [ argument ] [, ...] )一致

4.4. 触发器

Oracle 与 UXDB 触发器管理对照表

操作OracleUXDB备注
创建触发器CREATE [OR REPLACE] TIGGER 触发器名 触发时间 触发事件 ON 操作对象 REFERENCING { { OLD \| NEW } [ AS ] alias } [ ... ] [FOR EACH ROW] BEGIN pl/sql 语句 ENDCREATE [ OR REPLACE ] [ CONSTRAINT ] TRIGGER 触发器名 触发时间 触发事件 ON 操作对象 REFERENCING { { OLD \| NEW } [ AS ] alias } [ ... ] [FOR EACH ROW] DECLARE Declaration-statements BEGIN pl/sql 语句 END; /1. uxdb 不支持 [OR REPLACE] 关键字 (2122 及以后版本支持此功能)
2. uxdb 不支持:NEW,:OLD 关键字 (2123 及以后版本支持此功能)
修改触发器状态ALTER TRIGGER 触发器名 DISABLE/ENABLEALTER TABLE [ IF EXISTS ] name DISABLE TRIGGER [ trigger_name \| ALL \| USER ]不一致,UXDB 用 alter table 改变触发器状态
删除触发器DROP TRIGGER 触发器名DROP TRIGGER [ IF EXISTS ] name ON table_name [ CASCADE \| RESTRICT ]一致,UXDB 比 Oracle 支持更多方式参数
DML 事件支持INSERT、DELETE、UPDATEINSERT、DELETE、UPDATE一致
DDL 事件支持CREATE、ALTER、DROP 等TRUNCATEuxdb 支持 TRUNCATE
数据库事件支持STARTUP、SHUTDOWN、LOGON、LOGOFF、SERVERERROR 等 uxdb 不支持
元组级触发器支持FOR EACH ROW[ FOR [ EACH ] { ROW | STATEMENT } ]一致,UXDB 比 Oracle 支持更多方式参数
语句级触发器支持默认默认一致
表触发器支持BEFORE INSERT, AFTER INSERT 等支持一致
INSTEAD OF 触发器支持CREATE [OR REPLACE] TIGGER ... INSTEAD OF ...CREATE [ OR REPLACE ] [CONSTRAINT] TIGGER ... INSTEAD OF ...uxdb 不支持 [OR REPLACE] 关键字 (2122 及以后版本支持此功能)

4.5. 虚拟表 dual

Oracle 与 UXDB 虚拟表 dual 对照表

OracleUXDB备注
dualdual 是一个虚拟表,用来构成 select 的语法规则。SELECT * \| [column1 [AS alias1], column2 [AS alias2]] FROM table虚拟表,功能与 Oracle 一样一致

5. SQL 函数

本章将对用户创建自定义函数的语法与系统自带函数功能进行比较和说明。

5.1. 创建函数

Oracle 与 UXDB 创建函数对照表

操作OracleUXDB备注
创建函数CREATE [OR REPLACE ] FUNCTION <函数名定义> [( <参数名> <参数模式> <参数类型> [ <默认值表达式>] ...)] RETURN <返回数据类型> [WITH ENCRYPTION] AS \| IS [ <说明部分>] BEGIN <执行部分> [ <异常处理部分>] END;CREATE [OR REPLACE ] FUNCTION <函数名定义> [( <参数名> <参数模式> <参数类型> [ <默认值表达式>] ...)] RETURN <返回数据类型> [WITH ENCRYPTION] AS \| IS [ <说明部分>] BEGIN <执行部分> [ <异常处理部分>] END;一致
删除函数DROP FUNCTION < 函数名 >;DROP FUNCTION < 函数名 >;一致
调用函数SELECT <函数名 > [( <参数>{, <参数>})];SELECT <函数名 > [( <参数>{, <参数>})];一致

5.2. 系统自带函数

(注:此处省略部分重复的函数列表,保留了核心差异和新增函数,完整列表请参考原始文档或按需展开)

Oracle 函数与 UXDB 函数对照表 (精选)

Oracle 函数名Oracle 函数功能UXDB 对应的函数名UXDB 函数功能备注
数值型函数
ABS(x)返回 x 的绝对值abs(x)绝对值一致
sign(x)返回 x 的正负值sign(dp or numeric)参数的符号(-1,0, +1)一致
ceil(x)返回大于等于 x 的最小整数值ceil(dp or numeric)不小于参数的最近的整数一致
floor(x)返回小于等于 x 的最大整数值floor(dp or numeric)不大于参数的最近的整数一致
power(x,y)返回 x 的 y 次幂power(a numeric, b numeric)求 a 的 b 次幂一致
mod(x,y)返回 x 除以 y 的余mod(y, x)y/x 的余数参数顺序可能不同
round(x[,y])返回四舍五入后的值round(v numeric, s int)圆整为 s 位小数数字一致
trunc(x[,y])返回 x 按精度 y 截取后的值trunc(v numeric, s int)截断为 s 位小数位置的数字一致
字符型函数
ASCII(x1)返回字符表达式最左端字符的 ASCII 码值ascii(string)参数第一个字符的 ASCII 代码一致
CHR(n1)将 ASCII 码转换为字符chr(int)将 ASCII 码转换为字符一致
CONCAT(c1,c2)连接两个字符串concat(str "any" [,str "any" [, ...] ])串接所有参数的文本表示。NULL 参数被忽略一致
INITCAP(c1)首字母大写initcap(string)将每一个词的第一个字母转换为大写形式一致
LOWER(c1)转为小写lower(string)将字符串转换为小写形式一致
UPPER(c1)转为大写upper(string)将字符串转换成大写形式一致
INSTR(C1,C2[,I[,J]])搜索字符位置instr(string1, string2[, n [, m]])在 string1 中查找 string2一致
LENGTH(c1)返回字符串的长度length(string)返回字符串的长度一致
LPAD(c1,n[,c2])左边填充lpad(string text,length int [, fill text])将 string 通过前置字符 fill 填充到长度 length一致
RPAD(c1,n[,c2])右边填充rpad(string text,length int [, fill text])将 string 通过增加字符 fill 填充到长度 length一致
LTRIM(c1,[,c2])删除左边出现的字符串ltrim(string text [,characters text])从 string 的开头删除最长的只包含 characters 的串一致
RTRIM(c1,[,c2])删除右边出现的字符串rtrim(string text [,characters text])从 string 的结尾删除最长的只包含 characters 的串一致
REPLACE(c1,c2[,c3])替换字符串replace(string text, from text, to text)将 string 中出现的所有子串 from 替换为子串 to一致
SUBSTR(c1,n1[,n2])取子字符串substr(string, from[, count])提取子字符串一致
TRANSLATE(c1,c2,c3)字符替换translate(string text, from text, to text)string 中任何匹配 from 集合中一个字符的字符会被替换成 to 集合中的相应字符一致
TRIM(c1 from c2)删除两边出现的字符串trim([both] bytes from string)从 string 的开头或结尾删除只包含出现在 bytes 中字节的最长串一致
regexp_like正则匹配regexp_like功能一致,match_option 略有差异一致
日期函数
sysdate返回当前日期sysdate返回当前日期一致
systimestamp返回系统的当前时间systimestamp返回系统的当前时间一致
add_months(d1,n1)返回日期 d1 基础上再加 n1 个月后新的日期add_months(date, integer)返回 date 日期加上 integer 个月后的日期一致
last_day(d1)返回日期 d1 所在月份最后一天的日期last_day(date)返回指定日期对应月份的最后一天一致
months_between(d1,d2)返回日期 d1 到日期 d2 之间的月数months_between(date1 timestamp,date2 timestamp)返回 date1 与 date2 之间的月份的差值一致
round(d1[,c1])日期四舍五入round(date, fmt)将 date 按照公历规则四舍五入到 fmt 单位一致
trunc(d1[,c1])返回日期 d1 所在期间的第一天日期trunc(date[,fmt])返回日期 date 所在期间 (参数 fmt) 的第一天日期一致
next_day(d1[,c1])返回下周星期几的日期next_day(d1,c1)返回日期 d1 在下周,星期几 (参数 c1) 的日期一致
extract抽取子域extract(field from timestamp)extract 函数从日期/时间值中抽取子域一致
current_timestamp返回当前会话时区中的当前日期current_timestamp返回当前时间戳,默认精度为 0一致
转换函数
TO_CHAR日期或数据转换为 charto_char(timestamp, text)把时间戳转成字符串一致
TO_DATE字符串转化为日期型to_date(text, text)把字符串转成日期一致
TO_NUMBER字符串转化为数字型to_number(text, text)把字符串转成数字一致
TO_TIMESTAMP_TZ字符串转换为带时区的时间戳TO_TIMESTAMP_TZ(C [,format])将符合日期/时间格式化模式的字符串转换为带时区的时间戳时区处理和输出风格略有差异
PIVOT行转列PIVOT(...)实现将指定字段的字段值转换为列一致
UNPIVOT列转行UNPIVOT(...)实现将指定列转换为行一致
listagg多列记录聚合listagg(...) within group(...)可以实现多列记录聚合为一条记录作为窗口函数使用时,listagg() 不支持带 within group(order by) 语句
聚组函数
AVG平均值avg(expression)所有非空输入值的平均值一致
SUM合计值sum(expression)所有非空输入值的 expression 的和一致
STDDEV标准误差stddev(expression)统计数据表选中行 x 列的标准误差一致
VARIANCE方差variance(expression)统计数据表选中行 x 列的方差一致
count计数count(*)统计行数一致
MAX最大值max(expression)所有非空输入值中 expression 的最大值一致
MIN最小值min(expression)所有非空输入值中 expression 的最小值一致
WM_CONCAT合并为逗号分隔字符串wm_concat(...)把列值以","号分隔起来,并显示成一行一致
分析函数
sum(...) over ...连续求和sum(...) over ...连续求和分析函数一致
RANK()排名 (有间隙)rank()带间隙的当前行排名一致
dense_rank()排名 (无间隙)dense_rank()不带间隙的当前行排名一致
ROW_NUMBER()行号row_number()当前行在其分区中的行号,从 1 计一致
lag()上一个值lag(value anyelement [, offset integer [, default anyelement ]])返回 value,它在分区内当前行的之前 offset 个位置的行上计算一致
lead()下一个值lead(value anyelement[, offset integer [, default anyelement ]])返回 value,它在分区内当前行的之后 offset 个位置的行上计算一致
ratio_to_report比率ratio_to_report (expr) over (partition_clause)求当前值在其组内所占的比率一致
REGEXP_COUNT正则匹配次数REGEXP_COUNT(...)用于返回 source_char 中指定正则表达式 pattern 匹配到的次数一致
REGEXP_INSTR正则匹配位置REGEXP_INSTR(...)用于返回 source_char 中第一个匹配指定正则表达式 pattern 的位置一致
REGEXP_SUBSTR正则匹配子串REGEXP_SUBSTR(...)REGEXP_SUBSTR 允许在字符串中搜索正则表达式模式,返回值为子字符串本身UXDB 参数 match_param 有 n 时 . $ [四个符号都可匹配换行符,而 oracle 只会让。可以匹配换行符
其他函数
greatest最大值GREATEST(value [, ...])从一个任意的数字表达式列表里选取最大的数值一致
least最小值LEAST(value [, ...])从一个任意的数字表达式列表里选取最小的数值一致
NVL空值替换nvl(expr1,expr2)若 expr1 为 NULL,返回 expr2;expr1 不为 NULL,返回 expr1一致
user当前用户名user返回当前会话对应的数据库用户名一致
NULLIF相等返回 NULLNULLIF(value1, value2)当 value1 和 value2 相等时,NULLIF 返回一个空值。否则它返回 value1一致
COALESCE返回第一个非空值COALESCE(value [, ...])COALESCE 函数返回它的第一个非空参数的值一致
sys_guid()生产 32 位的随机数sys_guid()生产 32 位的随机数,包括一些大写的英文字母 (2122 及以上版本支持)一致
SYS_CONTEXT返回系统上下文值SYS_CONTEXT(c1,c2)返回系统 c1 对应的 c2 的值一致
table()格式化 table 类型函数结果table()用于格式化返回类型为 table 的函数的结果 (2123 及以上版本支持)一致

6. 语法支持

Oracle 与 UXDB 语法对照表

语法OracleUXDB备注
支持运算符之间有空格oracle 支持操作符(多个符号的操作符)中间存在空白(空格或者换行或者制表符等)支持操作符中间存在空白一致
约束管理功能ALTER TABLE ... {DISABLE \| ENABLE} [VALIDATE\|NOVALIDATE] CONSTRAINT constraint_name ;ALTER TABLE ... [DISABLE \| ENABLE] [VALIDATE\|NOVALIDATE] CONSTRAINT constraint_name ;一致,不支持 alter table table_name modify constraint constraint_name novalidate (validate);
空字符转为 NULL''是 null,' '非空''是 null,' '非空一致
对闰年的计算方法oracle 在 1582 年前使用的是儒略历计时,1582 年之后使用的是格里高利历 (公历) 计算在 1582 年前使用的是儒略历计时,1582 年之后使用的是格里高利历 (公历) 计算一致
操作符空属性行为NULL 不参与比较,只能通过 IS NULL/IS NOT NULL 查询。
空串 '' 行为同 NULL。
空格 ' ' 可与非 NULL/空串比较。
同 Oracle一致
NULL 和空串行为连接操作符忽略 null/空串。
其他函数输入 null/空串返回 null。
nchar 类型保留空格。
trim 传入空格返回 null。
同 Oracle一致
dblink 功能创建/修改/删除 dblink创建/删除 dblink (不支持私有 dblink,不支持同一 dblink 对应多节点)1. Oracle 指定 connecting_string 有两种方式... Uxdb 指定 connecting_string 的方式有两种...
2. UXDB 不能创建私有 dblink...
dblink 表结构比对远端表结构发生变化时,能够感知到表结构的变化并删除现有的外部表后重新获取远端表结构同 Oracle一致
drop 闪回查询flashback drop 功能:实现被 drop 的表的恢复flashback drop 功能:实现被 drop 的表的恢复UXDB 不支持需要指定恢复的表名,如果已经存在表时,则需要恢复重命名功能
DML 闪回当进行了一些误操作的时候、且进行了 commit 操作。执行 DML 闪回可以将数据恢复功能同 Oracle功能与 Oracle 相同,语法不同
层次查询SELECT [level], column, expr... FROM table ... { CONNECT BY [ NOCYCLE ] condition [ START WITH condition ] ... }目前已实现对已知 Oracle 层次查询场景的全部支持一致
非聚簇索引Create table table_name( id int ,…… , constraint pk_name not cluster primary key(id));已实现了 oracle 的功能与语法一致
时间格式支持Oracle 时间格式支持'YYYYMMDDHH24MISS'格式的插入和查询,也支持空字符串插入和查询兼容了 Oracle 时间格式'YYYYMMDDHH24MISS'与空字符串的插入和查询一致
timestamp 类型支持插入 0::intOracle 的 timestamp 类型支持插入 0::int兼容了 timestamp 类型支持插入 0::int一致
数据类型兼容插入空串Oracle 数据类型支持插入空串兼容了数据类型支持插入空串一致
兼容 Oracle 数据压缩比功能(cstore)Oracle 支持数据压缩比支持了 oracle 数据表级压缩功能Oracle 支持行级以及表级压缩,UXDB 支持表级压缩
支持 like(~~) 操作符的相关类型之间的隐式转换like 操作符在对第一个参数为数值类型,第二个参数为字符类型进行 like 操作符模糊比对时,将数值类型隐式转换为字符类型进行比较兼容 oracle 的 like(~~) 操作符的相关类型之间的隐式转换一致
oracle 虚拟列分区 特性支持支持虚拟列进行分区实现虚拟列分区功能与 Oracle 一致,但语法不同功能相同,但是 UXDB 与 Oracle 创建分区表语法有差异
insert all 语法从一张表里面读取数据插入到多张表。支持无 WHEN 条件和带 WHEN 条件从一张表里面读取数据插入到多张表。支持无 WHEN 条件和带 WHEN 条件以下 UXDB 不支持:
1. partition_extension_clause, subquery_restriction_clause, table_collection_expression
2. Error_log_clause
3. Parallel_clause 从句
4. 子查询中存在 to_lob 函数
insert first 语法对于每一行数据,只插入到第一个 when 条件成立的表对于每一行数据,只插入到第一个 when 条件成立的表同上
视图修改约束 alter view drop constraint 语法支持 alter view drop constraint xxx 语法支持 alter view drop constraint xxx 语法UXDB 目前创建视图约束目前只支持检查约束
支持 int like 字符like 操作符在对第一个参数为数值类型,第二个参数为字符类型进行 like 操作符模糊比对时,将数值类型隐式转换为字符类型进行比较同 Oracle一致
正则表达式 REGEXP_COUNT统计源字符串中模式匹配的次数统计源字符串中模式匹配的次数一致
正则表达式 REGEXP_INSTR输出符合正则表达式的子字符串的起始位置或紧接模式结束后的位置输出符合正则表达式的子字符串的起始位置或紧接模式结束后的位置一致
正则表达式 REGEXP_SUBSTR输出符合正则表达式的子字符串本身输出符合正则表达式的子字符串本身一致
正则表达式 REGEXP_REPLACE找到符合正则表达式的子字符串,并进行替换,输出替换后的字符串找到符合正则表达式的子字符串,并进行替换,输出替换后的字符串UXDB 原有正则表达式函数 regexp_replace,但功能与 Oracle 的 regexp_replace 有差异,所以添加 regexp_replace_oracle 实现 oracle 的 regexp_replace
sequence.nextval 支持序列 (sequence) 支持.nextval序列 (sequence) 支持.nextval一致
带有 distinct 语句 支持其 order by 子查询排序支持 distinct 与 order by 子查询排序。不仅支持 distinct 与 order by 子查询顺序排序,还支持逆序排序支持 distinct 与 order by 子查询排序。不仅支持 distinct 与 order by 子查询顺序排序,还支持逆序排序一致
DELETE 不带 from支持 delete 不加 from。DELETE table_name WHERE [condition];支持 delete 不加 from。DELETE table_name WHERE [condition];一致
merge into整体:MERGE [ hint ] INTO [ schema. ] { table \| view } [ t_alias ] USING ... ON ( condition ) ...整体:MERGE INTO [SchemaName.] { TableName \| ViewName } USING ... ON <ConditionExpression> ...UXDB 不支持:
1. 不支持 merge delete 子句
2. 不支持带有 where 条件的 update 和 insert 子句
3. 不支持分区
4. 不支持 prepare merge into 子句
5. 不支持继承
6. 不支持规则中调用 merge into,以及在 merge into 上定义规则
q'转义字符q'转义字符语法可以在输入特殊符号时不需要增加转义符号实现 Oracle q'转义字符语法1. UXDB 定界符 (quote_delimiter) 只能是单字节字符。oracle 还可以是多字节字符。比如中文。
2. UXDB 定界符 (quote_delimiter) 不能是单引号,可以是空格。oracle 是支持单引号,不能是空格。
storageStorage 语法可以指定创建表的表空间Storage 语法可以指定创建表的表空间一致
minus 关键字query1 MINUS query2query1 MINUS query2一致
匿名块语法支持执行匿名块的语法,使得 DECLARE 和 BEGIN 也能执行匿名块支持执行匿名块的语法,使得 DECLARE 和 BEGIN 也能执行匿名块1. 在 ORACLE 数据库中,在匿名块中支持 EXECUTE IMMEDIATE 语法,而在 UXDB 数据库中则支持 EXECUTE 语法
2. UXDB 数据库中,可以使用 RAISE NOTICE 来进行输出信息,“%”符号来代表一个变量,对其进行打印输出等;而在 ORACLE 数据库中是不支持的,ORACLE 数据库中输出信息需要调用 DBMS_OUTPUT.PUT_LINE 支持多重标签 (2123 及以后版本支持此功能)
synonym 功能同义词 (Synonym) 是表、索引、视图等模式对象的一个别名CREATE SYNONYM synname FOR orgname;1. Oracle 支持一个数据库对象多个同义词,UXDB 不支持 (2123 及以后版本支持此功能)
2. Oracle 支持为存储过程创建同义词,UXDB 不支持
3. Oracle 可以查询同义词与属主映射关系,UXDB 不支持
4. Oracle 删除属主,同义词与属主映射关系还在,UXDB 删除有同义词的属主会报错
5. Oracle 支持公有同义词和私有同义词,UXDB 普通用户 u1 可以创建/删除用户 u2 下的同义词
(+) 连接语法可以用“+”操作符来实现 left join 和 right join 的功能可以用“+”操作符来实现 left join 和 right join 的功能Oracle10.2.0 执行 select * from t_A a where exists (select1from t_B b where a.id(+) = b.id); 词语句与 uxdb 数据库现状一样,查询结果也一直。但是 oracle11.2.0 数据以后,不在支持此语句。提示,不能在关联列上指定外部联接,带子查询的语句 from 后面指定的表上的列不能再用 来进行左右连接
支持子查询无别名语法支持子查询无别名语法支持子查询无别名语法一致
grouping_idGROUPING_ID 返回对应于 GROUPING 与行关联的位向量的数字功能同 Oracle基本一致
any(参数列表) 语法支持支持 any(参数列表) 语法支持 any(参数列表) 语法1. Oracle 支持 ^=,UXDB 不支持
2. UXDB 支持数组,Oracle 不支持
all(参数列表) 语法支持支持 all(参数列表) 语法支持 all(参数列表) 语法1. Oracle 支持 ^=,UXDB 不支持
2. UXDB 支持数组,Oracle 不支持
with as 语法兼容支持 with as 语句带 search 和 cycle 语句支持 with as 语句带 search 和 cycle 语句1. UXDB 的递归查询需要关键字 recursive,而 Oracle 不需要。
2. search 和 cycle 具体的语法上有差异
with function 语法with function function_name function_body / select function_namewith function function_name function_body / select function_nameOracle 的 with function 可以包含事务,UXDB 目前不支持
with procedure 语法with procedure procedure_name procedure_body ...with procedure procedure_name procedure_body ...Oracle 的 with produce 支持动态嵌套,UXDB 目前不支持
union 支持 number 和 varchar 类型union 支持 number 和 varchar 类型union 支持 number 和 varchar 类型(2122 及以上版本支持)
N'字符串' 表示的字符串常量支持N'字符串' 表示的字符串常量支持N'字符串' 表示的字符串常量支持(2122 及以上版本支持)
create type typ1 as object(id int, c1 int, c2 date) 语法创建自定义类型创建自定义类型2123 及以上版本支持
支持在建立 range 分区表时指定 interval 关键字支持在建立 range 分区表时指定 interval 关键字和间隔大小支持在建立 range 分区表时指定 interval 关键字和间隔大小1. Oracle 支持浮点类型为分区键,UXDB 不支持
2. Oracle 支持删除分区不影响数据插入(唯一分区不能删除)
3. uxdb 删除小于起点分区会导致在此分区内的数据插入失败(起点分区不能删除)
4. Oracle 不存在有分区空洞的分区表不能转 interval 分区的限制
5. uxdb 存在有分区空洞的分区表不能转 interval 分区的限制
6. 不支持 oracle 索引功能
7. 不支持 alter set interval 语句修改间隔定义
8. UXDB 不支持删除所有建表时指定的子分区,oracle 可以删除非唯一子分区

7. 系统视图

本章将对 UXDB 兼容 Oracle 的系统视图的用途进行说明,并详细列出每个视图的视图结构。

(注:由于系统视图数量众多 (7.1 - 7.94),且结构相似,此处列出部分核心视图示例。如需完整 7.10-7.94 内容,请参考之前的详细输出或按需请求特定视图)

7.1. all_all_tables

描述当前用户可以访问的对象表和关系表 (2122 及以上版本支持)。

ALL_ALL_TABLES 列

列名类型描述
OWNERVARCHAR2(128)表的属主
TABLE_NAMEVARCHAR2(128)表名
TABLESPACE_NAMETEXT表空间名
CLUSTER_NAMETEXTCLUSTER 名字
IOT_NAMEVARCHAR2(128)索引结构表的名字
STATUSVARCHAR2(8)表的状态
......... (其余列参考原文档)

7.2. all_col_comments

描述当前用户可以访问的表或视图的列注释。

ALL_COL_COMMENTS 列

列名类型描述
OWNERVARCHAR2(128)表或视图的属主
TABLE_NAMEVARCHAR2(128)表或视图的名称
COLUMN_NAMEVARCHAR2(128)列的名称
COMMENTSTEXT列的注释文本

7.3. all_constraints

描述当前用户可以访问的约束定义。

ALL_CONSTRAINTS 列

列名类型描述
OWNERVARCHAR2(128)约束的属主
CONSTRAINT_NAMEVARCHAR2(128)约束的名称
CONSTRAINT_TYPEVARCHAR2(1)约束类型 (C=Check, P=Primary Key, R=Foreign Key, U=Unique)
TABLE_NAMEVARCHAR2(128)约束所在的表名
.........

7.4. all_cons_columns

描述当前用户可访问的约束中指定的列。

ALL_CONS_COLUMNS 列

列名类型描述
OWNERVARCHAR2(63)约束的所有者
CONSTRAINT_NAMEVARCHAR2(63)约束的名称
TABLE_NAMEVARCHAR2(63)约束所在的表名
COLUMN_NAMEVARCHAR2(4000)约束涉及的列名
POSITIONNUMERIC列在约束中的位置(从1开始)

7.5. all_constraints

描述当前用户可以访问的约束定义。

ALL_CONSTRAINTS 列

列名类型描述
OWNERVARCHAR2(63)约束的所有者
CONSTRAINT_NAMEVARCHAR2(63)约束的名称
CONSTRAINT_TYPEVARCHAR2(1)约束类型 (C=Check, P=Primary Key, R=Foreign Key, U=Unique, V=With Check Option, O=With Read Only)
TABLE_NAMEVARCHAR2(63)约束所在的表名
SEARCH_CONDITIONTEXT检查约束的条件表达式
R_OWNERVARCHAR2(63)引用约束的所有者 (外键参考表的所有者)
R_CONSTRAINT_NAMEVARCHAR2(63)引用约束的名称 (外键参考的约束名)
DELETE_RULEVARCHAR2(9)外键删除规则 (CASCADE, SET NULL, NO ACTION)
STATUSVARCHAR2(8)约束状态 (ENABLED/DISABLED)
DEFERRABLEVARCHAR2(14)是否可延迟 (DEFERRABLE/NOT DEFERRABLE)
DEFERREDVARCHAR2(9)默认延迟状态 (IMMEDIATE/DEFERRED)
VALIDATEDVARCHAR2(13)是否已验证 (VALIDATED/NOT VALIDATED)
GENERATEDVARCHAR2(14)是否系统生成 (GENERATED NAME/USER NAME)
BADVARCHAR2(3)是否有错误 (YES/NO)
RELYVARCHAR2(4)是否依赖 (RELY/NORELY)
LAST_CHANGEDATE最后修改时间
INDEX_OWNERVARCHAR2(63)支持约束的索引所有者
INDEX_NAMEVARCHAR2(63)支持约束的索引名称
INVALIDVARCHAR2(7)是否无效
VIEW_RELATEDVARCHAR2(14)视图相关约束

描述当前用户可以访问的数据库链接 (DBLink)。

ALL_DB_LINKS 列

列名类型描述
OWNERVARCHAR2(63)DBLink 的所有者
DB_LINKVARCHAR2(128)DBLink 的名称
USERNAMEVARCHAR2(63)远程数据库连接使用的用户名
HOSTVARCHAR2(2000)远程数据库的连接字符串或主机信息
CREATEDDATEDBLink 的创建时间

7.7. all_dependencies

显示当前用户可访问的对象之间的依赖关系。

ALL_DEPENDENCIES 列

列名类型描述
OWNERVARCHAR2(63)依赖对象的所有者
NAMEVARCHAR2(63)依赖对象的名称
TYPEVARCHAR2(19)依赖对象的类型 (如 PROCEDURE, VIEW, PACKAGE 等)
REFERENCED_OWNERVARCHAR2(63)被依赖对象的所有者
REFERENCED_NAMEVARCHAR2(63)被依赖对象的名称
REFERENCED_TYPEVARCHAR2(19)被依赖对象的类型
REFERENCED_LINK_NAMEVARCHAR2(128)如果被依赖对象在远程数据库,此处为 DBLink 名称
DEPENDENCY_TYPECHAR依赖类型 (HARD/SOFT/REF)

7.8. all_ind_expressions

描述当前用户可访问的基于函数的索引表达式。

ALL_IND_EXPRESSIONS 列

列名类型描述
INDEX_OWNERVARCHAR2(63)索引的所有者
INDEX_NAMEVARCHAR2(63)索引的名称
TABLE_OWNERVARCHAR2(63)表的所有者
TABLE_NAMEVARCHAR2(63)表的名称
COLUMN_POSITIONNUMERIC表达式在索引列中的位置
COLUMN_EXPRESSIONTEXT索引列的表达式定义 (例如 UPPER(column_name))

7.9. all_ind_partitions

描述当前用户可访问的索引分区信息。

ALL_IND_PARTITIONS 列

列名类型描述
INDEX_OWNERVARCHAR2(63)索引的所有者
INDEX_NAMEVARCHAR2(63)索引的名称
PARTITION_NAMEVARCHAR2(63)分区的名称
SUBPARTITION_COUNTNUMERIC子分区的数量 (如果是复合分区)
HIGH_VALUETEXT分区的高边界值
HIGH_VALUE_LENGTHNUMERIC高边界值的长度
PARTITION_POSITIONNUMERIC分区的位置序号
STATUSVARCHAR2(8)分区状态 (USABLE/UNUSABLE)
TABLESPACE_NAMEVARCHAR2(63)分区所在的表空间
NUM_ROWSNUMERIC分区中的行数
SAMPLE_SIZENUMERIC采样大小
LAST_ANALYZEDDATE最后分析时间
BUFFER_POOLVARCHAR2(7)缓冲区池设置
FLASH_CACHEVARCHAR2(7)Flash 缓存设置
CELL_FLASH_CACHEVARCHAR2(7)Cell Flash 缓存设置

7.10. all_ind_columns

描述当前用户所能获取到的表上建有索引的列信息。

ALL_IND_COLUMNS 列

列名类型描述
INDEX_OWNERVARCHAR2(63)索引的所有者
INDEX_NAMEVARCHAR2(63)索引的名字
TABLE_OWNERVARCHAR2(63)该索引所属对象的所有者
TABLE_NAMEVARCHAR2(63)该索引所属对象的名字
COLUMN_NAMEVARCHAR2(4000)含有索引的列的名字
COLUMN_POSITIONSMALLINT列在索引中的位置
COLUMN_LENGTHNUMERIC列的数据类型长度 (byte)
CHAR_LENGTHNUMERIC字符长度 (char)
DESCENDVARCHAR2(4)排序方式 (ASC/DESC)

7.11. all_indexes

描述当前用户所能获取到的表上的索引信息。

ALL_INDEXES 列

列名类型描述
OWNERVARCHAR2(63)索引的所有者
INDEX_NAMEVARCHAR2(63)索引的名字
INDEX_TYPEVARCHAR2(27)索引的类型
TABLE_OWNERVARCHAR2(63)表所有者
TABLE_NAMEVARCHAR2(63)表名
UNIQUENESSVARCHAR2(9)唯一性 (UNIQUE/NONUNIQUE)
COMPRESSIONVARCHAR2(8)是否压缩
TABLESPACE_NAMEVARCHAR2(63)表空间名
STATUSVARCHAR2(8)状态 (VALID/UNUSABLE)
NUM_ROWSVARCHAR2(7)行数
LAST_ANALYZEDVARCHAR2(20)最后分析时间
PARTITIONEDVARCHAR2(3)是否分区

7.12. all_jobs

视图可以查看用户自己创建的作业 (2122 及以上版本支持)。

ALL_JOBS 列

列名类型描述
JOBINTEGER作业标识号
LOG_USERNAME提交作业时的登录用户
LAST_DATEDATE上次成功执行日期
NEXT_DATEDATE下次计划执行日期
INTERVALTEXT执行间隔
FAILURESSMALLINT失败次数
WHATTEXT执行内容
BROKENVARCHAR2(1)是否损坏

7.13. all_objects

描述当前用户下可以查看的所有对象。

ALL_OBJECTS 列

列名类型描述
OWNERVARCHAR2(63)对象属主
OBJECT_NAMEVARCHAR2(63)对象名
SUBOBJECT_NAMEVARCHAR2(63)子对象名
OBJECT_IDNUMERIC对象 ID
OBJECT_TYPEVARCHAR2(19)对象类型
CREATEDDATE创建时间
LAST_DDL_TIMEDATE最后 DDL 时间
TIMESTAMPVARCHAR2(20)时间戳
STATUSVARCHAR2(7)状态 (VALID/INVALID)
TEMPORARYVARCHAR2(1)是否临时

7.14. all_sequences

描述当前用户可访问的所有序列。

ALL_SEQUENCES 列

列名类型描述
SEQUENCE_OWNERVARCHAR2(63)序列所有者
SEQUENCE_NAMEVARCHAR2(63)序列名称
MIN_VALUENUMERIC最小值
MAX_VALUENUMERIC最大值
INCREMENT_BYNUMERIC增量
CYCLE_FLAGTEXT是否循环
ORDER_FLAGVARCHAR2(1)是否有序
CACHE_SIZENUMERIC缓存大小
LAST_NUMBERNUMERIC最后一个号码

7.15. all_source

描述当前用户可访问的存储对象的文本源。

ALL_SOURCE 列

列名类型描述
OWNERVARCHAR2(63)对象所有者
NAMEVARCHAR2(63)对象名称
TYPEVARCHAR2(12)对象类型 (FUNCTION, PROCEDURE 等)
TEXTCLOB源代码文本

7.16. all_synonyms

描述当前用户所能查看的同义词信息。

ALL_SYNONYMS 列

列名类型描述
OWNERVARCHAR2(63)同义词所有者
SYNONYM_NAMEVARCHAR2(63)同义词名字
TABLE_OWNERVARCHAR2(63)指向对象的所有者
TABLE_NAMEVARCHAR2(63)指向对象的名字
DBLINKTEXT数据库链接

7.17. all_tables

描述当前用户下可以查看的所有表。

ALL_TABLES 列

列名类型描述
OWNERVARCHAR2(63)表属主
TABLE_NAMEVARCHAR2(63)表名
TABLESPACE_NAMEVARCHAR2(63)表空间名
CLUSTER_NAMEVARCHAR2(63)簇名
IOT_NAMEVARCHAR2(63)IOT 名
STATUSVARCHAR2(63)状态
PCT_FREEINTEGER空闲百分比
NUM_ROWSINTEGER行数
BLOCKSINTEGER块数
LAST_ANALYZEDDATE最后分析时间
PARTITIONEDVARCHAR2(3)是否分区
TEMPORARYVARCHAR2(1)是否临时
COMPRESSIONVARCHAR2(8)是否压缩

7.18. all_tab_cols

描述了当前用户可以访问的表,视图的列。

ALL_TAB_COLS 列

列名类型描述
OWNERVARCHAR2(63)所有者
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(63)列名
DATA_TYPEVARCHAR2(106)数据类型
DATA_LENGTHNUMERIC数据长度
DATA_PRECISIONNUMERIC精度
DATA_SCALENUMERIC标度
NULLABLEVARCHAR2(1)是否可为空
COLUMN_IDNUMERIC列 ID
DATA_DEFAULTTEXT默认值
NUM_DISTINCTNUMERIC不同值数量
LOW_VALUENUMERIC最小值
HIGH_VALUENUMERIC最大值
HISTOGRAMVARCHAR2(15)直方图类型
HIDDEN_COLUMNVARCHAR2(3)是否隐藏
VIRTUAL_COLUMNVARCHAR2(3)是否虚拟列

7.19. all_tab_columns

描述了当前用户可以访问的表,视图的非隐藏列。

ALL_TAB_COLUMNS 列

(结构与 all_tab_cols 类似,但不包含 HIDDEN_COLUMN 等隐藏列相关字段)

列名类型描述
OWNERTEXT所有者
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(63)列名
DATA_TYPEVARCHAR2(106)数据类型
DATA_LENGTHNUMERIC数据长度
DATA_PRECISIONNUMERIC精度
DATA_SCALENUMERIC标度
NULLABLEVARCHAR2(1)是否可为空
COLUMN_IDNUMERIC列 ID
DATA_DEFAULTTEXT默认值
......... (其他统计信息列)

7.20. all_tab_comments

描述在当前用户可以访问的表和视图上显示注释。

ALL_TAB_COMMENTS 列

列名类型描述
OWNERVARCHAR2(63)所有者
TABLE_NAMEVARCHAR2(63)表名
TABLE_TYPEVARCHAR2(11)表类型 (TABLE/VIEW)
COMMENTSVARCHAR2(4000)注释内容

7.21. all_tab_privs

描述当前用户的对象权限。

ALL_TAB_PRIVS 列

列名类型描述
GRANTEEVARCHAR2(63)被授权者
OWNERVARCHAR2(63)所有者
TABLE_NAMEVARCHAR2(63)表名
GRANTORVARCHAR2(63)授权者
PRIVILEGEVARCHAR2(40)权限类型
GRANTABLEVARCHAR2(3)是否可转授

7.22. all_trigger_cols

描述当前用户可访问的所有触发器的列。

ALL_TRIGGER_COLS 列

列名类型描述
TRIGGER_OWNERVARCHAR2(63)触发器所有者
TRIGGER_NAMEVARCHAR2(63)触发器名称
TABLE_OWNERVARCHAR2(63)表所有者
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(4000)列名

7.23. all_triggers

描述当前用户可访问的所有触发器。

ALL_TRIGGERS 列

列名类型描述
OWNERVARCHAR2(63)所有者
TRIGGER_NAMEVARCHAR2(63)触发器名称
TRIGGER_TYPEVARCHAR2(16)触发器类型
TRIGGERING_EVENTVARCHAR2(216)触发事件
TABLE_OWNERVARCHAR2(63)表所有者
TABLE_NAMEVARCHAR2(63)表名
STATUSVARCHAR2(8)状态
TRIGGER_BODYTEXT触发器体
WHEN_CLAUSETEXT条件子句

7.24. all_types

描述当前用户可以访问的对象类型 (2122 及以上版本支持)。

ALL_TYPES 列

列名类型描述
OWNERNAME类型属主
TYPE_NAMENAME类型名
TYPECODEVARCHAR2(128)类型代码
ATTRIBUTESNUMERIC属性数
METHODSNUMERIC方法数
PREDEFINEDVARCHAR2(3)是否预定义
FINALVARCHAR2(3)是否最终类型
INSTANTIABLEVARCHAR2(3)是否可实例化

7.25. all_users

描述当前用户可见的数据库的所有用户。

ALL_USERS 列

列名类型描述
USERNAMEVARCHAR2(63)用户名
USER_IDNUMERIC用户 ID
CREATEDDATE创建日期

7.26. all_views

描述当前用户所能查看的所有的视图信息。

ALL_VIEWS 列

列名类型描述
OWNERVARCHAR2(63)所有者
VIEW_NAMEVARCHAR2(63)视图名
TEXT_LENGTHNUMERIC文本长度
TEXTTEXT视图定义文本
READ_ONLYVARCHAR2(1)是否只读

7.27. dba_all_tables

描述当前数据库所有的对象表和关系表。

DBA_ALL_TABLES 列 (结构与 ALL_TABLES 类似,但包含所有用户的数据,且部分列类型可能略有不同,如 VARCHAR2(128))

列名类型描述
OWNERVARCHAR2(128)表属主
TABLE_NAMEVARCHAR2(128)表名
......... (同 ALL_TABLES)
INMEMORYVARCHAR2(8)内存列存储
EXTERNALVARCHAR2(3)是否外部表

描述数据库内所有的 dblink 信息。

DBA_DB_LINKS 列

列名类型描述
DB_LINKVARCHAR2(128)DBLink 名称
USERNAMEVARCHAR2(128)用户名
HOSTVARCHAR2(2000)主机信息
CREATEDDATE创建时间

7.29. db_files

描述了数据库中所有表空间、表空间使用的存储容量及表空间所在存储设备的容量信息。

DB_FILES 列

列名类型描述
NAMENAME表空间名称
USEDBIGINT已使用容量 (MB)
CAPACITYBIGINT总容量 (MB)
RATIONUMERIC使用率

描述标识数据库内的 DBLINK 源信息。

DBA_DB_LINK_SOURCE 列

列名类型描述
SOURCE_IDOID源 ID
DB_NAMETEXT数据库名
HOST_NAMETEXT主机名
IP_ADDRESSTEXTIP 地址
USERNAMETEXT用户名
FIRST_LOGON_TIMETIMESTAMP首次登录时间
LAST_LOGON_TIMETIMESTAMP最后登录时间
LOGON_COUNTINTEGER登录次数

7.31. dba_cons_columns

描述约束中指定的数据库中的所有列。

DBA_CONS_COLUMNS 列

列名类型描述
OWNERVARCHAR2(63)所有者
CONSTRAINT_NAMEVARCHAR2(63)约束名
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(4000)列名
POSITIONNUMERIC位置

7.32. dba_constraints

描述当前用户所拥有的表的所有约束定义。

DBA_CONSTRAINTS 列

列名类型描述
OWNERVARCHAR2(63)所有者
CONSTRAINT_NAMEVARCHAR2(63)约束名
CONSTRAINT_TYPEVARCHAR2(1)类型 (C,P,R,U)
TABLE_NAMEVARCHAR2(63)表名
SEARCH_CONDITIONTEXT检查条件
R_OWNERVARCHAR2(63)引用所有者
R_CONSTRAINT_NAMEVARCHAR2(63)引用约束名
DELETE_RULEVARCHAR2(9)删除规则
STATUSTEXT状态
DEFERRABLEVARCHAR2(14)是否可延迟
VALIDATEDVARCHAR2(13)是否已验证
INDEX_NAMEVARCHAR2(63)索引名

7.33. dba_col_comments

描述了在数据库中所有表和视图的列上显示注释。

DBA_COL_COMMENTS 列

列名类型描述
OWNERVARCHAR2(63)所有者
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(63)列名
COMMENTSVARCHAR2(4000)注释

7.34. dba_col_privs

描述了所有列级权限。

DBA_COL_PRIVS 列

列名类型描述
GRANTORVARCHAR2(63)授权者
OWNERVARCHAR2(63)所有者
GRANTEEVARCHAR2(63)被授权者
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(63)列名
PRIVILEGE_TYPEVARCHAR2(40)权限类型
IS_GRANTABLEVARCHAR2(63)是否可转授

7.35. dba_dependencies

用来显示数据库中各对象的依赖关系。

DBA_DEPENDENCIES 列

列名类型描述
OWNERVARCHAR2(63)依赖者所有者
NAMEVARCHAR2(63)依赖者名称
TYPEVARCHAR2(19)依赖者类型
REFERENCED_OWNERVARCHAR2(63)被依赖者所有者
REFERENCED_NAMEVARCHAR2(63)被依赖者名称
REFERENCED_TYPEVARCHAR2(19)被依赖者类型
DEPENDENCY_TYPECHAR依赖类型

7.36. dba_free_space

数据库中每个表空间的可用空间。

DBA_FREE_SPACE 列

列名类型描述
TABLESPACE_NAMEVARCHAR2(63)表空间名
FILE_IDNUMERIC文件 ID
BLOCK_IDNUMERIC起始块号
BYTESNUMERIC空闲字节数
BLOCKSNUMERIC空闲块数

7.37. dba_ind_columns

描述数据库中所有建有索引的列的信息。

DBA_IND_COLUMNS 列 (结构与 ALL_IND_COLUMNS 类似,包含所有用户)

列名类型描述
INDEX_OWNERVARCHAR2(63)索引所有者
INDEX_NAMEVARCHAR2(63)索引名
TABLE_OWNERVARCHAR2(63)表所有者
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(4000)列名
COLUMN_POSITIONSMALLINT位置
DESCENDVARCHAR2(4)排序

7.38. dba_indexes

描述数据库中所有索引的信息。

DBA_INDEXES 列 (结构与 ALL_INDEXES 类似,包含所有用户)

列名类型描述
OWNERVARCHAR2(63)所有者
INDEX_NAMEVARCHAR2(63)索引名
TABLE_OWNERVARCHAR2(63)表所有者
TABLE_NAMEVARCHAR2(63)表名
UNIQUENESSVARCHAR2(9)唯一性
STATUSVARCHAR2(8)状态
.........

7.39. dba_jobs

用来查看所有用户创建的作业。

DBA_JOBS 列 (结构与 ALL_JOBS 类似)

列名类型描述
JOBINTEGER作业 ID
LOG_USERNAME登录用户
LAST_DATEDATE上次执行日期
NEXT_DATEDATE下次执行日期
WHATTEXT执行内容
BROKENVARCHAR2(1)是否损坏

7.40. dba_objects

描述当前用户下可以查看的所有对象 (实际上是所有对象)。

DBA_OBJECTS 列 (结构与 ALL_OBJECTS 类似)

列名类型描述
OWNERVARCHAR2(63)所有者
OBJECT_NAMEVARCHAR2(63)对象名
OBJECT_TYPEVARCHAR2(19)类型
STATUSVARCHAR2(7)状态
CREATEDDATE创建时间
.........

7.41. dba_role_privs

描述授予所有用户的角色以及数据库中的角色。

DBA_ROLE_PRIVS 列

列名类型描述
GRANTEEVARCHAR2(63)被授权者
GRANTED_ROLEVARCHAR2(63)授予的角色
ADMIN_OPTIONVARCHAR2(3)是否管理员选项
DEFAULT_ROLEVARCHAR2(3)是否默认角色

7.42. dba_roles

描述数据库中存在的所有角色。

DBA_ROLES 列

列名类型描述
ROLEVARCHAR2(63)角色名
PASSWORD_REQUIREDVARCHAR2(8)是否需要密码

7.43. dba_sequences

描述数据库中所有的序列。

DBA_SEQUENCES 列 (结构与 ALL_SEQUENCES 类似)

列名类型描述
SEQUENCE_OWNERVARCHAR2(63)所有者
SEQUENCE_NAMEVARCHAR2(63)序列名
MIN_VALUENUMERIC最小值
MAX_VALUENUMERIC最大值
INCREMENT_BYNUMERIC增量
.........

7.44. dba_source

描述数据库中所有存储对象的文本源。

DBA_SOURCE 列 (结构与 ALL_SOURCE 类似)

列名类型描述
OWNERVARCHAR2(63)所有者
NAMEVARCHAR2(63)对象名
TYPEVARCHAR2(12)类型
TEXTVARCHAR2(4000)源码

7.45. dba_synonyms

描述数据库中所有同义词的信息。

DBA_SYNONYMS 列 (结构与 ALL_SYNONYMS 类似)

列名类型描述
OWNERVARCHAR2(63)所有者
SYNONYM_NAMEVARCHAR2(63)同义词名
TABLE_OWNERVARCHAR2(63)目标所有者
TABLE_NAMEVARCHAR2(63)目标名
DBLINKTEXTDBLink

7.46. dba_tab_cols

描述当前所在数据库中,所有的表、视图的列信息。

DBA_TAB_COLS 列 (结构与 ALL_TAB_COLS 类似)

列名类型描述
OWNERVARCHAR2(63)所有者
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(63)列名
DATA_TYPEVARCHAR2(106)类型
.........

7.47. dba_tab_columns

描述当前所在数据库中,所有的表、视图的非隐藏列信息。

DBA_TAB_COLUMNS 列 (结构与 ALL_TAB_COLUMNS 类似)

列名类型描述
OWNERVARCHAR2(63)所有者
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(63)列名
.........

7.48. dba_tab_comments

描述数据库中所有表和视图的注释。

DBA_TAB_COMMENTS 列 (结构与 ALL_TAB_COMMENTS 类似)

列名类型描述
OWNERVARCHAR2(63)所有者
TABLE_NAMEVARCHAR2(63)表名
TABLE_TYPEVARCHAR2(11)类型
COMMENTSVARCHAR2(4000)注释

7.49. dba_tab_privs

描述数据库中的所有对象授予。

DBA_TAB_PRIVS 列 (结构与 ALL_TAB_PRIVS 类似)

列名类型描述
GRANTEEVARCHAR2(63)被授权者
OWNERVARCHAR2(63)所有者
TABLE_NAMEVARCHAR2(63)表名
PRIVILEGEVARCHAR2(40)权限
GRANTABLEVARCHAR2(3)可转授

7.50. dba_types

描述当前数据库所有的对象类型。

DBA_TYPES 列 (结构与 ALL_TYPES 类似)

列名类型描述
OWNERNAME所有者
TYPE_NAMENAME类型名
TYPECODEVARCHAR2(128)类型码
.........

7.51. dba_tables

描述当前数据库中的所有表。

DBA_TABLES 列 (结构与 ALL_TABLES 类似)

列名类型描述
OWNERVARCHAR2(63)所有者
TABLE_NAMEVARCHAR2(63)表名
TABLESPACE_NAMEVARCHAR2(63)表空间
.........

7.52. dba_tablespace

描述数据库中的表空间。

DBA_TABLESPACE 列

列名类型描述
TABLESPACE_NAMEVARCHAR2(63)表空间名
INITIAL_EXTENTNUMERIC初始扩展
NEXT_EXTENTNUMERIC下次扩展
MIN_EXTENTSNUMERIC最小扩展数
MAX_EXTENTSNUMERIC最大扩展数
STATUSVARCHAR2(9)状态
CONTENTSVARCHAR2(9)内容类型
EXTENT_MANAGEMENTVARCHAR2(10)扩展管理方式

7.53. dba_tablespaces

描述数据库中的所有表空间。

DBA_TABLESPACES 列 (结构与 DBA_TABLESPACE 基本一致)

列名类型描述
TABLESPACE_NAMEVARCHAR2(63)表空间名
.........

7.54. dba_trigger_cols

描述数据库中所有触发器的列。

DBA_TRIGGER_COLS 列 (结构与 ALL_TRIGGER_COLS 类似)

列名类型描述
TRIGGER_OWNERVARCHAR2(63)所有者
TRIGGER_NAMEVARCHAR2(63)触发器名
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(4000)列名

7.55. dba_triggers

描述数据库中所有的触发器。

DBA_TRIGGERS 列 (结构与 ALL_TRIGGERS 类似)

列名类型描述
OWNERVARCHAR2(63)所有者
TRIGGER_NAMEVARCHAR2(63)触发器名
TRIGGER_TYPEVARCHAR2(16)类型
STATUSVARCHAR2(8)状态
TRIGGER_BODYTEXT触发器体

7.56. dba_users

描述数据库中所有用户的信息。

DBA_USERS 列

列名类型描述
USERNAMEVARCHAR2(63)用户名
USER_IDNUMERIC用户 ID
ACCOUNT_STATUSVARCHAR2(32)账户状态
LOCK_DATEDATE锁定日期
EXPIRY_DATEDATE过期日期
DEFAULT_TABLESPACEVARCHAR2(63)默认表空间
CREATEDDATE创建日期
PROFILEVARCHAR2(63)配置文件

7.57. dba_views

描述当前用户的所有视图的信息 (实际是所有视图)。

DBA_VIEWS 列 (结构与 ALL_VIEWS 类似)

列名类型描述
OWNERVARCHAR2(63)所有者
VIEW_NAMEVARCHAR2(63)视图名
TEXTTEXT视图定义
READ_ONLYVARCHAR2(1)是否只读

7.58. dba_arguments

描述数据库中可用的过程和函数的参数。

DBA_ARGUMENTS 列

列名类型描述
OWNERVARCHAR2所有者
OBJECT_NAMEVARCHAR2对象名
ARGUMENT_NAMEVARCHAR2参数名
POSITIONINTEGER位置
IN_OUTVARCHAR2方向 (IN/OUT)
DATA_TYPEVARCHAR2数据类型
DEFAULT_VALUETEXT默认值
DATA_LENGTHINTEGER长度
DATA_PRECISIONINTEGER精度
DATA_SCALEINTEGER标度

7.59. user_all_tables

描述当前用户拥有的对象表和关系表。

USER_ALL_TABLES 列 (结构与 DBA_ALL_TABLES 类似,但仅显示当前用户拥有的表,通常不包含 OWNER 列或 OWNER 为当前用户)

列名类型描述
TABLE_NAMEVARCHAR2(128)表名
TABLESPACE_NAMETEXT表空间
......... (同 DBA 视图)

7.60. user_col_comments

描述在当前用户拥有的表和视图的列上注释。

USER_COL_COMMENTS 列

列名类型描述
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(63)列名
COMMENTSVARCHAR2(4000)注释

7.61. user_col_privs

描述当前用户下的列级权限表。

USER_COL_PRIVS 列

列名类型描述
GRANTORVARCHAR2(63)授权者
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(63)列名
PRIVILEGE_TYPEVARCHAR2(40)权限
IS_GRANTABLEVARCHAR2(3)可转授

7.62. user_cons_columns

描述当前用户拥有并在约束中指定的列。

USER_CONS_COLUMNS 列

列名类型描述
CONSTRAINT_NAMEVARCHAR2(63)约束名
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(4000)列名
POSITIONNUMERIC位置

7.63. user_constraints

描述当前用户所拥有的表的所有约束定义。

USER_CONSTRAINTS 列

列名类型描述
CONSTRAINT_NAMEVARCHAR2(63)约束名
CONSTRAINT_TYPEVARCHAR2(1)类型
TABLE_NAMEVARCHAR2(63)表名
SEARCH_CONDITIONTEXT条件
STATUSVARCHAR2(8)状态
.........

7.64. user_dependencies

用来显示数据库中各对象的依赖关系。

USER_DEPENDENCIES 列

列名类型描述
NAMEVARCHAR2(63)依赖者名称
TYPEVARCHAR2(19)类型
REFERENCED_NAMEVARCHAR2(63)被依赖者名称
REFERENCED_TYPEVARCHAR2(19)被依赖者类型

7.65. user_free_space

数据库中每个表空间的可用空间。

USER_FREE_SPACE 列

列名类型描述
TABLESPACE_NAMEVARCHAR2(63)表空间名
FILE_IDNUMERIC文件 ID
BYTESNUMERIC空闲字节
BLOCKSNUMERIC空闲块

7.66. user_ind_columns

描述数据库中所有建有索引的列的信息。

USER_IND_COLUMNS 列

列名类型描述
INDEX_NAMEVARCHAR2(63)索引名
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(4000)列名
COLUMN_POSITIONSMALLINT位置
DESCENDVARCHAR2(4)排序

7.67. user_indexes

描述当前用户拥有的所有索引信息。

USER_INDEXES 列

列名类型描述
INDEX_NAMEVARCHAR2(63)索引名
TABLE_NAMEVARCHAR2(63)表名
UNIQUENESSVARCHAR2(9)唯一性
STATUSVARCHAR2(8)状态
.........

7.68. user_jobs

视图可以查看用户自己创建的作业。

USER_JOBS 列

列名类型描述
JOBINTEGER作业 ID
LAST_DATEDATE上次执行日期
NEXT_DATEDATE下次执行日期
WHATTEXT内容
BROKENVARCHAR2(1)是否损坏

7.69. user_objects

描述当前用户的所有对象的信息。

USER_OBJECTS 列

列名类型描述
OBJECT_NAMEVARCHAR2(63)对象名
OBJECT_TYPEVARCHAR2(19)类型
STATUSVARCHAR2(7)状态
CREATEDDATE创建时间

7.70. user_role_privs

描述授予当前用户的角色。

USER_ROLE_PRIVS 列

列名类型描述
GRANTED_ROLEVARCHAR2(63)授予的角色
ADMIN_OPTIONVARCHAR2(3)管理员选项
DEFAULT_ROLEVARCHAR2(3)默认角色

7.71. user_sequences

描述当前用户的所有序列的信息。

USER_SEQUENCES 列

列名类型描述
SEQUENCE_NAMEVARCHAR2(63)序列名
MIN_VALUENUMERIC最小值
MAX_VALUENUMERIC最大值
INCREMENT_BYNUMERIC增量
.........

7.72. user_source

描述当前用户的所有程序源的信息。

USER_SOURCE 列

列名类型描述
NAMEVARCHAR2(63)对象名
TYPEVARCHAR2(12)类型
TEXTVARCHAR2(4000)源码

7.73. user_synonyms

描述数据库中用户所有同义词的信息。

USER_SYNONYMS 列

列名类型描述
SYNONYM_NAMEVARCHAR2(63)同义词名
TABLE_OWNERVARCHAR2(63)目标所有者
TABLE_NAMEVARCHAR2(63)目标名
DBLINKTEXTDBLink

7.74. user_tab_cols

描述了当前用户可以访问的表,视图的列。

USER_TAB_COLS 列

列名类型描述
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(63)列名
DATA_TYPEVARCHAR2(106)类型
.........

7.75. user_tab_columns

描述数据库中所有表列的信息。

USER_TAB_COLUMNS 列 (结构与 USER_TAB_COLS 类似,不含隐藏列)

列名类型描述
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(63)列名
DATA_TYPEVARCHAR2(106)类型
.........

7.76. user_tab_comments

描述当前用户拥有的表和视图上的注释。

USER_TAB_COMMENTS 列

列名类型描述
TABLE_NAMEVARCHAR2(63)表名
TABLE_TYPEVARCHAR2(11)类型
COMMENTSVARCHAR2(4000)注释

7.77. user_tab_privs

描述当前用户的对象权限。

USER_TAB_PRIVS 列

列名类型描述
GRANTEEVARCHAR2(63)被授权者
TABLE_NAMEVARCHAR2(63)表名
GRANTORVARCHAR2(63)授权者
PRIVILEGEVARCHAR2(40)权限
GRANTABLEVARCHAR2(3)可转授

7.78. user_tables

描述当前用户的所有表的信息。

USER_TABLES 列

列名类型描述
TABLE_NAMEVARCHAR2(63)表名
TABLESPACE_NAMEVARCHAR2(63)表空间
STATUSVARCHAR2(63)状态
NUM_ROWSINTEGER行数
.........

7.79. user_tablespace

描述当前用户可访问的表空间。

USER_TABLESPACE 列

列名类型描述
TABLESPACE_NAMEVARCHAR2(63)表空间名
INITIAL_EXTENTNUMERIC初始扩展
STATUSVARCHAR2(9)状态
.........

7.80. user_tablespaces

描述当前用户可访问的表空间。

USER_TABLESPACES 列 (结构与 USER_TABLESPACE 类似)

列名类型描述
TABLESPACE_NAMEVARCHAR2(63)表空间名
.........

7.81. user_trigger_cols

描述当前用户用的所有触发器的列信息。

USER_TRIGGER_COLS 列

列名类型描述
TRIGGER_NAMEVARCHAR2(63)触发器名
TABLE_NAMEVARCHAR2(63)表名
COLUMN_NAMEVARCHAR2(4000)列名

7.82. user_triggers

描述当前用户的所有触发器的信息。

USER_TRIGGERS 列

列名类型描述
TRIGGER_NAMEVARCHAR2(63)触发器名
TRIGGER_TYPEVARCHAR2(16)类型
STATUSVARCHAR2(8)状态
TRIGGER_BODYTEXT触发器体

7.83. user_types

描述当前用户拥有的对象类型。

USER_TYPES 列

列名类型描述
TYPE_NAMENAME类型名
TYPECODEVARCHAR2(128)类型码
ATTRIBUTESNUMERIC属性数
.........

7.84. user_users

描述当前用户。

USER_USERS 列

列名类型描述
USERNAMEVARCHAR2(63)用户名
USER_IDNUMERIC用户 ID
ACCOUNT_STATUSVARCHAR2(32)状态
DEFAULT_TABLESPACEVARCHAR2(63)默认表空间
CREATEDDATE创建日期

7.85. user_views

描述当前用户的所有视图的信息。

USER_VIEWS 列

列名类型描述
VIEW_NAMEVARCHAR2(63)视图名
TEXTTEXT视图定义
READ_ONLYVARCHAR2(1)是否只读

描述当前用户拥有的 dblink。

USER_DB_LINKS 列

列名类型描述
DB_LINKVARCHAR2(128)DBLink 名
USERNAMEVARCHAR2(128)用户名
HOSTVARCHAR2(2000)主机
CREATEDDATE创建时间

7.87. user_arguments

描述当前用户拥有的过程和函数的参数。

USER_ARGUMENTS 列

列名类型描述
OBJECT_NAMEVARCHAR2对象名
ARGUMENT_NAMEVARCHAR2参数名
POSITIONINTEGER位置
IN_OUTVARCHAR2方向
DATA_TYPEVARCHAR2类型
.........

7.88. V$DATABASE

描述当前数据库信息。

V$DATABASE 列

列名类型描述
DBIDNUMERIC数据库 ID
NAMEVARCHAR2(63)数据库名
CREATEDDATE创建日期
LOG_MODEVARCHAR2(12)日志模式
OPEN_MODEVARCHAR2(10)打开模式
CURRENT_SCNNUMERIC当前 SCN

7.89. V$INSTANCE

描述当前实例信息。

V$INSTANCE 列

列名类型描述
INSTANCE_NAMEVARCHAR2(16)实例名
HOST_NAMEVARCHAR2(64)主机名
VERSIONVARCHAR2(17)版本
STARTUP_TIMEDATE启动时间
STATUSVARCHAR2(12)状态
DATABASE_STATUSVARCHAR2(17)数据库状态

7.90. V$LOCK

描述了数据库当前持有的锁以及对锁的未完成请求。

V$LOCK 列

列名类型描述
ADDRVARCHAR2(16)地址
KADDRVARCHAR2(16)锁地址
SIDNUMERIC会话 ID
TYPEVARCHAR2(2)锁类型
LMODENUMERIC锁模式
REQUESTNUMERIC请求模式
BLOCKNUMERIC是否阻塞

7.91. V$LOCKED_OBJECT

描述当前被锁定的对象。

V$LOCKED_OBJECT 列

列名类型描述
XIDUSNNUMERIC撤销段号
OBJECT_IDNUMERIC对象 ID
SESSION_IDNUMERIC会话 ID
ORACLE_USERNAMEVARCHAR2(63)用户名
LOCKED_MODENUMERIC锁模式

7.92. V$PARAMETER

描述影响当前会话的初始化参数信息。

V$PARAMETER 列

列名类型描述
NUMNUMERIC参数编号
NAMEVARCHAR2(80)参数名
TYPENUMERIC类型
VALUEVARCHAR2(512)
ISSES_MODIFIABLEVARCHAR2(5)会话可修改
DESCRIPTIONVARCHAR2(255)描述

7.93. V$SESSION

描述当前会话信息。

V$SESSION 列

列名类型描述
SADDRVARCHAR2(20)会话地址
SIDNUMERIC会话 ID
USERNAMEVARCHAR2(63)用户名
STATUSVARCHAR2(8)状态
SERVERVARCHAR2(9)服务器类型
SCHEMANAMEVARCHAR2(63)模式名
OSUSERVARCHAR2(63)操作系统用户
MACHINEVARCHAR2(64)机器名
PROGRAMVARCHAR2(48)程序名
LOGON_TIMEDATE登录时间
EVENTVARCHAR2(64)等待事件
STATEVARCHAR2(19)状态

7.94. V$SYSSTAT

描述当前系统统计信息。

V$SYSSTAT 列

列名类型描述
STATISTIC#NUMERIC统计号
NAMEVARCHAR2(63)统计名
VALUENUMERIC统计值

8. PL/SQL 语法

本章主要介绍 UXDB 对 Oracle PL/SQL 语法的兼容情况。

8.1. 基本结构

UXDB 支持标准的 PL/SQL 块结构,包括声明部分、执行部分和异常处理部分。

PL/SQL 块结构对照表

部分Oracle 语法UXDB 语法备注
声明部分DECLARE
变量声明;
游标声明;
...
DECLARE
变量声明;
游标声明;
...
一致
执行部分BEGIN
执行语句;
...
BEGIN
执行语句;
...
一致
异常处理EXCEPTION
WHEN 异常名 THEN
处理语句;
...
EXCEPTION
WHEN 异常名 THEN
处理语句;
...
一致
结束END;END;一致

8.2. 变量与常量

变量与常量定义对照表

类型Oracle 语法UXDB 语法备注
变量声明var_name datatype [:= value];var_name datatype [:= value];一致
常量声明const_name CONSTANT datatype := value;const_name CONSTANT datatype := value;一致
%TYPE 属性var_name table.column%TYPE;var_name table.column%TYPE;一致
%ROWTYPE 属性rec_name table%ROWTYPE;rec_name table%ROWTYPE;一致

8.3. 控制结构

控制结构对照表

结构Oracle 语法UXDB 语法备注
IF 语句IF condition THEN statements; ELSIF condition THEN statements; ELSE statements; END IF;IF condition THEN statements; ELSIF condition THEN statements; ELSE statements; END IF;一致
CASE 语句CASE selector WHEN value THEN statements; ELSE statements; END CASE;CASE selector WHEN value THEN statements; ELSE statements; END CASE;一致
LOOP 循环LOOP statements; EXIT WHEN condition; END LOOP;LOOP statements; EXIT WHEN condition; END LOOP;一致
WHILE 循环WHILE condition LOOP statements; END LOOP;WHILE condition LOOP statements; END LOOP;一致
FOR 循环FOR i IN start..end LOOP statements; END LOOP;FOR i IN start..end LOOP statements; END LOOP;一致
GOTO 语句GOTO label;GOTO label;一致 (不推荐使用)
NULL 语句NULL;NULL;一致

8.4. 游标

游标操作对照表

操作Oracle 语法UXDB 语法备注
显式游标声明CURSOR cursor_name IS select_statement;CURSOR cursor_name IS select_statement;一致
打开游标OPEN cursor_name;OPEN cursor_name;一致
获取数据FETCH cursor_name INTO variables;FETCH cursor_name INTO variables;一致
关闭游标CLOSE cursor_name;CLOSE cursor_name;一致
游标属性%FOUND, %NOTFOUND, %ROWCOUNT, %ISOPEN%FOUND, %NOTFOUND, %ROWCOUNT, %ISOPEN一致
隐式游标SQL%FOUND, SQL%ROWCOUNTSQL%FOUND, SQL%ROWCOUNT一致
游标 FOR 循环FOR rec IN cursor_name LOOP statements; END LOOP;FOR rec IN cursor_name LOOP statements; END LOOP;一致

8.5. 异常处理

异常处理对照表

操作Oracle 语法UXDB 语法备注
预定义异常NO_DATA_FOUND, TOO_MANY_ROWSNO_DATA_FOUND, TOO_MANY_ROWS一致
自定义异常DECLARE my_exception EXCEPTION; BEGIN RAISE my_exception; EXCEPTION WHEN my_exception THEN...DECLARE my_exception EXCEPTION; BEGIN RAISE my_exception; EXCEPTION WHEN my_exception THEN...一致
RAISE_APPLICATION_ERRORRAISE_APPLICATION_ERROR(code, message);RAISE_APPLICATION_ERROR(code, message);一致
OTHERS 处理器WHEN OTHERS THEN...WHEN OTHERS THEN...一致

9. 编程接口

UXDB 提供了多种编程接口以兼容 Oracle 的应用程序。

9.1. OCI 兼容

UXDB 提供了 OCI (Oracle Call Interface) 兼容层,允许使用 Oracle OCI API 编写的程序在 UXDB 上运行,通常只需重新编译或少量修改。

OCI 兼容性对照表

功能Oracle OCIUXDB OCI 兼容备注
环境初始化OCIEnvCreate / OCIEnvNlsCreate支持一致
服务器连接OCIServerAttach / OCISessionBegin支持一致
语句处理OCIStmtPrepare / OCIStmtExecute支持一致
绑定变量OCIBindByName / OCIBindByPos支持一致
定义变量OCIDefineByPos支持一致
获取数据OCIStmtFetch / OCIStmtFetch2支持一致
事务控制OCITransCommit / OCITransRollback支持一致
错误处理OCIErrorGet支持一致
描述符OCIDescribeAny部分支持功能基本覆盖

9.2. JDBC 兼容

UXDB 提供 JDBC 驱动程序,兼容 Oracle JDBC API 的大部分功能。

JDBC 兼容性对照表

功能Oracle JDBCUXDB JDBC备注
驱动类oracle.jdbc.driver.OracleDrivercom.uxdb.jdbc.Driver类名不同
连接 URLjdbc:oracle:thin:@host:port:sidjdbc:uxdb://host:port/databaseURL 格式不同
Connection 接口java.sql.Connectionjava.sql.Connection标准接口一致
Statement 接口java.sql.Statementjava.sql.Statement标准接口一致
PreparedStatementjava.sql.PreparedStatementjava.sql.PreparedStatement标准接口一致
CallableStatementjava.sql.CallableStatementjava.sql.CallableStatement标准接口一致
ResultSet 接口java.sql.ResultSetjava.sql.ResultSet标准接口一致
Oracle 特有扩展oracle.jdbc.OracleConnection部分支持通过适配层支持常用扩展

9.3. ODBC 兼容

UXDB 提供 ODBC 驱动程序,兼容 Oracle ODBC 驱动的行为。

ODBC 兼容性对照表

功能Oracle ODBCUXDB ODBC备注
DSN 配置需要配置 TNSNAMES.ORA 或直接 IP支持 DSN 或直接连接串配置方式略有不同
SQLConnect / SQLDriverConnect支持支持一致
SQLPrepare / SQLExecute支持支持一致
SQLBindParameter支持支持一致
SQLFetch / SQLFetchScroll支持支持一致
数据类型映射Oracle 类型到 C 类型UXDB 类型到 C 类型映射逻辑相似

10. 迁移建议

在进行 Oracle 到 UXDB 的迁移时,建议遵循以下步骤:

  1. 评估阶段:使用迁移评估工具扫描现有 Oracle 数据库,识别不兼容的对象、语法和功能。
  2. 架构设计:根据 UXDB 的特性重新设计数据库架构,特别是针对分区、索引和存储过程。
  3. 模式迁移:迁移表结构、索引、约束、视图、序列等对象。注意数据类型的映射差异。
  4. 数据迁移:使用全量加增量的方式迁移数据,确保数据一致性。
  5. 代码改造:修改存储过程、触发器、函数以及应用程序代码,替换不兼容的语法和函数。
  6. 测试验证:进行功能测试、性能测试和压力测试,确保系统稳定运行。
  7. 割接上线:制定详细的割接方案,进行最终的数据同步和切换。

常见迁移问题及解决方案

问题类别常见问题解决方案
数据类型NUMBER 精度范围不同检查业务数据范围,必要时调整字段定义
日期时间TIMESTAMP 精度差异 (纳秒 vs 微秒)确认业务对时间精度的要求,通常微秒已足够
空字符串Oracle 中空串等于 NULL,UXDB 区分在代码中增加 NULLIF('', ' ') 或逻辑判断处理
序列语法差异 (NEXTVAL)修改 SQL 语句,UXDB 支持 NEXTVAL(seq)seq.NEXTVAL (高版本)
存储过程包 (Package) 支持差异将包拆解为独立的存储过程和函数,或使用变量模拟包状态
分页查询ROWNUM 用法差异使用 LIMIT/OFFSET 或窗口函数 ROW_NUMBER() 替代
特殊函数Oracle 特有函数无直接对应使用 UXDB 等效函数或编写自定义函数替代