E.39. orafce

E.39.1. 与 Oracle 数据库兼容的特性
E.39.2. 使用orafce的注意事项

orafce - Oracle 的兼容性函数和包。

E.39.1. 与 Oracle 数据库兼容的特性

提供了与 Oracle 数据库兼容的特性。 这些特性使您能够轻松迁移到 LightDB 并减少重新配置应用程序的成本。 下表列出了与 Oracle 数据库兼容的特性。

Table E.54. 数据类型

项目

概述

VARCHAR2

可变长度字符数据类型

NVARCHAR2

可变长度国家字符数据类型

DATE

存储日期和时间的数据类型

NUMBER

NUMBER 是 NUMERIC 的别名

CLOB

存储单字节和多字节字符数据,并且和 `text` 数据类型有基本一致的功能

BLOB

存储无结构的二进制大对象,并且和 `bytea` 数据类型有基本一致的功能

RAW

可变长度十六进制数据类型。

PLS_INTEGER

用于存储有符号整数的 PL/SQL 数据类型。

BINARY_INTEGER

用于存储有符号整数的数据类型。它是INT4的别名。

BINARY_FLOAT

32位浮点数。这种数据类型需要4个字节。

BINARY_DOUBLE

64位浮点数。这种数据类型需要8个字节。

XMLType

可变长度xml数据类型。

LONG

存储单字节和多字节字符数据,并且和 `CLOB` 数据类型有一致的功能


varcharchar 之间,varchar2nvarchar2 的优先级配置, 创建 orafce 扩展后,优先级如下:

    numeric > double precision > real > bigint > integer > smallint > text > varchar > varchar2 > nvarchar2 > char
  

Table E.55. SQL 查询

项目

概述

DUAL 表

系统提供的表


Table E.56. 数学函数

项目

概述

并行属性

BIN_TO_NUM

将位向量转换为相应的数字

安全

BITAND

执行按位 AND 操作

安全

BITOR

执行按位 OR 操作

安全

BITXOR

执行按位 XOR 操作

安全

COSH

计算一个数的双曲余弦值

安全

MOD

MOD函数返回参数1除以参数2的余数(模)

安全

REMAINDER

返回 n2 除以 n1 的余数

安全

ROUND_TIES_TO_EVEN

将 n 四舍五入到整数位

安全

SINH

计算一个数的双曲正弦值

安全

TANH

计算一个数的双曲正切值

安全

CEIL

计算大于等于一个数的最小整数,当输入参数是interval类型时,会先获取其天数并将其转成数值后再计算

安全


Table E.57. 字符串函数

项目

概述

并行属性

INSTR

返回字符串中一个子字符串的位置

安全

INSTRB

返回字符串中第一个字节为指定子字符串的位置。

安全

LENGTH

返回字符串的字符数长度

安全

LENGTHB

返回字符串的字节数长度

安全

LPAD

在字符串左侧填充指定长度的字符序列

安全

LTRIM

从字符串的开头删除指定的字符

安全

NLSSORT

返回用于根据语言环境对字符串进行语言排序的字节字符串

安全

REGEXP_COUNT

搜索字符串中的正则表达式,并返回匹配项的计数

安全

REGEXP_INSTR

返回字符串中匹配模式的起始或结束位置。

安全

REGEXP_LIKE

在查询的WHERE子句中使用,使查询返回与给定模式匹配的行。

安全

REGEXP_SUBSTR

返回与函数调用中指定的模式匹配的字符串。

安全

REGEXP_REPLACE

返回与函数调用中指定的模式匹配的字符串。

安全

REPLACE

将string中每个search_string替换为replacement_string并返回结果字符串。

安全

RPAD

用指定的字符序列将字符串右侧填充到指定长度。

安全

RTRIM

从字符串末尾删除指定的字符。

安全

SOUNDEX

返回一个包含char的语音表示的字符字符串。

安全

SUBSTR

使用字符指定位置和长度,提取字符串的一部分。

安全

SUBSTRB

使用字节指定位置和长度,提取字符串的一部分。

安全

GUID

返回UUID。

安全

CONCAT

连接两个字符串

安全

UPPER

大写所有字母

Safe


Table E.58. Date/Time Functions

项目

概述

并行属性

ADD_MONTHS

给定日期加上指定的月份。

安全

DBTIMEZONE

返回数据库时区的值。

安全

LENGTHB

返回一个字符串的字节数。

安全

LAST_DAY

返回指定日期所在月份的最后一天。

安全

LTRIM

从字符串的开头删除指定的字符。

安全

MONTHS_BETWEEN

返回两个日期之间的月份数。

安全

NEXT_DAY

返回指定日期之后第一个特定星期几的日期。

安全

ROUND

四舍五入一个日期。

安全

SESSIONTIMEZONE

返回会话的时区。

安全

SYSDATE

返回系统日期。

安全

TRUNC

截断一个日期。

安全

TZ_OFFSET

返回时区偏移量。

安全


Table E.59. 数据类型格式化函数

项目

概述

并行安全

CONVERT

将一个字符集的字符字符串转换为另一个字符集。

安全

NUMTOYMINTERVAL

将数字转换为一个 INTERVAL YEAR TO MONTH 字面量。

安全

TO_BLOB(raw)

将 RAW 值转换为 BLOB 值。

安全

TO_CHAR

将一个值转换为一个字符串。

安全

TO_DATE

将字符串按照指定的格式转换为日期。

安全

TO_MULTI_BYTE

将单字节字符串转换为多字节字符串。

安全

TO_NUMBER

将一个值按照指定的格式转换为一个数字。

安全

TO_SINGLE_BYTE

将多字节字符串转换为单字节字符串。

安全

TO_CLOB

将字符字符串或数值转换为CLOB值。

 

Table E.60. 条件表达式

项目

概述

并行属性

DECODE

比较值,如果相等,则返回相应的值。

安全

LNNVL

判断一个值是否为 false 或未知。

安全

NANVL

当值为非数字(NaN)时,返回替代值。

安全

NVL

当值为NULL时,返回替代值。

安全

NVL2

根据值是否为NULL,返回替代值。

安全


Table E.61. 聚合函数

项目

概述

并行属性

ANY_VALUE

返回expr的一个单一的非确定性值。

不安全

BIT_AND_AGG

返回按位 AND 操作的结果。

不安全

BIT_OR_AGG

返回按位 OR 操作的结果。

不安全

BIT_XOR_AGG

返回按位 XOR 操作的结果。

不安全

KURTOSIS_POP

用于确定给定分布中的异常值特征。

不安全

KURTOSIS_SAMP

用于确定给定分布中的异常值特征。

不安全

LISTAGG

返回连接的、以分隔符分隔的字符串值列表。

不安全

MEDIAN

计算一组值的中位数。

不安全

SKEWNESS_POP

用于确定给定分布的对称性。

不安全

SKEWNESS_SAMP

用于确定给定分布的对称性。

不安全

WY_CONCAT

返回连接的、以逗号分隔的字符串值列表。

不安全


Table E.62. 返回内部信息的函数

项目

概述

并行属性

DUMP

返回一个值的内部信息。

安全

NLS_CHARSET_ID

返回与字符集名称字符串对应的字符集ID编号。

安全

NLS_CHARSET_NAME

返回与ID编号对应的字符集名称。

安全

SYS_CONTEXT

返回当前时刻与上下文命名空间相关联的参数值。

安全

USERENV

返回当前会话中与上下文“USERENV”相关联的参数值。

安全


Table E.63. SQL运算符

项目

概述

日期时间运算符

用于 DATE 类型的日期时间运算符。


Table E.64. 其他函数

项目

概述

并行属性

EMPTY_CLOB

返回一个空的 CLOB

安全

EMPTY_BLOB

返回一个空的 BLOB

安全

ORA_HASH

ORA_HASH 是一个计算给定表达式的哈希值的函数。

安全

VSIZE

返回表达式的内部表示中的字节数。

安全

DEPS_SAVE_AND_DROP_DEPENDENCIES

保存并删除表的依赖项。

不安全

DEPS_RESTORE_DEPENDENCIES

恢复表的依赖项。

不安全

PLVSTR.IS_PREFIX

如果 ab 的前缀,则返回 true.

安全

PLVDATE.ISLEAPYEAR

判断某个年份是否是闰年。

 

TIMESTAMP_TO_SCN

返回给定时间戳对应的事务 ID

安全


Table E.65. 包

项目

概述

DBMS_ALERT

向多个会话发送警报。

DBMS_ASSERT

验证输入值的属性。

DBMS_DATAPUMP

提供一组函数存储过程来管理数据泵作业、导出和导入数据、查询作业状态等操作。

DBMS_LOB

与 DBMS_LOB 包兼容的一些函数。

DBMS_OUTPUT

向客户端发送消息。

DBMS_PIPE

为会话间通信创建一个管道。

DBMS_RANDOM

生成随机数。

DBMS_UTILITY

提供各种实用工具。

DBMS_JOB

在 lt_cron 中安排和管理作业。

DBMS_LOCK

提供与锁管理服务交互的接口。

DBMS_METADATA

提供了一种从数据库字典中检索元数据的方法。

DBMS_OBFUSCATION_TOOLKIT

允许应用程序使用数据加密标准(DES)或三重DES算法加密数据。

DBMS_SNAPSHOT

允许您刷新快照(MVIEW)。

DBMS_SQL

在存储过程或匿名块中提供了一种执行动态sql的方法。

DBMS_STATS

允许您收集优化器统计信息。

UTL_FILE

允许进行文本文件操作。

UTL_RAW

提供操作 RAW 数据类型的 SQL 函数。

UTL_URL

包含两个函数,提供 URL 字符的转义和反转义机制。

UTL_ENCODE

提供将 RAW 数据编码为标准编码格式的函数。


Table E.66. 系统视图

概述

DBA_SEQUENCES

ALL_SEQUENCES

USER_SEQUENCES

描述序列。

DBA_SYNONYMS

ALL_SYNONYMS

USER_SYNONYMS

描述同义词,当前为空。

DBA_TAB_COLS

ALL_TAB_COLS

USER_TAB_COLS

COLS

DBA_TAB_COLUMNS

ALL_TAB_COLUMNS

USER_TAB_COLUMNS

描述表和视图的列。

DBA_TAB_COL_STATISTICS

ALL_TAB_COL_STATISTICS

USER_TAB_COL_STATISTICS

包含从 "[DBA/ALL/USER]_TAB_COLUMNS" 提取的列统计信息和直方图信息。

DBA_OBJECTS

ALL_OBJECTS

USER_OBJECTS

OBJ

描述对象。

DBA_CATALOG

ALL_CATALOG

USER_CATALOG

列出表、视图和序列。

DICTIONARY

DICT

包含数据字典表和视图的描述信息。

DBA_DEPENDENCIES

ALL_DEPENDENCIES

USER_DEPENDENCIES

描述对象之间的依赖关系。

DBA_SOURCE

ALL_SOURCE

USER_SOURCE

描述存储对象的文本源代码。

DBA_PROCEDURES

ALL_PROCEDURES

USER_PROCEDURES

列出函数和存储过程。

DBA_TRIGGERS

ALL_TRIGGERS

USER_TRIGGERS

描述触发器。

DBA_TRIGGER_COLS

ALL_TRIGGER_COLS

USER_TRIGGER_COLS

描述触发器中列的使用情况。

DBA_TYPES

ALL_TYPES

USER_TYPES

描述对象类型。

DBA_CONSTRAINTS

ALL_CONSTRAINTS

USER_CONSTRAINTS

描述约束定义。

DBA_CONS_COLUMNS

ALL_CONS_COLUMNS

USER_CONS_COLUMNS

描述在约束中指定的列。

DBA_VIEWS

ALL_VIEWS

USER_VIEWS

描述视图。

DBA_TABLES

ALL_TABLES

USER_TABLES

TABS

DBA_ALL_TABLES

ALL_ALL_TABLES

USER_ALL_TABLES

TAB

描述对象表和关系表

DBA_TAB_STATISTICS

ALL_TAB_STATISTICS

USER_TAB_STATISTICS

显示表的优化器统计信息

DBA_TAB_COMMENTS

ALL_TAB_COMMENTS

USER_TAB_COMMENTS

显示表和视图的注释

DBA_COL_COMMENTS

ALL_COL_COMMENTS

USER_COL_COMMENTS

显示表和视图的列的注释

DBA_TAB_MODIFICATIONS

ALL_TAB_MODIFICATIONS

USER_TAB_MODIFICATIONS

描述所有表的修改情况

DBA_INDEXES

ALL_INDEXES

USER_INDEXES

IND

描述索引

DBA_INDEX_USAGE

ALL_INDEX_USAGE

USER_INDEX_USAGE

显示每个索引的累计统计信息。

DBA_IND_COLUMNS

ALL_IND_COLUMNS

USER_IND_COLUMNS

描述表上索引的列

DBA_IND_EXPRESSIONS

ALL_IND_EXPRESSIONS

USER_IND_EXPRESSIONS

描述基于函数的索引的表达式

DBA_IND_STATISTICS

ALL_IND_STATISTICS

USER_IND_STATISTICS

显示索引的优化器统计信息

DBA_USERS

ALL_USERS

USER_USERS

描述用户

DBA_ROLES

描述数据库中的所有角色

DBA_ROLE_PRIVS

USER_ROLE_PRIVS

描述赋予用户和角色的角色

PRODUCT_COMPONENT_VERSION

包含组件产品的版本和状态信息

PLAN_TABLE

PLAN_TABLE 会自动创建为全局临时表,用于保存所有用户的 EXPLAIN PLAN 语句的输出,目前为空

DBA_DATA_FILES

描述数据库文件

DBA_JOBS

ALL_JOBS

USER_JOBS

描述作业

DBA_JOBS_RUNNING

列出实例中当前正在运行的所有作业

DBA_TABLESPACES

USER_TABLESPACES

描述表空间

NLS_DATABASE_PARAMETERS

NLS_INSTANCE_PARAMETERS

NLS_SESSION_PARAMETERS

列出 NLS 参数

DBA_SEGMENTS

USER_SEGMENTS

描述分配给段的存储空间

DBA_PART_TABLES

ALL_PART_TABLES

USER_PART_TABLES

显示分区表的对象级分区信息

DBA_TAB_PARTITIONS

ALL_TAB_PARTITIONS

USER_TAB_PARTITIONS

显示表分区级别的分区信息、分区存储参数和分区统计信息

DBA_TAB_SUBPARTITIONS

ALL_TAB_SUBPARTITIONS

USER_TAB_SUBPARTITIONS

显示所有子分区的信息

DBA_PART_KEY_COLUMNS

ALL_PART_KEY_COLUMNS

USER_PART_KEY_COLUMNS

描述分区对象的分区键列

DBA_SUBPART_KEY_COLUMNS

ALL_SUBPART_KEY_COLUMNS

USER_SUBPART_KEY_COLUMNS

显示复合分区表(和复合分区表上的本地索引)的子分区键列

DBA_IND_PARTITIONS

ALL_IND_PARTITIONS

USER_IND_PARTITIONS

描述索引分区

DBA_PART_INDEXES

ALL_PART_INDEXES

USER_PART_INDEXES

显示分区索引的对象级别分区信息

COL

描述表,视图的字段信息


以DBA开头的视图显示数据库中的某些内容。 以ALL开头的视图目前与以DBA开头的视图相同,不像Oracle那样进行权限验证。 以USER开头的视图显示当前用户拥有的某些内容(实际上是当前模式,在Oracle中,用户和模式是一一对应的)。

numeric和boolean类型的隐式转换

Orafce支持numeric和boolean类型的双向隐式转换。

Example

CREATE TABLE test(v1 BOOLEAN, v2 NUMERIC);

-- numeric implicit cast to boolean
-- boolean implicit cast to numeric
INSERT INTO test(v1, v2) VALUES(1.1, true);
SELECT * FROM test WHERE v2 = true;
  

E.39.2. 使用orafce的注意事项

orafce被定义为在创建数据库集群时默认创建的"public"模式中的用户定义函数,因此它们可以对所有用户可用,无需特殊设置。 由于这个原因,请确保在search_path参数中指定的模式搜索路径列表中包含"public"(不带双引号)。

以下由orafce提供的功能是使用不同的外部规范在LightDB和orafce中实现的。在LightDB的默认配置中,LightDB的标准功能优先。

Table E.67. 数据类型

项目

LightDB的标准功能

orafce添加的兼容性功能

DATE

仅存储日期。

存储日期和时间。


Table E.68. 函数

项目

LightDB的标准功能

orafce添加的兼容性功能

LENGTH

如果字符串是CHAR类型,则不包括尾随空格长度。

如果字符串是CHAR类型,则包括尾随空格长度。

SUBSTR

如果为开始位置指定了0或负值,则将开始位置减1,位置将向左移动,从那里开始提取。

- 如果为开始位置指定0,则从字符串的开头开始提取。

- 如果为开始位置指定负值,则从字符串末尾计算的位置开始提取。

LPAD

RPAD

- 如果字符串是CHAR类型,则删除尾随空格,然后填充值。

- 结果长度被视为字符数。

- 如果字符串是CHAR类型,则在不删除尾随空格的情况下填充值。

- 结果长度基于显示字符串的宽度。 因此,全角字符使用宽度2处理,半角字符使用宽度1处理。

LTRIM

RTRIM

BTRIM (*1)

如果字符串是CHAR类型,则删除尾随空格,然后删除值。

如果字符串是CHAR类型,则在不删除尾随空格的情况下删除值。

TO_DATE

返回值的数据类型为DATE。

返回值的数据类型为TIMESTAMP。


*1:对于Oracle数据库,不存在BTRIM函数,但是orafce实现了与TRIM函数相同的外部规范,以对齐其行为。

此外,在LightDB的默认配置中无法使用以下功能。

Table E.69. 函数

功能

SYSDATE

DBTIMEZONE

SESSIONTIMEZONE

TO_CHAR (日期/时间值)


Table E.70. 运算符

功能

日期时间运算符


要使用这些功能,请在lightdb.conf的“search_path”参数中设置“oracle”和“pg_catalog”。 在这种情况下,您必须在“pg_catalog”之前指定“oracle”。

   search_path = '"$user", public, oracle, pg_catalog'
  

信息

  • search_path参数指定搜索模式的顺序。 与Oracle数据库兼容的每个功能都在oracle模式中定义。

  • 建议在lightdb.conf中设置search_path。在这种情况下,它将对每个实例有效。

  • search_path的配置可以在用户级别或数据库级别完成。以下是设置示例。

  • 如果LightDB的标准功能具有优先级,并且不需要使用默认配置无法使用的功能,则无需更改search_path的设置。

  • 用户级别的设置示例。可以通过执行SQL命令来设置。 在这个例子中,user1被用作用户名。

         ALTER USER user1 SET search_path = "$user",public,oracle,pg_catalog;
        
  • 在数据库级别进行设置的示例。可以通过执行SQL命令来设置。 在这个例子中,db1被用作数据库名称。您必须在“pg_catalog”之前指定“oracle”。

         ALTER DATABASE db1 SET search_path = "$user",public,oracle,pg_catalog;
        

参见

  • 有关search_path的信息,请参考LightDB文档中的“服务器管理” > “客户端连接默认值” > “语句行为”。

  • 有关ALTER USER和ALTER DATABASE的信息,请参考LightDB文档中的“参考” > “SQL命令”。