Oracle 兼容性
1. 概述
UXDB 高度兼容 Oracle 数据库的功能和性能,UXDB 数据库拥有和 Oracle 数据库系统一样的成熟的事务处理和分析功能,同时还拥有更高的并发性能及更低的运维成本。UXDB 兼容 Oracle 数据库的大部分 SQL 语法和函数。在不改变现有应用程序和数据库架构的情况下,用户可以轻松地将 Oracle 数据库迁移到 UXDB,并在其中进行查询、数据修改和分析等操作。
本文将对 UXDB 数据库兼容 Oracle 12C 的各方面的功能进行详细的对比,方便用户迁移后查阅相关语法使用方法。
2. 整体比较
本章将从基本功能特性指标,可扩展性,可靠性,驱动与文档,高可用,分布式等技术指标等方面进行比较。
UXDB 与 Oracle 12c 的比较表
| 编号 | 项目 | Oracle 12c | UXDB 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 | 共享存储集群 | RAC | Super RAC | |
| 自动存储管理 ASM | √ | - | - | |
| 负载均衡 | √ | √ | 方式不同,作用一致 | |
| 透明故障转移 | √ | √ | 方式不同,作用一致 | |
| 节点重加入 | √ | √ | 方式不同,作用一致 | |
| 备份恢复 | √ | √ | 方式不同,作用一致 | |
| 5.2 | 双机热备 | DataGuard | HA+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 位 | NUMBER | number(p, s) 用户指定精度时,p 最大 131072 位,s 的范围为 -1000 到 8191 | UXDB 的 number 类型范围比 Oracle 的大 |
| SMALLINT | 等同于 NUMBER(38,0) | SMALLINT | 从 -32768 到 +32767 | Oracle 的 SMALLINT 是非标准类型,等同于 NUMBER(38,0),和 UXDB 范围不同 | |
| INTEGER/INT | 等同于 NUMBER(38,0) | INTEGER/INT | 从 -2147483648 到 +2147483647 | Oracle 的 INTEGER 是非标准类型,等同于 NUMBER(38,0),和 UXDB 范围不同 | |
| DECIMAL/DEC | DECIMAL(p,s),相当于 number(p,s),p 的范围额为 1-38,s 范围为 -84-127 | DECIMAL | DECIMAL(p,s),p,s 不超过 1000 | Oracle 的 DECIMAL(p,s) 是非标准类型,等同于 number(p,s),和 UXDB 范围不同 | |
| NUMERIC | NUMERIC(p,s),相当于 number(p,s),p 的范围额为 1-38,s 范围为 -84-127 | NUMERIC | NUMERIC(p,s),p,s 不超过 1000 | Oracle 的 NUMERIC(p,s) 是非标准类型,等同于 number(p,s),和 UXDB 范围不同 | |
| FLOAT | FLOAT 是 NUMBER 的子类型,float(p) 有效位为以科学计数法,最大精度是 126 | FLOAT | float(p)p 24 或者直接是 float 时相当于 double precision 类型 | 范围大小不同 | |
| REAL | 可变精度,是 float(b) 的子类型,等同于 float(63),其中 63 为二进制精度,转换为十进制精度是 float(19)。精度是 19 个有效位。经过验证最大存储 20bytes | REAL | 可变精度的数字类型。6 位十进制精度(实际验证小数点后最多 7 位)。存储长度 4bytes | 精度与范围大小不同 | |
| DOUBLE PRECISION | 相当于 float(126),范围:-3.40282E+38F 到 +3.40282E+38F | DOUBLE 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 最大 9999 | timestamp [ (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-1 | CLOB(n) | 可变长二进制大对象,最大长度超过了 1TB | UXDB 存储长度比 Oracle 更大 |
| NCLOB | 可变长二进制大对象,最大长度 4G-1 字节 | NCLOB | 可变长二进制大对象,最大长度超过了 1TB | UXDB 存储长度比 Oracle 更大 (2122 及以上版本支持) | |
| BLOB(n) | 可变长二进制大对象,最大长度 4G-1 字节 | BLOB(n) | 可变长二进制大对象,最大长度超过了 1TB | UXDB 存储长度比 Oracle 更大 | |
| BFILE | 二进制文件,存储在数据库外的系统文件,只读的 | - | - | - | |
| RAW & LONG RAW & LONG | LONG | 可变长文本,最大长度 134217727,表中只能有一个 LONG 列 | LONG | 可变长文本,最大长度为 1G | |
| RAW | 可变长二进制数据类型,最多可以存储 2000 字节的信息 | RAW | 可变长二进制数据,最大长度为 1G | UXDB 比 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 | 备注 | ||
|---|---|---|---|---|
| 列名 | 说明 | 列名 | 说明 | |
| ROWID | rowid 的值是由 18 位字符表示,表明了该行在 oracle 数据库中的具体物理位置,全库唯一 | ROWID | bigint 类型,实现了部分 Oracle 功能,没有标记物理位置的功能 | UXDB 实现了 Oracle 的部分 ROWID 功能,且类型不同 |
| ROWNUM | rownum 就像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作 | ROWNUM | rownum 就像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作 | 一致 |
4.2. 对象管理
4.2.1. 用户管理
Oracle 与 UXDB 用户管理对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 创建用户 | 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 \| NOSUPERUSERCREATEDB \| NOCREATEDBCREATEROLE \| NOCREATEROLEINHERIT \| NOINHERITLOGIN \| NOLOGINREPLICATION \| NOREPLICATIONBYPASSRLS \| NOBYPASSRLSCONNECTION LIMIT connlimit[ ENCRYPTED ] PASSWORD 'password' \| PASSWORD NULLVALID 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_nameALTER USER ... SET configuration_parameter ... | 当安全开关打开时,管理员名称不可以重命名 |
| 删除用户 | DROP USER user [ CASCADE ]; | DROP USER [ IF EXISTS ] name [, ...] | 在安全开关启动时,drop 操作只可以 uxsmo 用户执行,从而保障了系统的安全性 |
4.2.2. 模式管理
Oracle 与 UXDB 模式管理对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 创建模式 | 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 基表管理对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 创建基表 | 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 插入数据操作对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 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>.NEXTVAL | NEXTVAL(sequence) | 通过 <sequence>.NEXTVAL 可以查询 |
| 时间类型数据插入 | 需要 TO_DATE 进行格式转换 | 可以直接插入或用 TO_DATE 进行格式转换 | UXDB 支持的插入方式比 Oracle 多 |
Oracle 与 UXDB 修改数据操作对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| UPDATE | UPDATE <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 删除数据操作对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| DELETE | DELETE [FROM] <table> [WHERE <predicate>] | DELETE table_name WHERE [ condition ] [ ORDER BY ... ] [ LIMIT { count } ] | 语法上存在差异 |
| TRUNCATE | TRUNCATE TABLE <table> | TRUNCATE [ TABLE ] [ ONLY ] name [ * ] [, ... ] [ RESTART IDENTITY \| CONTINUE IDENTITY ] [ CASCADE \| RESTRICT ] | 语法上存在差异 |
Oracle 与 UXDB 查询数据操作对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 单表查询 | 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 condition | HAVING condition | uxdb 在 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 ] condition | WITH 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 [, ...] ) ] statementEXPLAIN [ ANALYZE ] [ VERBOSE ] statement | uxdb 执行 explain 语句之后反馈是文本格式的执行计划信息,而 oracle 返回是表格格式执行计划信息。另外在执行计划信息的具体内容上也存在差异 |
4.2.5. 视图管理
Oracle 与 UXDB 视图管理对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 创建视图 | 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 索引管理对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 创建索引 | 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 序列管理对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 创建序列 | 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 全文索引管理对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 创建全文索引 | 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 表空间管理对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 创建表空间 | 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_nameALTER 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 工具对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 坏块在线修复 | blockrecover datafile 6 block 130; | 没找到相关参数 | oracle 的 adg 也可以通过备库修复主库的坏块 |
| 备份单个数据文件 | RMAN > backup datafile 6 tag=health; | 没找到相关参数 | |
| 备份恢复指定 db | backup 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 12956RMAN> list archivelog all;RMAN>list expired backup; 等 | ux_rman show detall -B /home/uxdo/backup/rmanbak/fullbackup/ rman show | rman 的备份脚本更成熟,也好写 |
4.3. 存储过程
Oracle 与 UXDB 存储模块管理对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 创建存储过程 | CREATE [OR REPLACE] PROCEDURE procedure_name [ ( argument[{IN \| OUT \| IN OUT}] type,...) ] {IS \| AS} procedure_body | CREATE [ 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 触发器管理对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 创建触发器 | CREATE [OR REPLACE] TIGGER 触发器名 触发时间 触发事件 ON 操作对象 REFERENCING { { OLD \| NEW } [ AS ] alias } [ ... ] [FOR EACH ROW] BEGIN pl/sql 语句 END | CREATE [ 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/ENABLE | ALTER 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、UPDATE | INSERT、DELETE、UPDATE | 一致 |
| DDL 事件支持 | CREATE、ALTER、DROP 等 | TRUNCATE | uxdb 支持 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 对照表
| Oracle | UXDB | 备注 | |
|---|---|---|---|
| dual | dual 是一个虚拟表,用来构成 select 的语法规则。SELECT * \| [column1 [AS alias1], column2 [AS alias2]] FROM table | 虚拟表,功能与 Oracle 一样 | 一致 |
5. SQL 函数
本章将对用户创建自定义函数的语法与系统自带函数功能进行比较和说明。
5.1. 创建函数
Oracle 与 UXDB 创建函数对照表
| 操作 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 创建函数 | 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 | 日期或数据转换为 char | to_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 | 相等返回 NULL | NULLIF(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 语法对照表
| 语法 | Oracle | UXDB | 备注 |
|---|---|---|---|
| 支持运算符之间有空格 | 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::int | Oracle 的 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 是支持单引号,不能是空格。 |
| storage | Storage 语法可以指定创建表的表空间 | Storage 语法可以指定创建表的表空间 | 一致 |
| minus 关键字 | query1 MINUS query2 | query1 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_id | GROUPING_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_name | with function function_name function_body / select function_name | Oracle 的 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 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(128) | 表的属主 |
| TABLE_NAME | VARCHAR2(128) | 表名 |
| TABLESPACE_NAME | TEXT | 表空间名 |
| CLUSTER_NAME | TEXT | CLUSTER 名字 |
| IOT_NAME | VARCHAR2(128) | 索引结构表的名字 |
| STATUS | VARCHAR2(8) | 表的状态 |
| ... | ... | ... (其余列参考原文档) |
7.2. all_col_comments
描述当前用户可以访问的表或视图的列注释。
ALL_COL_COMMENTS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(128) | 表或视图的属主 |
| TABLE_NAME | VARCHAR2(128) | 表或视图的名称 |
| COLUMN_NAME | VARCHAR2(128) | 列的名称 |
| COMMENTS | TEXT | 列的注释文本 |
7.3. all_constraints
描述当前用户可以访问的约束定义。
ALL_CONSTRAINTS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(128) | 约束的属主 |
| CONSTRAINT_NAME | VARCHAR2(128) | 约束的名称 |
| CONSTRAINT_TYPE | VARCHAR2(1) | 约束类型 (C=Check, P=Primary Key, R=Foreign Key, U=Unique) |
| TABLE_NAME | VARCHAR2(128) | 约束所在的表名 |
| ... | ... | ... |
7.4. all_cons_columns
描述当前用户可访问的约束中指定的列。
ALL_CONS_COLUMNS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 约束的所有者 |
| CONSTRAINT_NAME | VARCHAR2(63) | 约束的名称 |
| TABLE_NAME | VARCHAR2(63) | 约束所在的表名 |
| COLUMN_NAME | VARCHAR2(4000) | 约束涉及的列名 |
| POSITION | NUMERIC | 列在约束中的位置(从1开始) |
7.5. all_constraints
描述当前用户可以访问的约束定义。
ALL_CONSTRAINTS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 约束的所有者 |
| CONSTRAINT_NAME | VARCHAR2(63) | 约束的名称 |
| CONSTRAINT_TYPE | VARCHAR2(1) | 约束类型 (C=Check, P=Primary Key, R=Foreign Key, U=Unique, V=With Check Option, O=With Read Only) |
| TABLE_NAME | VARCHAR2(63) | 约束所在的表名 |
| SEARCH_CONDITION | TEXT | 检查约束的条件表达式 |
| R_OWNER | VARCHAR2(63) | 引用约束的所有者 (外键参考表的所有者) |
| R_CONSTRAINT_NAME | VARCHAR2(63) | 引用约束的名称 (外键参考的约束名) |
| DELETE_RULE | VARCHAR2(9) | 外键删除规则 (CASCADE, SET NULL, NO ACTION) |
| STATUS | VARCHAR2(8) | 约束状态 (ENABLED/DISABLED) |
| DEFERRABLE | VARCHAR2(14) | 是否可延迟 (DEFERRABLE/NOT DEFERRABLE) |
| DEFERRED | VARCHAR2(9) | 默认延迟状态 (IMMEDIATE/DEFERRED) |
| VALIDATED | VARCHAR2(13) | 是否已验证 (VALIDATED/NOT VALIDATED) |
| GENERATED | VARCHAR2(14) | 是否系统生成 (GENERATED NAME/USER NAME) |
| BAD | VARCHAR2(3) | 是否有错误 (YES/NO) |
| RELY | VARCHAR2(4) | 是否依赖 (RELY/NORELY) |
| LAST_CHANGE | DATE | 最后修改时间 |
| INDEX_OWNER | VARCHAR2(63) | 支持约束的索引所有者 |
| INDEX_NAME | VARCHAR2(63) | 支持约束的索引名称 |
| INVALID | VARCHAR2(7) | 是否无效 |
| VIEW_RELATED | VARCHAR2(14) | 视图相关约束 |
7.6. all_db_links
描述当前用户可以访问的数据库链接 (DBLink)。
ALL_DB_LINKS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | DBLink 的所有者 |
| DB_LINK | VARCHAR2(128) | DBLink 的名称 |
| USERNAME | VARCHAR2(63) | 远程数据库连接使用的用户名 |
| HOST | VARCHAR2(2000) | 远程数据库的连接字符串或主机信息 |
| CREATED | DATE | DBLink 的创建时间 |
7.7. all_dependencies
显示当前用户可访问的对象之间的依赖关系。
ALL_DEPENDENCIES 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 依赖对象的所有者 |
| NAME | VARCHAR2(63) | 依赖对象的名称 |
| TYPE | VARCHAR2(19) | 依赖对象的类型 (如 PROCEDURE, VIEW, PACKAGE 等) |
| REFERENCED_OWNER | VARCHAR2(63) | 被依赖对象的所有者 |
| REFERENCED_NAME | VARCHAR2(63) | 被依赖对象的名称 |
| REFERENCED_TYPE | VARCHAR2(19) | 被依赖对象的类型 |
| REFERENCED_LINK_NAME | VARCHAR2(128) | 如果被依赖对象在远程数据库,此处为 DBLink 名称 |
| DEPENDENCY_TYPE | CHAR | 依赖类型 (HARD/SOFT/REF) |
7.8. all_ind_expressions
描述当前用户可访问的基于函数的索引表达式。
ALL_IND_EXPRESSIONS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| INDEX_OWNER | VARCHAR2(63) | 索引的所有者 |
| INDEX_NAME | VARCHAR2(63) | 索引的名称 |
| TABLE_OWNER | VARCHAR2(63) | 表的所有者 |
| TABLE_NAME | VARCHAR2(63) | 表的名称 |
| COLUMN_POSITION | NUMERIC | 表达式在索引列中的位置 |
| COLUMN_EXPRESSION | TEXT | 索引列的表达式定义 (例如 UPPER(column_name)) |
7.9. all_ind_partitions
描述当前用户可访问的索引分区信息。
ALL_IND_PARTITIONS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| INDEX_OWNER | VARCHAR2(63) | 索引的所有者 |
| INDEX_NAME | VARCHAR2(63) | 索引的名称 |
| PARTITION_NAME | VARCHAR2(63) | 分区的名称 |
| SUBPARTITION_COUNT | NUMERIC | 子分区的数量 (如果是复合分区) |
| HIGH_VALUE | TEXT | 分区的高边界值 |
| HIGH_VALUE_LENGTH | NUMERIC | 高边界值的长度 |
| PARTITION_POSITION | NUMERIC | 分区的位置序号 |
| STATUS | VARCHAR2(8) | 分区状态 (USABLE/UNUSABLE) |
| TABLESPACE_NAME | VARCHAR2(63) | 分区所在的表空间 |
| NUM_ROWS | NUMERIC | 分区中的行数 |
| SAMPLE_SIZE | NUMERIC | 采样大小 |
| LAST_ANALYZED | DATE | 最后分析时间 |
| BUFFER_POOL | VARCHAR2(7) | 缓冲区池设置 |
| FLASH_CACHE | VARCHAR2(7) | Flash 缓存设置 |
| CELL_FLASH_CACHE | VARCHAR2(7) | Cell Flash 缓存设置 |
7.10. all_ind_columns
描述当前用户所能获取到的表上建有索引的列信息。
ALL_IND_COLUMNS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| INDEX_OWNER | VARCHAR2(63) | 索引的所有者 |
| INDEX_NAME | VARCHAR2(63) | 索引的名字 |
| TABLE_OWNER | VARCHAR2(63) | 该索引所属对象的所有者 |
| TABLE_NAME | VARCHAR2(63) | 该索引所属对象的名字 |
| COLUMN_NAME | VARCHAR2(4000) | 含有索引的列的名字 |
| COLUMN_POSITION | SMALLINT | 列在索引中的位置 |
| COLUMN_LENGTH | NUMERIC | 列的数据类型长度 (byte) |
| CHAR_LENGTH | NUMERIC | 字符长度 (char) |
| DESCEND | VARCHAR2(4) | 排序方式 (ASC/DESC) |
7.11. all_indexes
描述当前用户所能获取到的表上的索引信息。
ALL_INDEXES 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 索引的所有者 |
| INDEX_NAME | VARCHAR2(63) | 索引的名字 |
| INDEX_TYPE | VARCHAR2(27) | 索引的类型 |
| TABLE_OWNER | VARCHAR2(63) | 表所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| UNIQUENESS | VARCHAR2(9) | 唯一性 (UNIQUE/NONUNIQUE) |
| COMPRESSION | VARCHAR2(8) | 是否压缩 |
| TABLESPACE_NAME | VARCHAR2(63) | 表空间名 |
| STATUS | VARCHAR2(8) | 状态 (VALID/UNUSABLE) |
| NUM_ROWS | VARCHAR2(7) | 行数 |
| LAST_ANALYZED | VARCHAR2(20) | 最后分析时间 |
| PARTITIONED | VARCHAR2(3) | 是否分区 |
7.12. all_jobs
视图可以查看用户自己创建的作业 (2122 及以上版本支持)。
ALL_JOBS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| JOB | INTEGER | 作业标识号 |
| LOG_USER | NAME | 提交作业时的登录用户 |
| LAST_DATE | DATE | 上次成功执行日期 |
| NEXT_DATE | DATE | 下次计划执行日期 |
| INTERVAL | TEXT | 执行间隔 |
| FAILURES | SMALLINT | 失败次数 |
| WHAT | TEXT | 执行内容 |
| BROKEN | VARCHAR2(1) | 是否损坏 |
7.13. all_objects
描述当前用户下可以查看的所有对象。
ALL_OBJECTS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 对象属主 |
| OBJECT_NAME | VARCHAR2(63) | 对象名 |
| SUBOBJECT_NAME | VARCHAR2(63) | 子对象名 |
| OBJECT_ID | NUMERIC | 对象 ID |
| OBJECT_TYPE | VARCHAR2(19) | 对象类型 |
| CREATED | DATE | 创建时间 |
| LAST_DDL_TIME | DATE | 最后 DDL 时间 |
| TIMESTAMP | VARCHAR2(20) | 时间戳 |
| STATUS | VARCHAR2(7) | 状态 (VALID/INVALID) |
| TEMPORARY | VARCHAR2(1) | 是否临时 |
7.14. all_sequences
描述当前用户可访问的所有序列。
ALL_SEQUENCES 列
| 列名 | 类型 | 描述 |
|---|---|---|
| SEQUENCE_OWNER | VARCHAR2(63) | 序列所有者 |
| SEQUENCE_NAME | VARCHAR2(63) | 序列名称 |
| MIN_VALUE | NUMERIC | 最小值 |
| MAX_VALUE | NUMERIC | 最大值 |
| INCREMENT_BY | NUMERIC | 增量 |
| CYCLE_FLAG | TEXT | 是否循环 |
| ORDER_FLAG | VARCHAR2(1) | 是否有序 |
| CACHE_SIZE | NUMERIC | 缓存大小 |
| LAST_NUMBER | NUMERIC | 最后一个号码 |
7.15. all_source
描述当前用户可访问的存储对象的文本源。
ALL_SOURCE 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 对象所有者 |
| NAME | VARCHAR2(63) | 对象名称 |
| TYPE | VARCHAR2(12) | 对象类型 (FUNCTION, PROCEDURE 等) |
| TEXT | CLOB | 源代码文本 |
7.16. all_synonyms
描述当前用户所能查看的同义词信息。
ALL_SYNONYMS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 同义词所有者 |
| SYNONYM_NAME | VARCHAR2(63) | 同义词名字 |
| TABLE_OWNER | VARCHAR2(63) | 指向对象的所有者 |
| TABLE_NAME | VARCHAR2(63) | 指向对象的名字 |
| DBLINK | TEXT | 数据库链接 |
7.17. all_tables
描述当前用户下可以查看的所有表。
ALL_TABLES 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 表属主 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| TABLESPACE_NAME | VARCHAR2(63) | 表空间名 |
| CLUSTER_NAME | VARCHAR2(63) | 簇名 |
| IOT_NAME | VARCHAR2(63) | IOT 名 |
| STATUS | VARCHAR2(63) | 状态 |
| PCT_FREE | INTEGER | 空闲百分比 |
| NUM_ROWS | INTEGER | 行数 |
| BLOCKS | INTEGER | 块数 |
| LAST_ANALYZED | DATE | 最后分析时间 |
| PARTITIONED | VARCHAR2(3) | 是否分区 |
| TEMPORARY | VARCHAR2(1) | 是否临时 |
| COMPRESSION | VARCHAR2(8) | 是否压缩 |
7.18. all_tab_cols
描述了当前用户可以访问的表,视图的列。
ALL_TAB_COLS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(63) | 列名 |
| DATA_TYPE | VARCHAR2(106) | 数据类型 |
| DATA_LENGTH | NUMERIC | 数据长度 |
| DATA_PRECISION | NUMERIC | 精度 |
| DATA_SCALE | NUMERIC | 标度 |
| NULLABLE | VARCHAR2(1) | 是否可为空 |
| COLUMN_ID | NUMERIC | 列 ID |
| DATA_DEFAULT | TEXT | 默认值 |
| NUM_DISTINCT | NUMERIC | 不同值数量 |
| LOW_VALUE | NUMERIC | 最小值 |
| HIGH_VALUE | NUMERIC | 最大值 |
| HISTOGRAM | VARCHAR2(15) | 直方图类型 |
| HIDDEN_COLUMN | VARCHAR2(3) | 是否隐藏 |
| VIRTUAL_COLUMN | VARCHAR2(3) | 是否虚拟列 |
7.19. all_tab_columns
描述了当前用户可以访问的表,视图的非隐藏列。
ALL_TAB_COLUMNS 列
(结构与 all_tab_cols 类似,但不包含 HIDDEN_COLUMN 等隐藏列相关字段)
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | TEXT | 所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(63) | 列名 |
| DATA_TYPE | VARCHAR2(106) | 数据类型 |
| DATA_LENGTH | NUMERIC | 数据长度 |
| DATA_PRECISION | NUMERIC | 精度 |
| DATA_SCALE | NUMERIC | 标度 |
| NULLABLE | VARCHAR2(1) | 是否可为空 |
| COLUMN_ID | NUMERIC | 列 ID |
| DATA_DEFAULT | TEXT | 默认值 |
| ... | ... | ... (其他统计信息列) |
7.20. all_tab_comments
描述在当前用户可以访问的表和视图上显示注释。
ALL_TAB_COMMENTS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| TABLE_TYPE | VARCHAR2(11) | 表类型 (TABLE/VIEW) |
| COMMENTS | VARCHAR2(4000) | 注释内容 |
7.21. all_tab_privs
描述当前用户的对象权限。
ALL_TAB_PRIVS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| GRANTEE | VARCHAR2(63) | 被授权者 |
| OWNER | VARCHAR2(63) | 所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| GRANTOR | VARCHAR2(63) | 授权者 |
| PRIVILEGE | VARCHAR2(40) | 权限类型 |
| GRANTABLE | VARCHAR2(3) | 是否可转授 |
7.22. all_trigger_cols
描述当前用户可访问的所有触发器的列。
ALL_TRIGGER_COLS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| TRIGGER_OWNER | VARCHAR2(63) | 触发器所有者 |
| TRIGGER_NAME | VARCHAR2(63) | 触发器名称 |
| TABLE_OWNER | VARCHAR2(63) | 表所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(4000) | 列名 |
7.23. all_triggers
描述当前用户可访问的所有触发器。
ALL_TRIGGERS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| TRIGGER_NAME | VARCHAR2(63) | 触发器名称 |
| TRIGGER_TYPE | VARCHAR2(16) | 触发器类型 |
| TRIGGERING_EVENT | VARCHAR2(216) | 触发事件 |
| TABLE_OWNER | VARCHAR2(63) | 表所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| STATUS | VARCHAR2(8) | 状态 |
| TRIGGER_BODY | TEXT | 触发器体 |
| WHEN_CLAUSE | TEXT | 条件子句 |
7.24. all_types
描述当前用户可以访问的对象类型 (2122 及以上版本支持)。
ALL_TYPES 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | NAME | 类型属主 |
| TYPE_NAME | NAME | 类型名 |
| TYPECODE | VARCHAR2(128) | 类型代码 |
| ATTRIBUTES | NUMERIC | 属性数 |
| METHODS | NUMERIC | 方法数 |
| PREDEFINED | VARCHAR2(3) | 是否预定义 |
| FINAL | VARCHAR2(3) | 是否最终类型 |
| INSTANTIABLE | VARCHAR2(3) | 是否可实例化 |
7.25. all_users
描述当前用户可见的数据库的所有用户。
ALL_USERS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| USERNAME | VARCHAR2(63) | 用户名 |
| USER_ID | NUMERIC | 用户 ID |
| CREATED | DATE | 创建日期 |
7.26. all_views
描述当前用户所能查看的所有的视图信息。
ALL_VIEWS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| VIEW_NAME | VARCHAR2(63) | 视图名 |
| TEXT_LENGTH | NUMERIC | 文本长度 |
| TEXT | TEXT | 视图定义文本 |
| READ_ONLY | VARCHAR2(1) | 是否只读 |
7.27. dba_all_tables
描述当前数据库所有的对象表和关系表。
DBA_ALL_TABLES 列 (结构与 ALL_TABLES 类似,但包含所有用户的数据,且部分列类型可能略有不同,如 VARCHAR2(128))
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(128) | 表属主 |
| TABLE_NAME | VARCHAR2(128) | 表名 |
| ... | ... | ... (同 ALL_TABLES) |
| INMEMORY | VARCHAR2(8) | 内存列存储 |
| EXTERNAL | VARCHAR2(3) | 是否外部表 |
7.28. dba_db_links
描述数据库内所有的 dblink 信息。
DBA_DB_LINKS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| DB_LINK | VARCHAR2(128) | DBLink 名称 |
| USERNAME | VARCHAR2(128) | 用户名 |
| HOST | VARCHAR2(2000) | 主机信息 |
| CREATED | DATE | 创建时间 |
7.29. db_files
描述了数据库中所有表空间、表空间使用的存储容量及表空间所在存储设备的容量信息。
DB_FILES 列
| 列名 | 类型 | 描述 |
|---|---|---|
| NAME | NAME | 表空间名称 |
| USED | BIGINT | 已使用容量 (MB) |
| CAPACITY | BIGINT | 总容量 (MB) |
| RATIO | NUMERIC | 使用率 |
7.30. dba_db_link_source
描述标识数据库内的 DBLINK 源信息。
DBA_DB_LINK_SOURCE 列
| 列名 | 类型 | 描述 |
|---|---|---|
| SOURCE_ID | OID | 源 ID |
| DB_NAME | TEXT | 数据库名 |
| HOST_NAME | TEXT | 主机名 |
| IP_ADDRESS | TEXT | IP 地址 |
| USERNAME | TEXT | 用户名 |
| FIRST_LOGON_TIME | TIMESTAMP | 首次登录时间 |
| LAST_LOGON_TIME | TIMESTAMP | 最后登录时间 |
| LOGON_COUNT | INTEGER | 登录次数 |
7.31. dba_cons_columns
描述约束中指定的数据库中的所有列。
DBA_CONS_COLUMNS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| CONSTRAINT_NAME | VARCHAR2(63) | 约束名 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(4000) | 列名 |
| POSITION | NUMERIC | 位置 |
7.32. dba_constraints
描述当前用户所拥有的表的所有约束定义。
DBA_CONSTRAINTS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| CONSTRAINT_NAME | VARCHAR2(63) | 约束名 |
| CONSTRAINT_TYPE | VARCHAR2(1) | 类型 (C,P,R,U) |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| SEARCH_CONDITION | TEXT | 检查条件 |
| R_OWNER | VARCHAR2(63) | 引用所有者 |
| R_CONSTRAINT_NAME | VARCHAR2(63) | 引用约束名 |
| DELETE_RULE | VARCHAR2(9) | 删除规则 |
| STATUS | TEXT | 状态 |
| DEFERRABLE | VARCHAR2(14) | 是否可延迟 |
| VALIDATED | VARCHAR2(13) | 是否已验证 |
| INDEX_NAME | VARCHAR2(63) | 索引名 |
7.33. dba_col_comments
描述了在数据库中所有表和视图的列上显示注释。
DBA_COL_COMMENTS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(63) | 列名 |
| COMMENTS | VARCHAR2(4000) | 注释 |
7.34. dba_col_privs
描述了所有列级权限。
DBA_COL_PRIVS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| GRANTOR | VARCHAR2(63) | 授权者 |
| OWNER | VARCHAR2(63) | 所有者 |
| GRANTEE | VARCHAR2(63) | 被授权者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(63) | 列名 |
| PRIVILEGE_TYPE | VARCHAR2(40) | 权限类型 |
| IS_GRANTABLE | VARCHAR2(63) | 是否可转授 |
7.35. dba_dependencies
用来显示数据库中各对象的依赖关系。
DBA_DEPENDENCIES 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 依赖者所有者 |
| NAME | VARCHAR2(63) | 依赖者名称 |
| TYPE | VARCHAR2(19) | 依赖者类型 |
| REFERENCED_OWNER | VARCHAR2(63) | 被依赖者所有者 |
| REFERENCED_NAME | VARCHAR2(63) | 被依赖者名称 |
| REFERENCED_TYPE | VARCHAR2(19) | 被依赖者类型 |
| DEPENDENCY_TYPE | CHAR | 依赖类型 |
7.36. dba_free_space
数据库中每个表空间的可用空间。
DBA_FREE_SPACE 列
| 列名 | 类型 | 描述 |
|---|---|---|
| TABLESPACE_NAME | VARCHAR2(63) | 表空间名 |
| FILE_ID | NUMERIC | 文件 ID |
| BLOCK_ID | NUMERIC | 起始块号 |
| BYTES | NUMERIC | 空闲字节数 |
| BLOCKS | NUMERIC | 空闲块数 |
7.37. dba_ind_columns
描述数据库中所有建有索引的列的信息。
DBA_IND_COLUMNS 列 (结构与 ALL_IND_COLUMNS 类似,包含所有用户)
| 列名 | 类型 | 描述 |
|---|---|---|
| INDEX_OWNER | VARCHAR2(63) | 索引所有者 |
| INDEX_NAME | VARCHAR2(63) | 索引名 |
| TABLE_OWNER | VARCHAR2(63) | 表所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(4000) | 列名 |
| COLUMN_POSITION | SMALLINT | 位置 |
| DESCEND | VARCHAR2(4) | 排序 |
7.38. dba_indexes
描述数据库中所有索引的信息。
DBA_INDEXES 列 (结构与 ALL_INDEXES 类似,包含所有用户)
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| INDEX_NAME | VARCHAR2(63) | 索引名 |
| TABLE_OWNER | VARCHAR2(63) | 表所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| UNIQUENESS | VARCHAR2(9) | 唯一性 |
| STATUS | VARCHAR2(8) | 状态 |
| ... | ... | ... |
7.39. dba_jobs
用来查看所有用户创建的作业。
DBA_JOBS 列 (结构与 ALL_JOBS 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| JOB | INTEGER | 作业 ID |
| LOG_USER | NAME | 登录用户 |
| LAST_DATE | DATE | 上次执行日期 |
| NEXT_DATE | DATE | 下次执行日期 |
| WHAT | TEXT | 执行内容 |
| BROKEN | VARCHAR2(1) | 是否损坏 |
7.40. dba_objects
描述当前用户下可以查看的所有对象 (实际上是所有对象)。
DBA_OBJECTS 列 (结构与 ALL_OBJECTS 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| OBJECT_NAME | VARCHAR2(63) | 对象名 |
| OBJECT_TYPE | VARCHAR2(19) | 类型 |
| STATUS | VARCHAR2(7) | 状态 |
| CREATED | DATE | 创建时间 |
| ... | ... | ... |
7.41. dba_role_privs
描述授予所有用户的角色以及数据库中的角色。
DBA_ROLE_PRIVS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| GRANTEE | VARCHAR2(63) | 被授权者 |
| GRANTED_ROLE | VARCHAR2(63) | 授予的角色 |
| ADMIN_OPTION | VARCHAR2(3) | 是否管理员选项 |
| DEFAULT_ROLE | VARCHAR2(3) | 是否默认角色 |
7.42. dba_roles
描述数据库中存在的所有角色。
DBA_ROLES 列
| 列名 | 类型 | 描述 |
|---|---|---|
| ROLE | VARCHAR2(63) | 角色名 |
| PASSWORD_REQUIRED | VARCHAR2(8) | 是否需要密码 |
7.43. dba_sequences
描述数据库中所有的序列。
DBA_SEQUENCES 列 (结构与 ALL_SEQUENCES 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| SEQUENCE_OWNER | VARCHAR2(63) | 所有者 |
| SEQUENCE_NAME | VARCHAR2(63) | 序列名 |
| MIN_VALUE | NUMERIC | 最小值 |
| MAX_VALUE | NUMERIC | 最大值 |
| INCREMENT_BY | NUMERIC | 增量 |
| ... | ... | ... |
7.44. dba_source
描述数据库中所有存储对象的文本源。
DBA_SOURCE 列 (结构与 ALL_SOURCE 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| NAME | VARCHAR2(63) | 对象名 |
| TYPE | VARCHAR2(12) | 类型 |
| TEXT | VARCHAR2(4000) | 源码 |
7.45. dba_synonyms
描述数据库中所有同义词的信息。
DBA_SYNONYMS 列 (结构与 ALL_SYNONYMS 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| SYNONYM_NAME | VARCHAR2(63) | 同义词名 |
| TABLE_OWNER | VARCHAR2(63) | 目标所有者 |
| TABLE_NAME | VARCHAR2(63) | 目标名 |
| DBLINK | TEXT | DBLink |
7.46. dba_tab_cols
描述当前所在数据库中,所有的表、视图的列信息。
DBA_TAB_COLS 列 (结构与 ALL_TAB_COLS 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(63) | 列名 |
| DATA_TYPE | VARCHAR2(106) | 类型 |
| ... | ... | ... |
7.47. dba_tab_columns
描述当前所在数据库中,所有的表、视图的非隐藏列信息。
DBA_TAB_COLUMNS 列 (结构与 ALL_TAB_COLUMNS 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(63) | 列名 |
| ... | ... | ... |
7.48. dba_tab_comments
描述数据库中所有表和视图的注释。
DBA_TAB_COMMENTS 列 (结构与 ALL_TAB_COMMENTS 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| TABLE_TYPE | VARCHAR2(11) | 类型 |
| COMMENTS | VARCHAR2(4000) | 注释 |
7.49. dba_tab_privs
描述数据库中的所有对象授予。
DBA_TAB_PRIVS 列 (结构与 ALL_TAB_PRIVS 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| GRANTEE | VARCHAR2(63) | 被授权者 |
| OWNER | VARCHAR2(63) | 所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| PRIVILEGE | VARCHAR2(40) | 权限 |
| GRANTABLE | VARCHAR2(3) | 可转授 |
7.50. dba_types
描述当前数据库所有的对象类型。
DBA_TYPES 列 (结构与 ALL_TYPES 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | NAME | 所有者 |
| TYPE_NAME | NAME | 类型名 |
| TYPECODE | VARCHAR2(128) | 类型码 |
| ... | ... | ... |
7.51. dba_tables
描述当前数据库中的所有表。
DBA_TABLES 列 (结构与 ALL_TABLES 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| TABLESPACE_NAME | VARCHAR2(63) | 表空间 |
| ... | ... | ... |
7.52. dba_tablespace
描述数据库中的表空间。
DBA_TABLESPACE 列
| 列名 | 类型 | 描述 |
|---|---|---|
| TABLESPACE_NAME | VARCHAR2(63) | 表空间名 |
| INITIAL_EXTENT | NUMERIC | 初始扩展 |
| NEXT_EXTENT | NUMERIC | 下次扩展 |
| MIN_EXTENTS | NUMERIC | 最小扩展数 |
| MAX_EXTENTS | NUMERIC | 最大扩展数 |
| STATUS | VARCHAR2(9) | 状态 |
| CONTENTS | VARCHAR2(9) | 内容类型 |
| EXTENT_MANAGEMENT | VARCHAR2(10) | 扩展管理方式 |
7.53. dba_tablespaces
描述数据库中的所有表空间。
DBA_TABLESPACES 列 (结构与 DBA_TABLESPACE 基本一致)
| 列名 | 类型 | 描述 |
|---|---|---|
| TABLESPACE_NAME | VARCHAR2(63) | 表空间名 |
| ... | ... | ... |
7.54. dba_trigger_cols
描述数据库中所有触发器的列。
DBA_TRIGGER_COLS 列 (结构与 ALL_TRIGGER_COLS 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| TRIGGER_OWNER | VARCHAR2(63) | 所有者 |
| TRIGGER_NAME | VARCHAR2(63) | 触发器名 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(4000) | 列名 |
7.55. dba_triggers
描述数据库中所有的触发器。
DBA_TRIGGERS 列 (结构与 ALL_TRIGGERS 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| TRIGGER_NAME | VARCHAR2(63) | 触发器名 |
| TRIGGER_TYPE | VARCHAR2(16) | 类型 |
| STATUS | VARCHAR2(8) | 状态 |
| TRIGGER_BODY | TEXT | 触发器体 |
7.56. dba_users
描述数据库中所有用户的信息。
DBA_USERS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| USERNAME | VARCHAR2(63) | 用户名 |
| USER_ID | NUMERIC | 用户 ID |
| ACCOUNT_STATUS | VARCHAR2(32) | 账户状态 |
| LOCK_DATE | DATE | 锁定日期 |
| EXPIRY_DATE | DATE | 过期日期 |
| DEFAULT_TABLESPACE | VARCHAR2(63) | 默认表空间 |
| CREATED | DATE | 创建日期 |
| PROFILE | VARCHAR2(63) | 配置文件 |
7.57. dba_views
描述当前用户的所有视图的信息 (实际是所有视图)。
DBA_VIEWS 列 (结构与 ALL_VIEWS 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2(63) | 所有者 |
| VIEW_NAME | VARCHAR2(63) | 视图名 |
| TEXT | TEXT | 视图定义 |
| READ_ONLY | VARCHAR2(1) | 是否只读 |
7.58. dba_arguments
描述数据库中可用的过程和函数的参数。
DBA_ARGUMENTS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OWNER | VARCHAR2 | 所有者 |
| OBJECT_NAME | VARCHAR2 | 对象名 |
| ARGUMENT_NAME | VARCHAR2 | 参数名 |
| POSITION | INTEGER | 位置 |
| IN_OUT | VARCHAR2 | 方向 (IN/OUT) |
| DATA_TYPE | VARCHAR2 | 数据类型 |
| DEFAULT_VALUE | TEXT | 默认值 |
| DATA_LENGTH | INTEGER | 长度 |
| DATA_PRECISION | INTEGER | 精度 |
| DATA_SCALE | INTEGER | 标度 |
7.59. user_all_tables
描述当前用户拥有的对象表和关系表。
USER_ALL_TABLES 列 (结构与 DBA_ALL_TABLES 类似,但仅显示当前用户拥有的表,通常不包含 OWNER 列或 OWNER 为当前用户)
| 列名 | 类型 | 描述 |
|---|---|---|
| TABLE_NAME | VARCHAR2(128) | 表名 |
| TABLESPACE_NAME | TEXT | 表空间 |
| ... | ... | ... (同 DBA 视图) |
7.60. user_col_comments
描述在当前用户拥有的表和视图的列上注释。
USER_COL_COMMENTS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(63) | 列名 |
| COMMENTS | VARCHAR2(4000) | 注释 |
7.61. user_col_privs
描述当前用户下的列级权限表。
USER_COL_PRIVS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| GRANTOR | VARCHAR2(63) | 授权者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(63) | 列名 |
| PRIVILEGE_TYPE | VARCHAR2(40) | 权限 |
| IS_GRANTABLE | VARCHAR2(3) | 可转授 |
7.62. user_cons_columns
描述当前用户拥有并在约束中指定的列。
USER_CONS_COLUMNS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| CONSTRAINT_NAME | VARCHAR2(63) | 约束名 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(4000) | 列名 |
| POSITION | NUMERIC | 位置 |
7.63. user_constraints
描述当前用户所拥有的表的所有约束定义。
USER_CONSTRAINTS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| CONSTRAINT_NAME | VARCHAR2(63) | 约束名 |
| CONSTRAINT_TYPE | VARCHAR2(1) | 类型 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| SEARCH_CONDITION | TEXT | 条件 |
| STATUS | VARCHAR2(8) | 状态 |
| ... | ... | ... |
7.64. user_dependencies
用来显示数据库中各对象的依赖关系。
USER_DEPENDENCIES 列
| 列名 | 类型 | 描述 |
|---|---|---|
| NAME | VARCHAR2(63) | 依赖者名称 |
| TYPE | VARCHAR2(19) | 类型 |
| REFERENCED_NAME | VARCHAR2(63) | 被依赖者名称 |
| REFERENCED_TYPE | VARCHAR2(19) | 被依赖者类型 |
7.65. user_free_space
数据库中每个表空间的可用空间。
USER_FREE_SPACE 列
| 列名 | 类型 | 描述 |
|---|---|---|
| TABLESPACE_NAME | VARCHAR2(63) | 表空间名 |
| FILE_ID | NUMERIC | 文件 ID |
| BYTES | NUMERIC | 空闲字节 |
| BLOCKS | NUMERIC | 空闲块 |
7.66. user_ind_columns
描述数据库中所有建有索引的列的信息。
USER_IND_COLUMNS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| INDEX_NAME | VARCHAR2(63) | 索引名 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(4000) | 列名 |
| COLUMN_POSITION | SMALLINT | 位置 |
| DESCEND | VARCHAR2(4) | 排序 |
7.67. user_indexes
描述当前用户拥有的所有索引信息。
USER_INDEXES 列
| 列名 | 类型 | 描述 |
|---|---|---|
| INDEX_NAME | VARCHAR2(63) | 索引名 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| UNIQUENESS | VARCHAR2(9) | 唯一性 |
| STATUS | VARCHAR2(8) | 状态 |
| ... | ... | ... |
7.68. user_jobs
视图可以查看用户自己创建的作业。
USER_JOBS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| JOB | INTEGER | 作业 ID |
| LAST_DATE | DATE | 上次执行日期 |
| NEXT_DATE | DATE | 下次执行日期 |
| WHAT | TEXT | 内容 |
| BROKEN | VARCHAR2(1) | 是否损坏 |
7.69. user_objects
描述当前用户的所有对象的信息。
USER_OBJECTS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OBJECT_NAME | VARCHAR2(63) | 对象名 |
| OBJECT_TYPE | VARCHAR2(19) | 类型 |
| STATUS | VARCHAR2(7) | 状态 |
| CREATED | DATE | 创建时间 |
7.70. user_role_privs
描述授予当前用户的角色。
USER_ROLE_PRIVS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| GRANTED_ROLE | VARCHAR2(63) | 授予的角色 |
| ADMIN_OPTION | VARCHAR2(3) | 管理员选项 |
| DEFAULT_ROLE | VARCHAR2(3) | 默认角色 |
7.71. user_sequences
描述当前用户的所有序列的信息。
USER_SEQUENCES 列
| 列名 | 类型 | 描述 |
|---|---|---|
| SEQUENCE_NAME | VARCHAR2(63) | 序列名 |
| MIN_VALUE | NUMERIC | 最小值 |
| MAX_VALUE | NUMERIC | 最大值 |
| INCREMENT_BY | NUMERIC | 增量 |
| ... | ... | ... |
7.72. user_source
描述当前用户的所有程序源的信息。
USER_SOURCE 列
| 列名 | 类型 | 描述 |
|---|---|---|
| NAME | VARCHAR2(63) | 对象名 |
| TYPE | VARCHAR2(12) | 类型 |
| TEXT | VARCHAR2(4000) | 源码 |
7.73. user_synonyms
描述数据库中用户所有同义词的信息。
USER_SYNONYMS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| SYNONYM_NAME | VARCHAR2(63) | 同义词名 |
| TABLE_OWNER | VARCHAR2(63) | 目标所有者 |
| TABLE_NAME | VARCHAR2(63) | 目标名 |
| DBLINK | TEXT | DBLink |
7.74. user_tab_cols
描述了当前用户可以访问的表,视图的列。
USER_TAB_COLS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(63) | 列名 |
| DATA_TYPE | VARCHAR2(106) | 类型 |
| ... | ... | ... |
7.75. user_tab_columns
描述数据库中所有表列的信息。
USER_TAB_COLUMNS 列 (结构与 USER_TAB_COLS 类似,不含隐藏列)
| 列名 | 类型 | 描述 |
|---|---|---|
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(63) | 列名 |
| DATA_TYPE | VARCHAR2(106) | 类型 |
| ... | ... | ... |
7.76. user_tab_comments
描述当前用户拥有的表和视图上的注释。
USER_TAB_COMMENTS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| TABLE_NAME | VARCHAR2(63) | 表名 |
| TABLE_TYPE | VARCHAR2(11) | 类型 |
| COMMENTS | VARCHAR2(4000) | 注释 |
7.77. user_tab_privs
描述当前用户的对象权限。
USER_TAB_PRIVS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| GRANTEE | VARCHAR2(63) | 被授权者 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| GRANTOR | VARCHAR2(63) | 授权者 |
| PRIVILEGE | VARCHAR2(40) | 权限 |
| GRANTABLE | VARCHAR2(3) | 可转授 |
7.78. user_tables
描述当前用户的所有表的信息。
USER_TABLES 列
| 列名 | 类型 | 描述 |
|---|---|---|
| TABLE_NAME | VARCHAR2(63) | 表名 |
| TABLESPACE_NAME | VARCHAR2(63) | 表空间 |
| STATUS | VARCHAR2(63) | 状态 |
| NUM_ROWS | INTEGER | 行数 |
| ... | ... | ... |
7.79. user_tablespace
描述当前用户可访问的表空间。
USER_TABLESPACE 列
| 列名 | 类型 | 描述 |
|---|---|---|
| TABLESPACE_NAME | VARCHAR2(63) | 表空间名 |
| INITIAL_EXTENT | NUMERIC | 初始扩展 |
| STATUS | VARCHAR2(9) | 状态 |
| ... | ... | ... |
7.80. user_tablespaces
描述当前用户可访问的表空间。
USER_TABLESPACES 列 (结构与 USER_TABLESPACE 类似)
| 列名 | 类型 | 描述 |
|---|---|---|
| TABLESPACE_NAME | VARCHAR2(63) | 表空间名 |
| ... | ... | ... |
7.81. user_trigger_cols
描述当前用户用的所有触发器的列信息。
USER_TRIGGER_COLS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| TRIGGER_NAME | VARCHAR2(63) | 触发器名 |
| TABLE_NAME | VARCHAR2(63) | 表名 |
| COLUMN_NAME | VARCHAR2(4000) | 列名 |
7.82. user_triggers
描述当前用户的所有触发器的信息。
USER_TRIGGERS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| TRIGGER_NAME | VARCHAR2(63) | 触发器名 |
| TRIGGER_TYPE | VARCHAR2(16) | 类型 |
| STATUS | VARCHAR2(8) | 状态 |
| TRIGGER_BODY | TEXT | 触发器体 |
7.83. user_types
描述当前用户拥有的对象类型。
USER_TYPES 列
| 列名 | 类型 | 描述 |
|---|---|---|
| TYPE_NAME | NAME | 类型名 |
| TYPECODE | VARCHAR2(128) | 类型码 |
| ATTRIBUTES | NUMERIC | 属性数 |
| ... | ... | ... |
7.84. user_users
描述当前用户。
USER_USERS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| USERNAME | VARCHAR2(63) | 用户名 |
| USER_ID | NUMERIC | 用户 ID |
| ACCOUNT_STATUS | VARCHAR2(32) | 状态 |
| DEFAULT_TABLESPACE | VARCHAR2(63) | 默认表空间 |
| CREATED | DATE | 创建日期 |
7.85. user_views
描述当前用户的所有视图的信息。
USER_VIEWS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| VIEW_NAME | VARCHAR2(63) | 视图名 |
| TEXT | TEXT | 视图定义 |
| READ_ONLY | VARCHAR2(1) | 是否只读 |
7.86. user_db_links
描述当前用户拥有的 dblink。
USER_DB_LINKS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| DB_LINK | VARCHAR2(128) | DBLink 名 |
| USERNAME | VARCHAR2(128) | 用户名 |
| HOST | VARCHAR2(2000) | 主机 |
| CREATED | DATE | 创建时间 |
7.87. user_arguments
描述当前用户拥有的过程和函数的参数。
USER_ARGUMENTS 列
| 列名 | 类型 | 描述 |
|---|---|---|
| OBJECT_NAME | VARCHAR2 | 对象名 |
| ARGUMENT_NAME | VARCHAR2 | 参数名 |
| POSITION | INTEGER | 位置 |
| IN_OUT | VARCHAR2 | 方向 |
| DATA_TYPE | VARCHAR2 | 类型 |
| ... | ... | ... |
7.88. V$DATABASE
描述当前数据库信息。
V$DATABASE 列
| 列名 | 类型 | 描述 |
|---|---|---|
| DBID | NUMERIC | 数据库 ID |
| NAME | VARCHAR2(63) | 数据库名 |
| CREATED | DATE | 创建日期 |
| LOG_MODE | VARCHAR2(12) | 日志模式 |
| OPEN_MODE | VARCHAR2(10) | 打开模式 |
| CURRENT_SCN | NUMERIC | 当前 SCN |
7.89. V$INSTANCE
描述当前实例信息。
V$INSTANCE 列
| 列名 | 类型 | 描述 |
|---|---|---|
| INSTANCE_NAME | VARCHAR2(16) | 实例名 |
| HOST_NAME | VARCHAR2(64) | 主机名 |
| VERSION | VARCHAR2(17) | 版本 |
| STARTUP_TIME | DATE | 启动时间 |
| STATUS | VARCHAR2(12) | 状态 |
| DATABASE_STATUS | VARCHAR2(17) | 数据库状态 |
7.90. V$LOCK
描述了数据库当前持有的锁以及对锁的未完成请求。
V$LOCK 列
| 列名 | 类型 | 描述 |
|---|---|---|
| ADDR | VARCHAR2(16) | 地址 |
| KADDR | VARCHAR2(16) | 锁地址 |
| SID | NUMERIC | 会话 ID |
| TYPE | VARCHAR2(2) | 锁类型 |
| LMODE | NUMERIC | 锁模式 |
| REQUEST | NUMERIC | 请求模式 |
| BLOCK | NUMERIC | 是否阻塞 |
7.91. V$LOCKED_OBJECT
描述当前被锁定的对象。
V$LOCKED_OBJECT 列
| 列名 | 类型 | 描述 |
|---|---|---|
| XIDUSN | NUMERIC | 撤销段号 |
| OBJECT_ID | NUMERIC | 对象 ID |
| SESSION_ID | NUMERIC | 会话 ID |
| ORACLE_USERNAME | VARCHAR2(63) | 用户名 |
| LOCKED_MODE | NUMERIC | 锁模式 |
7.92. V$PARAMETER
描述影响当前会话的初始化参数信息。
V$PARAMETER 列
| 列名 | 类型 | 描述 |
|---|---|---|
| NUM | NUMERIC | 参数编号 |
| NAME | VARCHAR2(80) | 参数名 |
| TYPE | NUMERIC | 类型 |
| VALUE | VARCHAR2(512) | 值 |
| ISSES_MODIFIABLE | VARCHAR2(5) | 会话可修改 |
| DESCRIPTION | VARCHAR2(255) | 描述 |
7.93. V$SESSION
描述当前会话信息。
V$SESSION 列
| 列名 | 类型 | 描述 |
|---|---|---|
| SADDR | VARCHAR2(20) | 会话地址 |
| SID | NUMERIC | 会话 ID |
| USERNAME | VARCHAR2(63) | 用户名 |
| STATUS | VARCHAR2(8) | 状态 |
| SERVER | VARCHAR2(9) | 服务器类型 |
| SCHEMANAME | VARCHAR2(63) | 模式名 |
| OSUSER | VARCHAR2(63) | 操作系统用户 |
| MACHINE | VARCHAR2(64) | 机器名 |
| PROGRAM | VARCHAR2(48) | 程序名 |
| LOGON_TIME | DATE | 登录时间 |
| EVENT | VARCHAR2(64) | 等待事件 |
| STATE | VARCHAR2(19) | 状态 |
7.94. V$SYSSTAT
描述当前系统统计信息。
V$SYSSTAT 列
| 列名 | 类型 | 描述 |
|---|---|---|
| STATISTIC# | NUMERIC | 统计号 |
| NAME | VARCHAR2(63) | 统计名 |
| VALUE | NUMERIC | 统计值 |
8. PL/SQL 语法
本章主要介绍 UXDB 对 Oracle PL/SQL 语法的兼容情况。
8.1. 基本结构
UXDB 支持标准的 PL/SQL 块结构,包括声明部分、执行部分和异常处理部分。
PL/SQL 块结构对照表
| 部分 | Oracle 语法 | UXDB 语法 | 备注 |
|---|---|---|---|
| 声明部分 | DECLARE变量声明; 游标声明; ... | DECLARE变量声明; 游标声明; ... | 一致 |
| 执行部分 | BEGIN执行语句; ... | BEGIN执行语句; ... | 一致 |
| 异常处理 | EXCEPTIONWHEN 异常名 THEN处理语句; ... | EXCEPTIONWHEN 异常名 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%ROWCOUNT 等 | SQL%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_ROWS 等 | NO_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_ERROR | RAISE_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 OCI | UXDB 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 JDBC | UXDB JDBC | 备注 |
|---|---|---|---|
| 驱动类 | oracle.jdbc.driver.OracleDriver | com.uxdb.jdbc.Driver | 类名不同 |
| 连接 URL | jdbc:oracle:thin:@host:port:sid | jdbc:uxdb://host:port/database | URL 格式不同 |
| Connection 接口 | java.sql.Connection | java.sql.Connection | 标准接口一致 |
| Statement 接口 | java.sql.Statement | java.sql.Statement | 标准接口一致 |
| PreparedStatement | java.sql.PreparedStatement | java.sql.PreparedStatement | 标准接口一致 |
| CallableStatement | java.sql.CallableStatement | java.sql.CallableStatement | 标准接口一致 |
| ResultSet 接口 | java.sql.ResultSet | java.sql.ResultSet | 标准接口一致 |
| Oracle 特有扩展 | oracle.jdbc.OracleConnection 等 | 部分支持 | 通过适配层支持常用扩展 |
9.3. ODBC 兼容
UXDB 提供 ODBC 驱动程序,兼容 Oracle ODBC 驱动的行为。
ODBC 兼容性对照表
| 功能 | Oracle ODBC | UXDB ODBC | 备注 |
|---|---|---|---|
| DSN 配置 | 需要配置 TNSNAMES.ORA 或直接 IP | 支持 DSN 或直接连接串 | 配置方式略有不同 |
| SQLConnect / SQLDriverConnect | 支持 | 支持 | 一致 |
| SQLPrepare / SQLExecute | 支持 | 支持 | 一致 |
| SQLBindParameter | 支持 | 支持 | 一致 |
| SQLFetch / SQLFetchScroll | 支持 | 支持 | 一致 |
| 数据类型映射 | Oracle 类型到 C 类型 | UXDB 类型到 C 类型 | 映射逻辑相似 |
10. 迁移建议
在进行 Oracle 到 UXDB 的迁移时,建议遵循以下步骤:
- 评估阶段:使用迁移评估工具扫描现有 Oracle 数据库,识别不兼容的对象、语法和功能。
- 架构设计:根据 UXDB 的特性重新设计数据库架构,特别是针对分区、索引和存储过程。
- 模式迁移:迁移表结构、索引、约束、视图、序列等对象。注意数据类型的映射差异。
- 数据迁移:使用全量加增量的方式迁移数据,确保数据一致性。
- 代码改造:修改存储过程、触发器、函数以及应用程序代码,替换不兼容的语法和函数。
- 测试验证:进行功能测试、性能测试和压力测试,确保系统稳定运行。
- 割接上线:制定详细的割接方案,进行最终的数据同步和切换。
常见迁移问题及解决方案
| 问题类别 | 常见问题 | 解决方案 |
|---|---|---|
| 数据类型 | NUMBER 精度范围不同 | 检查业务数据范围,必要时调整字段定义 |
| 日期时间 | TIMESTAMP 精度差异 (纳秒 vs 微秒) | 确认业务对时间精度的要求,通常微秒已足够 |
| 空字符串 | Oracle 中空串等于 NULL,UXDB 区分 | 在代码中增加 NULLIF('', ' ') 或逻辑判断处理 |
| 序列 | 语法差异 (NEXTVAL) | 修改 SQL 语句,UXDB 支持 NEXTVAL(seq) 或 seq.NEXTVAL (高版本) |
| 存储过程 | 包 (Package) 支持差异 | 将包拆解为独立的存储过程和函数,或使用变量模拟包状态 |
| 分页查询 | ROWNUM 用法差异 | 使用 LIMIT/OFFSET 或窗口函数 ROW_NUMBER() 替代 |
| 特殊函数 | Oracle 特有函数无直接对应 | 使用 UXDB 等效函数或编写自定义函数替代 |