orafce
- Oracle 的兼容性函数和包。
提供了与 Oracle 数据库兼容的特性。 这些特性使您能够轻松迁移到 LightDB 并减少重新配置应用程序的成本。 下表列出了与 Oracle 数据库兼容的特性。
Table K.73. 数据类型
项目 |
概述 |
---|---|
VARCHAR2 |
可变长度字符数据类型 |
NVARCHAR2 |
可变长度国家字符数据类型 |
DATE |
存储日期和时间的数据类型 |
NUMBER |
NUMBER 是 NUMERIC 的别名 |
CLOB |
存储单字节和多字节字符数据,并且和 `text` 数据类型有基本一致的功能 |
BLOB |
存储无结构的二进制大对象,并且和 `bytea` 数据类型有基本一致的功能 |
RAW |
可变长度十六进制数据类型。 |
PLS_INTEGER |
用于存储有符号整数的 PL/SQL 数据类型。 |
BINARY_FLOAT |
32位浮点数。这种数据类型需要4个字节。 |
BINARY_DOUBLE |
64位浮点数。这种数据类型需要8个字节。 |
XMLType |
可变长度xml数据类型。 |
LONG |
存储单字节和多字节字符数据,并且和 `CLOB` 数据类型有一致的功能 |
在 varchar
和 char
之间,varchar2
和 nvarchar2
的优先级配置,
创建 orafce 扩展后,优先级如下:
numeric > double precision > real > bigint > integer > smallint > text > varchar > varchar2 > nvarchar2 > char
Table K.74. SQL 查询
项目 |
概述 |
---|---|
DUAL 表 |
系统提供的表 |
Table K.75. 数学函数
项目 |
概述 |
并行属性 |
---|---|---|
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 K.76. 字符串函数
项目 |
概述 |
并行属性 |
---|---|---|
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 K.77. Date/Time Functions
项目 |
概述 |
并行属性 |
---|---|---|
ADD_MONTHS |
给定日期加上指定的月份。 |
安全 |
DBTIMEZONE |
返回数据库时区的值。 |
安全 |
LENGTHB |
返回一个字符串的字节数。 |
安全 |
LAST_DAY |
返回指定日期所在月份的最后一天。 |
安全 |
LTRIM |
从字符串的开头删除指定的字符。 |
安全 |
MONTHS_BETWEEN |
返回两个日期之间的月份数。 |
安全 |
NEXT_DAY |
返回指定日期之后第一个特定星期几的日期。 |
安全 |
ROUND |
四舍五入一个日期。 |
安全 |
SESSIONTIMEZONE |
返回会话的时区。 |
安全 |
SYSDATE |
返回系统日期。 |
安全 |
TRUNC |
截断一个日期。 |
安全 |
TZ_OFFSET |
返回时区偏移量。 |
安全 |
Table K.78. 数据类型格式化函数
项目 |
概述 |
并行安全 |
---|---|---|
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 K.79. 条件表达式
项目 |
概述 |
并行属性 |
---|---|---|
DECODE |
比较值,如果相等,则返回相应的值。 |
安全 |
LNNVL |
判断一个值是否为 false 或未知。 |
安全 |
NANVL |
当值为非数字(NaN)时,返回替代值。 |
安全 |
NVL |
当值为NULL时,返回替代值。 |
安全 |
NVL2 |
根据值是否为NULL,返回替代值。 |
安全 |
Table K.80. 聚合函数
项目 |
概述 |
并行属性 |
---|---|---|
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 K.81. 返回内部信息的函数
项目 |
概述 |
并行属性 |
---|---|---|
DUMP |
返回一个值的内部信息。 |
安全 |
NLS_CHARSET_ID |
返回与字符集名称字符串对应的字符集ID编号。 |
安全 |
NLS_CHARSET_NAME |
返回与ID编号对应的字符集名称。 |
安全 |
SYS_CONTEXT |
返回当前时刻与上下文命名空间相关联的参数值。 |
安全 |
USERENV |
返回当前会话中与上下文“USERENV”相关联的参数值。 |
安全 |
Table K.82. SQL运算符
项目 |
概述 |
---|---|
日期时间运算符 |
用于 DATE 类型的日期时间运算符。 |
Table K.83. 其他函数
项目 |
概述 |
并行属性 |
---|---|---|
EMPTY_CLOB |
返回一个空的 CLOB |
安全 |
EMPTY_BLOB |
返回一个空的 BLOB |
安全 |
ORA_HASH |
ORA_HASH 是一个计算给定表达式的哈希值的函数。 |
安全 |
VSIZE |
返回表达式的内部表示中的字节数。 |
安全 |
DEPS_SAVE_AND_DROP_DEPENDENCIES |
保存并删除表的依赖项。 |
不安全 |
DEPS_RESTORE_DEPENDENCIES |
恢复表的依赖项。 |
不安全 |
PLVSTR.IS_PREFIX |
如果 |
安全 |
PLVDATE.ISLEAPYEAR |
判断某个年份是否是闰年。 | |
TIMESTAMP_TO_SCN |
返回给定时间戳对应的事务 ID |
安全 |
Table K.84. 包
项目 |
概述 |
---|---|
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 K.85. 系统视图
项 |
概述 |
---|---|
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_MVIEWS ALL_MVIEWS USER_MVIEWS |
描述物化视图 |
DBA_MVIEW_LOGS ALL_MVIEW_LOGS USER_MVIEW_LOGS |
描述所有物化视图日志,目前为空 |
DBA_MVIEW_COMMENTS ALL_MVIEW_COMMENTS USER_MVIEW_COMMENTS |
显示物化视图的注释 |
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;
orafce被定义为在创建数据库集群时默认创建的"public"模式中的用户定义函数,因此它们可以对所有用户可用,无需特殊设置。 由于这个原因,请确保在search_path参数中指定的模式搜索路径列表中包含"public"(不带双引号)。
以下由orafce提供的功能是使用不同的外部规范在LightDB和orafce中实现的。在LightDB的默认配置中,LightDB的标准功能优先。
Table K.86. 数据类型
项目 |
LightDB的标准功能 |
orafce添加的兼容性功能 |
---|---|---|
DATE |
仅存储日期。 |
存储日期和时间。 |
Table K.87. 函数
项目 |
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 K.88. 函数
功能 |
---|
SYSDATE |
DBTIMEZONE |
SESSIONTIMEZONE |
TO_CHAR (日期/时间值) |
Table K.89. 运算符
功能 |
---|
日期时间运算符 |
要使用这些功能,请在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命令”。
支持以下数据类型:
VARCHAR2
NVARCHAR2
DATE
RAW
PLS_INTEGER
BINARY_FLOAT
BINARY_DOUBLE
XMLType
LONG
语法
指定VARCHAR2类型如下。
Table K.90. VARCHAR2语法
数据类型语法 |
说明 |
---|---|
VARCHAR2(len [byte|char]) |
变长字符串,最多可包含len个字符。 对于len,请指定大于0的整数。 如果省略len,则字符串可以是任意长度。 自23.1版本以来,LightDB实现了此语法,以兼容Oracle的varchar2类型。 在len后面的关键字byte或char是可选的,仅与Oracle语法兼容, 内部实现与只有len而没有byte或char关键字的实现相同。 |
通用规则
VARCHAR2是一种字符数据类型。请指定长度所需的字符数。
字符串长度可变。指定的值将被存储为原样。 此数据类型的上限约为1GB。
注意
VARCHAR2类型不支持排序序列。因此,在需要类似于ORDER BY子句的排序序列时, 会发生以下错误。此时,以下提示将提示使用COLLATE子句, 但是,由于不支持排序序列,因此无法使用此子句。
ERROR: could not determine which collation to use for string comparison HINT: Use the COLLATE clause to set the collation explicitly.
如果显示了上面显示的错误,请将列显式转换为VARCHAR或TEXT类型。
示例
lightdb@postgres=# create table t1(name varchar2(10)); CREATE TABLE lightdb@postgres=# lightdb@postgres=# \d+ t1 Table "public.t1" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description --------+--------------+-----------+----------+---------+---------+--------------+------------- name | varchar2(10) | | | | plain | | Access method: heap lightdb@postgres=# lightdb@postgres=# create table t2(name varchar2(10 byte)); CREATE TABLE lightdb@postgres=# lightdb@postgres=# \d+ t2 Table "public.t2" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description --------+--------------+-----------+----------+---------+---------+--------------+------------- name | varchar2(10) | | | | plain | | Access method: heap lightdb@postgres=# lightdb@postgres=# create table t3(name varchar2(10 char)); CREATE TABLE lightdb@postgres=# lightdb@postgres=# \d+ t3 Table "public.t3" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description --------+--------------+-----------+----------+---------+---------+--------------+------------- name | varchar2(10) | | | | plain | | Access method: heap lightdb@postgres=#
语法
指定NVARCHAR2类型如下。
Table K.91. NVARCHAR2语法
数据类型语法 |
解释 |
---|---|
NVARCHAR2(len) |
变长国家字符字符串,最多可包含len个字符。 对于len,请指定大于0的整数。 如果省略len,则字符串可以是任意长度。 |
通用规则
NVARCHAR2是一种国家字符数据类型。请指定长度所需的字符数。
字符串长度可变。指定的值将被存储为原样。 此数据类型的上限约为1GB。
注意
NVARCHAR2类型不支持排序序列。因此,在需要类似于ORDER BY子句的排序序列时, 会发生以下错误。此时,以下提示将提示使用COLLATE子句, 但是,由于不支持排序序列,因此无法使用此子句。
ERROR: could not determine which collation to use for string comparison HINT: Use the COLLATE clause to set the collation explicitly.
如果显示了上面显示的错误,请将列显式转换为NCHAR VARYING或TEXT类型。
语法
指定DATE类型如下。
Table K.92. 日期语法
数据类型语法 |
解释 |
---|---|
DATE |
存储日期和时间 |
通用规则
DATE是一种日期/时间数据类型。
日期和时间存储在DATE中。时区不会被存储。
注意
如果在DDL语句(如表定义)中使用orafce的DATE类型,请在执行DDL语句之前始终设置search_path。 即使在定义之后更改了search_path,数据类型也将是LightDB的DATE类型。
信息
orafce的DATE类型等同于LightDB的TIMESTAMP类型。 因此,可以使用参数数据类型为TIMESTAMP的现有LightDB函数。
语法
指定 RAW 类型如下。
Table K.93. RAW 语法
RAW 类型语法 |
解释 |
---|---|
RAW(len) |
存储可变长度的二进制数据。外部表示为十六进制。 len 只是为了与 Oracle 兼容,没有实际作用。 二进制数据可以是任意长度。 |
通用规则
RAW 是一个可变长度的十六进制数据类型。
十六进制字符串长度可变。指定的值将被存储为二进制数据。此数据类型的上限约为 1GB。
语法
指定 PLS_INTEGER 类型如下。
Table K.94. PLS_INTEGER 语法
PLS_INTEGER 类型语法 |
解释 |
---|---|
PLS_INTEGER |
PLS_INTEGER 数据类型以 32 位表示带符号整数,范围为 -2,147,483,648 到 2,147,483,647。 |
通用规则
PLS_INTEGER 类似于 int4。
语法
指定 BINARY_FLOAT 类型如下。
Table K.95. BINARY_FLOAT 语法
BINARY_FLOAT 类型语法 |
解释 |
---|---|
BINARY_FLOAT |
BINARY_FLOAT是一种32位单精度浮点数的数据类型。每个BINARY_FLOAT值需要4个字节。 |
通用规则
BINARY_FLOAT 类似于 float4.
与oracle相同,都遵循IEEE754标准。
例子
lightdb@test_o=# create table t1(key1 binary_float); CREATE TABLE lightdb@test_o=# \d+ t1 Table "public.t1" Column | Type | Collation | Nullable | Default | Storage | Sta ts target | Description --------+---------------+-----------+----------+---------+---------+---- ----------+------------- key1 | binary_float | | | | plain | | Access method: heap lightdb@test_o=# insert into t1 values(123456789012345678901234567890123456789); INSERT 0 1 lightdb@test_o=# insert into t1 values('infinity'); INSERT 0 1 lightdb@test_o=# insert into t1 values('NaN'); INSERT 0 1 lightdb@test_o=# select * from t1; key1 --------------- 1.2345679e+38 Infinity NaN (3 rows)
语法
指定 BINARY_DOUBLE 类型如下。
Table K.96. BINARY_DOUBLE 语法
BINARY_DOUBLE 类型语法 |
解释 |
---|---|
BINARY_DOUBLE |
BINARY_DOUBLE是一种64位双精度浮点数的数据类型。每个BINARY_DOUBLE值需要8个字节。 |
通用规则
BINARY_DOUBLE 类似于 float8。
与oracle相同都遵循IEEE754标准。
例子
lightdb@test_o=# create table t1(key1 binary_double); CREATE TABLE lightdb@test_o=# \d+ t1 Table "public.t1" Column | Type | Collation | Nullable | Default | Storage | Sta ts target | Description --------+---------------+-----------+----------+---------+---------+---- ----------+------------- key1 | binary_double | | | | plain | | Access method: heap lightdb@test_o=# insert into t1 values(123456789012345678901234567890123456789); INSERT 0 1 lightdb@test_o=# insert into t1 values('infinity'); INSERT 0 1 lightdb@test_o=# insert into t1 values('NaN'); INSERT 0 1 lightdb@test_o=# select * from t1; key1 ------------------------ 1.2345678901234568e+38 Infinity NaN (3 rows)
语法
按如下方式指定XMLType类型。
Table K.97. XMLType 语法
XMLType 语法 |
解释 |
---|---|
XMLType |
XMLType是一个对象类型,可以用来存储XML数据。 |
通用规则
XMLType是xml数据类型。
支持oracle.XMLType和pg_catalog.xml之间的隐式转换。
成员函数
function getClobVal() return CLOB
以文本形式返回XML
例子
lightdb@postgres=# create database test_oracle lightdb_syntax_compatible_type oracle; CREATE DATABASE lightdb@postgres=# \c test_oracle You are now connected to database "test_oracle" as user "lightdb". compatible type: oracle lightdb@test_oracle=# select dbms_output.serveroutput(true); serveroutput -------------- (1 row) lightdb@test_oracle=# CREATE TABLE xml_table (id NUMBER, xml_column XMLType ); CREATE TABLE lightdb@test_oracle=# INSERT INTO xml_table (id, xml_column) VALUES (1, XMLType('<root><name>John</name></root>')); INSERT 0 1 lightdb@test_oracle=# DECLARE lightdb@test_oracle$# v_clob CLOB; lightdb@test_oracle$# BEGIN lightdb@test_oracle$# SELECT XMLType.getClobVal(xml_column) lightdb@test_oracle$# INTO v_clob lightdb@test_oracle$# FROM xml_table lightdb@test_oracle$# WHERE id = 1; lightdb@test_oracle$# DBMS_OUTPUT.PUT_LINE('CLOB value: ' || v_clob); lightdb@test_oracle$# END; lightdb@test_oracle$# / CLOB value: <root><name>John</name></root> DO lightdb@test_oracle=# DECLARE lightdb@test_oracle$# xml_data XMLType; lightdb@test_oracle$# clob_data CLOB; lightdb@test_oracle$# BEGIN lightdb@test_oracle$# xml_data := XMLType('<root><name>John Doe</name></root>'); lightdb@test_oracle$# clob_data := xml_data.getClobVal(); lightdb@test_oracle$# DBMS_OUTPUT.PUT_LINE(clob_data); lightdb@test_oracle$# END; lightdb@test_oracle$# / <root><name>John Doe</name></root> DO lightdb@test_oracle=# SELECT XMLType.getClobVal(xml_column) from xml_table; getclobval -------------------------------- <root><name>John</name></root> (1 row)
本章引入 LightDB 已经支持的 Oracle 伪列。
ORA_ROWSCN
在 LightDB 中,ORA_ROWSCN
等价于 xmin
, 除了ORA_ROWSCN
的返回值类型是 bigint
.
样例
create table foo(a int); insert into foo values (1); select ora_rowscn, xmin from foo;
支持以下查询:
DUAL 表
DUAL 表是系统提供的虚拟表。 在执行 SQL 时不需要访问基表时使用,例如执行测试以获取结果表达式(如函数和运算符)。
示例
在以下示例中,返回当前系统日期。
SELECT CURRENT_DATE "date" FROM DUAL; date ------------ 2013-05-14 (1 row)
支持以下数学函数:
BIN_TO_NUM
BITAND
BITOR
BITXOR
COSH
MOD
REMAINDER
ROUND_TIES_TO_EVEN
SINH
TANH
描述
BIN_TO_NUM 将位向量转换为其等效数字。
语法
BIN_TO_NUM(VARIADIC integer []) returns int
通用规则
此函数的每个参数表示位向量中的一位。
此函数以任何整数数据类型或任何可隐式转换为整数的非整数数据类型作为参数。
BIN_TO_NUM 在数据仓库应用程序中很有用,用于使用分组集从物化视图中选择感兴趣的组。
注意
如果使用 BIN_TO_NUM 进行转换,则需要预先指定 "oracle" 作为search_path。
参见
有关如何编辑 search_path 的信息,请参阅 "使用 orafce 的注意事项"。
有关如何设置服务器参数的信息,请参阅LightDB文档中的 "服务器管理" > "服务器配置" > "设置参数"。
示例
SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL; bin_to_num ------------ 10 (1 row)
描述
执行按位 AND 操作。
语法
BITAND(int1 integers, int2 integers) returns bigint
通用规则
BITAND 对两个整数的每一位执行 AND 操作,并返回结果。
指定整数类型的值。
返回值的数据类型为 BIGINT。
示例
在以下示例中,返回数字字面值 5 和 3 的 AND 操作结果。
SELECT BITAND(5,3) FROM DUAL; bitand ------- 1 (1 row)
描述
执行按位 OR 操作。
语法
BITOR(int1 bigint, int2 bigint) returns bigint
通用规则
BITOR 对两个 BIGINT 的每一位执行 OR 操作,并返回结果。
指定 BIGINT 类型的值。
返回值的数据类型为 BIGINT。
注意
如果使用 BITOR,则需要预先指定 "oracle" 作为 search_path。
参见
有关如何编辑 search_path 的信息,请参阅 "使用 orafce 的注意事项"。
有关如何设置服务器参数的信息,请参阅LightDB文档中的 "服务器管理" > "服务器配置" > "设置参数"。
示例
在以下示例中,返回数字字面值 5 和 3 的 OR 操作结果。
SELECT BITOR(5,3) FROM DUAL; bitor ------- 7 (1 row)
描述
执行按位异或操作。
语法
BITXOR(int1 bigint, int2 bigint) returns bigint
通用规则
BITXOR 对两个整数的每一位执行 XOR 操作,并返回结果。
指定 BIGINT 类型的值。
返回值的数据类型为 BIGINT。
注意
如果使用 BITXOR,则需要预先指定 "oracle" 作为 search_path。
参见
有关如何编辑 search_path 的信息,请参阅 "使用 orafce 的注意事项"。
有关如何设置服务器参数的信息,请参阅LightDB文档中的 "服务器管理" > "服务器配置" > "设置参数"。
示例
在以下示例中,返回数字字面值 5 和 3 的 XOR 操作结果。
SELECT BITXOR(5,3) FROM DUAL; bitxor -------- 6 (1 row
描述
计算一个数字的双曲余弦。
语法
COSH(num numeric) returns double precision
通用规则
COSH 返回指定数字的双曲余弦值。
数字必须是数值数据类型。
返回值的数据类型是 DOUBLE PRECISION。
示例
在以下示例中,返回数字字面值 2.236 的双曲余弦值。
SELECT COSH(2.236) FROM DUAL; cosh ----------------- 4.7313591000247 (1 row)
描述
MOD返回n2除以n1的余数。如果n1为0,则返回n2。
语法
MOD(n2 bigint, n1 bigint) returns bigint MOD(n2 integer, n1 integer) returns integer MOD(n2 numeric, n1 numeric) returns numeric MOD(n2 smallint, n1 smallint) returns smallint
General rules
该函数接受数字作为参数
注意
mod 函数不支持一个参数是字符串形式的小数,另一个参数是整数的情况。
示例
SELECT mod(5,2) FROM DUAL; mod ----------- 1
描述
返回n2除以n1的余数。
语法
REMAINDER(n2 numeric, n1 numeric) returns numeric
通用规则
此函数将任何数字数据类型或可隐式转换为数字数据类型的任何非数字数据类型作为参数。
MOD函数类似于REMAINDER函数,但其公式中使用FLOOR函数,而REMAINDER使用ROUND函数。
如果n1!= 0,则余数为n2 -(n1 * N),其中N是最接近n2 / n1的整数。 如果n2 / n1等于x.5,则N是最接近的偶数整数。
注意
如果使用REMAINDER函数,则需要事先在search_path中指定“oracle”。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
请参阅LightDB文档中“服务器管理”>“服务器配置”>“设置参数”以获取有关如何设置服务器参数的信息。
示例
SELECT REMAINDER(5.5,2) FROM DUAL; remainder ----------- -0.5 (1 row)
描述
该函数将n四舍五入为整数位。
语法
ROUND_TIES_TO_EVEN(n NUMERIC,integer int4 DEFAULT 0) returns numeric
通用规则
如果整数为正,则n将向小数点右侧的整数位四舍五入。
如果未指定整数,则n将四舍五入为0位。
如果整数为负,则n将向小数点左侧的整数位四舍五入。
注意
如果使用ROUND_TIES_TO_EVEN函数,则需要事先在search_path中指定“oracle”。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
请参阅LightDB文档中“服务器管理”>“服务器配置”>“设置参数”以获取有关如何设置服务器参数的信息。
示例
以下示例将一个数字向右舍入到小数点后一位:
SELECT ROUND_TIES_TO_EVEN(45.177,1) "ROUND_EVEN" FROM DUAL; ROUND_EVEN ------------ 45.2 (1 row)
以下示例将一个数字向左舍入到小数点前一位:
SELECT ROUND_TIES_TO_EVEN(45.177,-1) "ROUND_EVEN" FROM DUAL; ROUND_EVEN ------------ 50 (1 row)
描述
计算一个数字的双曲正弦。
语法
SINH(num numeric) returns double precision
通用规则
SINH函数返回指定数字的双曲正弦。
数字必须是数字数据类型。
返回值的数据类型是DOUBLE PRECISION。
示例
在以下示例中,返回数字1.414的双曲正弦。
SELECT SINH(1.414) FROM DUAL; sinh ----------------- 1.93460168824956 (1 row)
描述
计算一个数字的双曲正切。
语法
TANH(num numeric) returns double precision
通用规则
TANH函数返回指定数字的双曲正切。
数字必须是数字数据类型。
返回值的数据类型是DOUBLE PRECISION。
示例
在以下示例中,返回数字3的双曲正切。
SELECT TANH(3) FROM DUAL; tanh ----------------- 0.995054753686731 (1 row)
描述
计算大于等于一个数的最小整数,当输入参数是interval类型时,会先获取其天数并将其转成数值后再计算。
语法
CEIL(i interval) returns number CEIL(n numeric) returns numeric CEIL(d double precision) returns numeric
通用规则
CEIL函数计算大于等于一个数的最小整数。
参数可以是interval类型、numeric类型或double precision类型。
返回值的数据类型是numeric或double precision类型。
示例
在以下示例中,返回大于等于一个数的最小整数,当输入参数是interval类型时,先获取其天数,这是个数值,然后再返回大于等于这个数值的最小整数。
select ceil(sysdate - '2023-01-01'::date) FROM dual ; ceil ------ 335 (1 row) select ceil(sysdate - to_date('2023-11-27','yyyy-mm-dd')) FROM dual; ceil ------ 5 (1 row) select ceil(sysdate - to_date('2023-01-01','yyyy-mm-dd')) FROM dual; ceil ------ 335 (1 row)
支持以下字符串函数:
BTRIM
INSTR
INSTRB
LENGTH
LENGTHB
LPAD
LTRIM
NLSSORT
REGEXP_COUNT
REGEXP_INSTR
REGEXP_LIKE
REGEXP_SUBSTR
REGEXP_REPLACE
REPLACE
RPAD
RTRIM
SOUNDEX
SUBSTR
SUBSTRB
CONCAT
UPPER
描述
从字符串的开头和结尾删除指定的字符。
语法
BTRIM(str text) returns text BTRIM(str text, trimChars text) returns text BTRIM(str clob) returns clob BTRIM(str clob, trimChars clob) returns clob
通用规则
BTRIM 从字符串 str 的开头和结尾删除 trimChars,并返回结果字符串。
如果指定了多个修剪字符,则删除与修剪字符匹配的所有字符。如果省略了 trimChars,则删除所有前导和尾随半角空格。
返回值的数据类型为文本类型如果第一个参数是 text 类型,返回值类型为 CLOB 如果第一个参数是 clob 类型。
注意
Oracle 数据库不支持 BTRIM 函数。
BTRIM 函数的 CHAR 类型规范使用 orafce 来定义,其行为与 LightDB 的 BTRIM 函数不同。必须修改 search_path 参数才能使其与上述规范描述的行为相同。
信息
LightDB 的 BTRIM 通用规则如下:
如果字符串是 CHAR 类型,则先删除尾随空格,然后删除修剪字符。
参见
有关如何编辑 search_path 的信息,请参阅“使用 orafce 的注意事项”。
请参阅 LightDB 文档中的“SQL 语言” > “函数和操作符” > “字符串函数和操作符”中的 BTRIM 了解更多信息。
示例
在以下示例中,返回从字符串 "aabcaba" 的开头和结尾删除 "a" 后的字符串。
SELECT BTRIM('aabcaba','a') FROM DUAL; btrim ------- bcab (1 row)
描述
返回字符串中子字符串的位置。
语法
INSTR(str1 text, str2 text) returns integer INSTR(str1 text, str2 text, startPos integer) returns integer INSTR(str1 text, str2 text, startPos integer, occurrences integer) returns integer
通用规则
INSTR 函数在字符串 str1 中搜索子字符串 str2,并返回第一次出现的字符位置(以字符计数)。
搜索从字符串 str1 的指定起始位置 startPos 开始。
当 startPos 为 0 或负数时,起始位置将从 str1 结尾左侧的指定字符数开始,INSTR 函数将从该点向后搜索。
如果没有指定起始位置,则从 str1 的开头开始搜索。
如果指定了 occurrences,则返回 str2 的第 n 次出现在 str1 中的位置。只能指定正数。
如果未指定 occurrences,则返回找到的第一个出现位置的起始位置。
如果在 str1 中未找到 str2,则返回 0。
对于 startPos 和 occurrences,请指定 SMALLINT 或 INTEGER 类型。
返回值的数据类型为 INTEGER。
示例
在以下示例中,字符串 "ABCACBCAAC" 中找到了字符 "BC",并返回了这些字符的位置。
SELECT INSTR('ABCACBCAAC','BC') FROM DUAL; instr ------- 2 (1 row) SELECT INSTR('ABCACBCAAC','BC',-1,2) FROM DUAL; instr ------- 2 (1 row)
描述
INSTRB 函数使用字节搜索字符串中的子字符串,并返回第一个指定出现的子字符串字节所在字符串的位置。
语法
INSTRB( p_source text, p_search text, p_position int4 default 1, p_occurrence int4 default 1) RETURNS integer
通用规则
INSTRB 函数在字符串 p_source 中搜索子字符串 p_search,并返回第一次出现的子字符串字节所在字符串的位置(以字节计数)。
搜索从字符串 p_source 的指定起始位置 p_position 开始。
当 p_position 为 0 或负数时,将引发错误。这与 Oracle 不同,在 Oracle 中,p_position 将从 p_source 结尾左侧的指定字节数开始,INSTRB 函数将从该点向后搜索。
如果未指定起始位置,则从 p_source 的开头开始搜索。
如果指定了 p_occurrence,则返回 p_search 的第 n 次出现在 p_source 中的位置。只能指定正数。
如果未指定 occurrences,则返回找到的第一个出现位置的起始位置。
如果在 p_source 中未找到 p_search,则返回 0。
返回值的数据类型为 INTEGER。
注意
如果使用 INSTRB 函数,则需要事先指定 search_path 为 "oracle"。
请参见
有关如何编辑 search_path 的信息,请参阅 "Notes on Using orafce"。
有关如何设置服务器参数的信息,请参阅 LightDB 文档中的 "Server Administration" > "Server Configuration" > "Setting Parameters" 部分。
示例
在下面的例子中,找到字符串“hhh测试onhx”中的字符“on”,并返回那些字节的位置。
SELECT INSTRB('hhh测试onhx', 'on') FROM DUAL; instrb -------- 10 (1 row) SELECT INSTRB('hhh测试onhx on xxxx', 'on', 7, 2) FROM DUAL; instrb -------- 15 (1 row)
描述
返回字符串中字符的数量。
语法
LENGTH(str text) returns integer
通用规则
LENGTH 返回字符串 str 中字符的数量。
如果字符串是 CHAR 类型,尾随空格也会计入长度。
返回值的数据类型是 INTEGER。
注意
上面的 LENGTH 规范使用 orafce 来确定其行为,这与 LightDB 的 LENGTH 不同。必须修改 search_path 参数,以使其按照 orafce 规范运行。
信息
LightDB 的 LENGTH 的通用规则如下:
如果字符串是 CHAR 类型,尾随空格不计入长度。
参见
有关如何编辑 search_path 的信息,请参阅“使用 orafce 的说明”。
有关 LENGTH 的信息,请参阅 LightDB 文档中的 “SQL 语言” > “函数和运算符” > “字符串函数和运算符”。
示例
在以下示例中,返回表 t1 中列 col2(使用 CHAR(10) 定义)中的字符数。
SELECT col2,LENGTH(col2) FROM t1 WHERE col1 = '1001'; col2 | length ------------+-------- AAAAA | 10 (1 row)
描述
返回字符串的字节数。
语法
LENGTHB(str text) returns integer
通用规则
LENGTHB 返回字符串 str 中的字节数。
如果字符串是 CHAR 类型,尾随空格也会计入长度。
返回值的数据类型是 INTEGER。
示例
在以下示例中,返回表 t1 中列 col2(使用 CHAR(10) 定义)中的字节数。请注意,在第二个 SELECT 语句中,"*" 中的每个字符占用 3 个字节,总共占用 9 个字节,并且为 7 个尾随空格添加了 7 个字节。这将得出结果为 16 个字节。
SELECT col2,LENGTHB(col2) FROM t1 WHERE col1 = '1001'; col2 | lengthb ---------------+--------- AAAAA | 10 (1 row) SELECT col2,LENGTHB(col2) FROM t1 WHERE col1 = '1004'; col2 | lengthb ---------------+--------- *** | 16 (1 row)
描述
使用一系列的字符填充一个字符串,使其达到指定的长度。
语法
LPAD(x bigint, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | integer) returns varchar2 LPAD(x integer, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | integer) returns varchar2 LPAD(x smallint, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | integer) returns varchar2 LPAD(x numeric, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | integer) returns varchar2 LPAD(str text, len integer) returns text LPAD(str text, len integer, paddingStr text | char | varchar2 | nvarchar2) returns text LPAD(str clob, len integer) returns clob LPAD(str clob, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | bigint | integer | smallint | numeric) returns clob LPAD(str char, len integer) returns varchar2 LPAD(str char, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | bigint | integer | smallint | numeric) returns varchar2 LPAD(str varchar, len integer) returns varchar2 LPAD(str varchar, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | bigint | integer | smallint | numeric) returns varchar2 LPAD(str varchar2, len integer) returns varchar2 LPAD(str varchar2, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | bigint | integer | smallint | numeric) returns varchar2 LPAD(str nvarchar2, len integer) returns nvarchar2 LPAD(str nvarchar2, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | bigint | integer | smallint | numeric) returns nvarchar2
通用规则
LPAD 函数将在字符串 str 的开始处反复填充填充字符 paddingStr,直到字符串达到长度 len,然后返回结果。
如果字符串是 CHAR 类型,则填充字符将添加到字符串中,而不会删除尾随空格。
在结果字符串中,全角字符被认为长度为2,半角字符被认为长度为1。如果一个全角字符不能被包含在结果字符串中,因为只有一个半角字符的空间可用,那么该字符串将用单字节空格填充。
如果第一个参数类型是 text 类型,返回值的数据类型是 text。如果第一个参数类型是 clob 类型,返回值的数据类型是 clob。如果第一个参数类型是 nvarchar2 类型,返回值的数据类型是 nvarchar2。 如果第一个参数类型是 bigint,character,character varying,integer,numeric,smallint,varchar2 类型,返回值的数据类型是 varchar2。
注意
上面的 LPAD 规范使用 orafce 实现,其行为与 LightDB 的 LPAD 不同。必须修改 search_path 参数才能使其按照 orafce 规范工作。
信息
LightDB 的 LPAD 的通用规则如下:
如果字符串是 CHAR 类型,则删除尾随空格,然后将填充字符添加到字符串中。
结果长度是字符数。
参见
有关如何编辑 search_path 的信息,请参阅《使用 orafce 的注意事项》。
有关 LPAD 的信息,请参阅 LightDB 文档中的 "SQL 语言" > "函数和操作符" > "字符串函数和操作符"。
示例
在下面的示例中,返回一个通过使用 "a" 填充字符串 "abc" 的左侧而形成的 10 个字符的字符串。
SELECT LPAD('abc',10,'a') FROM DUAL; lpad ------------ aaaaaaaabc (1 row)
描述
从字符串的开头删除指定的字符。
语法
LTRIM(str text) returns text LTRIM(str text, trimChars text) returns text LTRIM(str clob) returns clob LTRIM(str clob, trimChars clob) returns clob
通用规则
LTRIM 函数返回一个从字符串 str 的开头删除了 trimChars 的字符串。
如果指定了多个修剪字符,则删除与修剪字符匹配的所有字符。如果省略了 trimChars,则删除所有前导半角空格。
返回值的数据类型是 TEXT 如果第一个参数类型为 `text` 类型,CLOB 如果第一个参数类型为 `clob` 类型。
注意
上面的 LTRIM 规范使用 orafce 实现,其行为与 LightDB 的 LTRIM 不同。必须修改 search_path 参数才能使其按照 orafce 规范工作。
信息
LightDB的LTRIM的通用规则如下:
如果字符串是CHAR类型,则会先去除尾随空格,然后移除修剪字符。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关LTRIM的信息,请参阅LightDB文档中“SQL语言”>“函数和操作符”>“字符串函数和操作符”。
示例
在以下示例中,将返回从“aabcab”的开头中移除“ab”的字符串。
SELECT LTRIM('aabcab','ab') FROM DUAL; ltrim ------- cab (1 row)
描述
返回表示区域设置(COLLATE)的词法顺序的字节字符串。
语法
NLSSORT(str text) returns bytea NLSSORT(str text, locale text) returns bytea
通用规则
NLSSORT用于在区域设置(COLLATE)的排序顺序中进行比较和排序,该区域设置与默认区域设置不同。
可以为区域设置指定的值根据数据库服务器的操作系统而异。
如果省略了区域设置,则需要使用set_nls_sort预先设置区域设置。要使用set_nls_sort设置区域设置,请执行SELECT语句。
返回值的数据类型是BYTEA。
使用SELECT语句设置set_nls_sort的示例
SELECT set_nls_sort('en_US.UTF8');
注意
如果指定区域编码,请确保它与数据库编码匹配。
参见
有关可以指定的语言环境信息,请参阅LightDB文档中的“服务器管理”>“本地化”>“语言环境支持”部分。
示例
Table K.98. 表(t3)的组成
列1 |
列2 |
---|---|
1001 |
aabcababc |
2001 |
abcdef |
3001 |
aacbaab |
在以下示例中,返回按“da_DK.UTF8”排序表t3的列col2的结果。
SELECT col1,col2 FROM t3 ORDER BY NLSSORT(col2,'da_DK.UTF8'); col1 | col2 ------+------------ 2001 | abcdef 1001 | aabcababc 3001 | aacbaab (3 row)
描述
在字符串中搜索正则表达式,并返回匹配项的计数。
语法
REGEXP_COUNT(string text, pattern text) returns integer REGEXP_COUNT(string text, pattern text, startPos integer) returns integer REGEXP_COUNT(string text, pattern text, startPos integer, flags text) returns integer
通用规则
REGEXP_COUNT函数返回pattern在源string中出现的次数。 它返回一个整数,表示pattern出现的次数。 如果没有找到匹配项,则该函数返回0。 如果参数中有一个为空,则返回 NULL,但 'flags' 参数可以为空。
搜索从string中指定的起始位置startPos开始,默认从string的开头开始。
startPos是正整数,不允许使用负值从string的末尾开始搜索。
flags是一个字符表达式,它允许您改变函数的默认匹配行为。
flags的值可以包括以下一个或多个字符:
'i': 不区分大小写匹配。
'c': 区分大小写和重音敏感匹配。
'n': 句点(.)匹配换行符。默认情况下,句点不匹配换行符。
'm': 将源字符串视为多行。
'x': 忽略空格字符。默认情况下,空格字符与它们自身匹配。
如果省略了flags,那么:
默认情况下区分大小写和重音。
句点(.)不匹配换行符。
源字符串被视为单行。
注意
如果使用REGEXP_COUNT函数,则需要事先在search_path中指定"oracle"。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
示例
SELECT REGEXP_COUNT('a'||CHR(10)||'d', 'a.d') FROM DUAL; regexp_count -------------- 0 (1 row) SELECT REGEXP_COUNT('a'||CHR(10)||'d', 'a.d', 1, 'm') FROM DUAL; regexp_count -------------- 0 (1 row) SELECT REGEXP_COUNT('a'||CHR(10)||'d', 'a.d', 1, 'n') FROM DUAL; regexp_count -------------- 1 (1 row) SELECT REGEXP_COUNT('a'||CHR(10)||'d', '^d$', 1, 'm') FROM DUAL; regexp_count -------------- 1 (1 row)
描述
返回在字符串中找到模式匹配的开始或结束位置。
语法
REGEXP_INSTR(string text, pattern text) returns integer REGEXP_INSTR(string text, pattern text, startPos integer) returns integer REGEXP_INSTR(string text, pattern text, startPos integer, occurrence integer) returns integer REGEXP_INSTR(string text, pattern text, startPos integer, occurrence integer) returns integer REGEXP_INSTR(string text, pattern text, startPos integer, occurrence integer, return_opt integer) returns integer REGEXP_INSTR(string text, pattern text, startPos integer, occurrence integer, return_opt integer, flags text) returns integer REGEXP_INSTR(string text, pattern text, startPos integer, occurrence integer, return_opt integer, flags text) returns integer REGEXP_INSTR(string text, pattern text, startPos integer, occurrence integer, return_opt integer, flags text, group integer) returns integer
通用规则
REGEXP_INSTR函数返回一个整数,表示匹配子字符串的开始或结束位置,具体取决于return_opt参数的值。如果没有找到匹配项,则该函数返回0。
搜索从string中指定的起始位置startPos开始,默认从string的开头开始。
startPos是正整数,不允许使用负值从string的末尾开始搜索。
occurrence是一个正整数,表示应该搜索string中pattern的第几个出现次数。默认值为1,表示在string中搜索第一个出现的pattern。
return_opt允许您指定与出现次数相关的返回内容:
当return_opt = 0时,返回第一次出现的第一个字符的位置。这是默认值。
当return_opt = 1时,返回出现后面一个字符的位置。
flags是一个字符表达式,它允许您改变函数的默认匹配行为。有关详细信息,请参阅REGEXP_COUNT。
对于带有捕获组的pattern,group是一个正整数,表示应该返回pattern中的哪个捕获组。捕获组可以嵌套,它们按其在pattern中出现左括号的顺序进行编号。 如果group为零,则返回与模式匹配的整个子字符串的位置。如果group大于pattern中的捕获组数量,则函数返回零。 空的group值返回NULL。 group的默认值为零。
注意
如果使用REGEXP_INSTR函数,则需要事先在search_path中指定"oracle"。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
示例
SELECT REGEXP_INSTR('1234567890', '(123)(4(56)(78))') FROM DUAL; regexp_instr -------------- 1 (1 row) SELECT REGEXP_INSTR('1234567890', '(4(56)(78))', 3) FROM DUAL; regexp_instr -------------- 4 (1 row) SELECT REGEXP_INSTR('123 123456 1234567, 1234567 1234567 12', '[^ ]+', 1, 6) FROM DUAL; regexp_instr -------------- 37 (1 row) SELECT REGEXP_INSTR('199 Oretax Prayers, Riffles Stream, CA', '[S|R|P][[:alpha:]]{6}', 3, 2, 1) FROM DUAL; regexp_instr -------------- 28 (1 row)
描述
在查询的WHERE子句中使用,使得查询返回与给定模式匹配的行。
语法
REGEXP_LIKE(string text, pattern text) returns boolean REGEXP_LIKE(string text, pattern text, flags text) returns boolean
通用规则
REGEXP_LIKE类似于LIKE条件,但它执行正则表达式匹配,而不是LIKE执行的简单模式匹配。
返回一个布尔值,当模式匹配字符串时为true,否则为false。 如果参数中有一个为空,则返回 NULL,但 'flags' 参数可以为空。
flags是一个字符表达式,它允许您更改函数的默认匹配行为。有关详细信息,请参见REGEXP_COUNT。
注意
如果使用REGEXP_LIKE函数,需要预先指定“oracle”作为search_path。
参见
有关如何编辑search_path的信息,请参见“使用orafce的注意事项”。
示例
SELECT REGEXP_LIKE('a'||CHR(10)||'d', 'a.d', 'm') FROM DUAL; regexp_like ------------- f (1 row) SELECT REGEXP_LIKE('a'||CHR(10)||'d', 'a.d', 'n') FROM DUAL; regexp_like ------------- t (1 row)
描述
返回与调用函数中指定的模式匹配的字符串。
语法
REGEXP_SUBSTR(string text, pattern text) returns text REGEXP_SUBSTR(string text, pattern text, startPos integer) returns text REGEXP_SUBSTR(string text, pattern text, startPos integer, occurrence numeric) returns text REGEXP_SUBSTR(string text, pattern text, startPos integer, occurrence numeric, flags text) returns text REGEXP_SUBSTR(string text, pattern text, startPos integer, occurrence numeric, flags text, group int) returns text REGEXP_SUBSTR(string CLOB, pattern text) returns clob
通用规则
REGEXP_SUBSTR返回与将POSIX正则表达式模式与字符串匹配所得到的匹配子字符串。如果未找到匹配,则该函数返回NULL。 如果参数中有一个为空,则返回 NULL,但 'flags' 参数可以为空。 函数将字符串作为 TEXT 或 CLOB 数据返回,返回的字符集与第一个参数相同。
搜索从字符串中指定的起始位置startPos开始,默认从字符串的开头开始。
startPos是一个正整数,不允许使用负值从字符串的末尾开始搜索。
occurrence是一个正整数,表示在字符串中搜索第几个模式。 默认值为1,表示在字符串中搜索第一个模式。如果输入是一个浮点数,会向下取整。
flags是一个字符表达式,它允许您更改函数的默认匹配行为。有关详细信息,请参见REGEXP_COUNT。
对于具有捕获组的模式,*group*是一个正整数,表示应由函数返回模式中的哪个捕获组。捕获组可以嵌套,它们按照它们在模式中左括号出现的顺序进行编号。 如果group为零,则返回与模式匹配的整个子字符串的位置。 如果group值超过模式中捕获组的数量,则函数返回NULL。 空的group值返回NULL。 group的默认值为零。
注意
如果使用REGEXP_SUBSTR函数,需要预先指定“oracle”作为search_path。
参见
有关如何编辑search_path的信息,请参见“使用orafce的注意事项”。
示例
SELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL; regexp_substr ---------------- , zipcode town (1 row) SELECT regexp_substr('number of your street, zipcode town, FR', ',[^,]+', 24) FROM DUAL; regexp_substr --------------- , FR (1 row) SELECT regexp_substr('number of your street, zipcode town, FR', ',[^,]+', 1, 2) FROM DUAL; regexp_substr --------------- , FR (1 row) SELECT regexp_substr('1234567890 1234567890', '(123)(4(56)(78))', 1, 1, 'i', 0) FROM DUAL; regexp_substr --------------- 12345678 (1 row) SELECT regexp_substr('1234567890 1234567890', '(123)(4(56)(78))', 1, 1.9, 'i', 0) FROM DUAL; regexp_substr --------------- 12345678 (1 row)
描述
返回与调用函数中指定的模式匹配的字符串。
语法
REGEXP_REPLACE(string text, pattern text, replace_string text, startPos integer, occurrence integer, flags text) returns text REGEXP_REPLACE(string clob, pattern text, replace_string text) returns clob
通用规则
REGEXP_REPLACE 返回修改后的源字符串,其中源字符串中出现的 POSIX 正则表达式模式会被替换为指定的替换字符串。 如果未找到匹配项或查询的出现次数超过了匹配项的数量,则返回未修改的源字符串。 函数返回值为 TEXT 类型如果第一个参数不是 CLOB 类型,CLOB 类型如果第一个参数是 CLOB 类型。
搜索和替换从指定的起始位置 startPos 开始,在 string 中进行,默认从 string 的开头开始。
startPos 是一个正整数,不允许使用负值从 string 的末尾开始搜索。
occurrence 是一个正整数,表示应搜索和替换 string 中 pattern 的哪个出现次数。默认值为 0,表示替换 string 中所有的 pattern。
flags 是一个字符表达式,可让您更改函数的默认匹配行为。有关详细信息,请参见 REGEXP_COUNT。
注意
如果使用 REGEXP_REPLACE 函数,则需要提前指定 "oracle" 作为 search_path。
参见
有关如何编辑 search_path 的信息,请参阅 "使用 orafce 的注释"。
示例
SELECT regexp_replace('512.123.4567 612.123.4567', '([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})', '(\1) \2-\3') FROM DUAL; regexp_replace ------------------------------- (512) 123-4567 (612) 123-4567 (1 row) SELECT oracle.REGEXP_REPLACE('number your street, zipcode town, FR', '( ){2,}', ' ', 9); regexp_replace ---------------------------------------- number your street, zipcode town, FR (1 row) SELECT oracle.REGEXP_REPLACE('number your street, zipcode town, FR', '( ){2,}', ' ', 9, 2); regexp_replace --------------------------------------------- number your street, zipcode town, FR (1 row)
描述
返回将每个 search_string 的出现替换为 replacement_string 的字符串。
语法
REPLACE(string text, pattern text) returns text REPLACE(string text, pattern text, replace_string text) returns text REPLACE(string uuid, pattern text, replace_string text) returns text REPLACE(string CLOB, pattern text) returns CLOB REPLACE(string CLOB, pattern text, replace_string text) returns CLOB
通用规则
如果省略或为 null,则将删除 search_string 的所有出现。如果 search_string 为 null,则返回 string。
函数返回值为 TEXT 类型如果第一个参数不是 CLOB 类型,CLOB 类型如果第一个参数是 CLOB 类型。
注意
上述 REPLACE 规范使用 orafce 来实现其行为,这与 LightDB 的 REPLACE 不同。必须修改 search_path 参数,以使其按照 orafce 规范进行操作。
信息
LightDB 的 REPLACE 的通用规则如下:
如果 replace_string 或 search_string 为 null,则返回 null。
参见
有关如何编辑 search_path 的信息,请参阅 "使用 orafce 的注释"。
示例
SELECT REPLACE('abcdAbcdasd', 'a') FROM DUAL; replace ----------- bcdAbcdsd (1 row) SELECT REPLACE('abcdAbcdasd', 'a','c') FROM DUAL; replace ------------- cbcdAbcdcsd (1 row) SELECT REPLACE('abcdAbcdasd', NULL,'c') FROM DUAL; replace ------------- abcdAbcdasd (1 row) SELECT REPLACE('abcdAbcdasd', 'a',NULL) FROM DUAL; replace ----------- bcdAbcdsd (1 row)
描述
使用一系列字符将字符串右侧填充到指定的长度。
语法
RPAD(x bigint, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | integer) returns varchar2 RPAD(x integer, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | integer) returns varchar2 RPAD(x smallint, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | integer) returns varchar2 RPAD(x numeric, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | integer) returns varchar2 RPAD(str text, len integer) returns text RPAD(str text, len integer, paddingStr text | char | varchar2 | nvarchar2) returns text RPAD(str clob, len integer) returns clob RPAD(str clob, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | bigint | integer | smallint | numeric) returns clob RPAD(str char, len integer) returns varchar2 RPAD(str char, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | bigint | integer | smallint | numeric) returns varchar2 RPAD(str varchar, len integer) returns varchar2 RPAD(str varchar, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | bigint | integer | smallint | numeric) returns varchar2 RPAD(str varchar2, len integer) returns varchar2 RPAD(str varchar2, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | bigint | integer | smallint | numeric) returns varchar2 RPAD(str nvarchar2, len integer) returns nvarchar2 RPAD(str nvarchar2, len integer, paddingStr text | clob | char | varchar | varchar2 | nvarchar2 | bigint | integer | smallint | numeric) returns nvarchar2
通用规则
RPAD 返回在使用填充字符 paddingStr 反复填充字符串 str 的末尾直到字符串达到长度 len 后的结果。
如果字符串是 CHAR 类型,则添加填充字符时不会删除尾随空格。
在结果字符串中,全角字符被认为长度为 2,半角字符长度为 1。如果由于只有一个半角字符的空间可用而无法包含全角字符,则使用单字节空格填充字符串。
如果第一个参数类型是 text 类型,返回值的数据类型是 text。如果第一个参数类型是 clob 类型,返回值的数据类型是 clob。如果第一个参数类型是 nvarchar2 类型,返回值的数据类型是 nvarchar2。 如果第一个参数类型是 bigint,character,character varying,integer,numeric,smallint,varchar2 类型,返回值的数据类型是 varchar2。
注意
上述 RPAD 规范使用 orafce 来实现其行为,这与 LightDB 的 RPAD 不同。必须修改 search_path 参数,以使其按照 orafce 规范进行操作。
信息
LightDB 的 RPAD 的通用规则如下:
如果字符串是 CHAR 类型,则删除尾随空格,然后将填充字符添加到字符串中。
结果长度是字符数。
参见
有关如何编辑 search_path 的信息,请参阅 "使用 orafce 的注释"。
有关 RPAD 的信息,请参阅 LightDB 文档中的 "SQL 语言" > "函数和运算符" > "字符串函数和运算符"。
示例
在以下示例中,返回通过使用 "a" 右侧填充字符串 "abc" 形成的长度为 10 个字符的字符串。
SELECT RPAD('abc',10,'a') FROM DUAL; rpad ------------ abcaaaaaaa (1 row)
描述
从字符串末尾删除指定的字符。
语法
RTRIM(str text) returns text RTRIM(str text, trimChars text) returns text RTRIM(str clob) returns clob RTRIM(str clob, trimChars text) returns clob
通用规则
RTRIM 返回从字符串 str 末尾删除 trimChars 后的字符串。
如果指定了多个修剪字符,则删除与修剪字符匹配的所有字符。如果省略了 trimChars,则删除所有尾随半角空格。
返回的字符串是 TEXT 类型如果第一个参数是字符类型,CLOB 类型如果第一个参数是 CLOB 类型。
注意
上述 RTRIM 规范使用 orafce 来实现其行为,这与 LightDB 的 RTRIM 不同。必须修改 search_path 参数,以使其与 orafce 规范的行为相同。
信息
LightDB 的 RTRIM 的通用规则如下:
如果字符串是 CHAR 类型,则删除尾随空格,然后删除修剪字符。
请参见
参阅“使用orafce的注意事项”了解如何编辑search_path。
请参阅LightDB文档中的“SQL语言” > “函数和操作符” > “字符串函数和操作符”,了解有关RTRIM的信息。
示例
在下面的示例中,将从“aabcab”的结尾中删除“ab”字符串并返回。
SELECT RTRIM('aabcab','ab') FROM DUAL; rtrim ------- aabc (1 row)
描述
SOUNDEX返回一个包含char的语音表示的字符字符串。 此函数可让您比较不同拼写但在英语中发音相似的单词。
语法
SOUNDEX(str text) returns text
通用规则
语音表示在Donald E. Knuth的《计算机程序设计艺术》第3卷:“排序和搜索”中定义。
保留字符串的第一个字母并删除以下字母的所有其他出现次数:a,e,h,i,o,u,w,y。
将剩下的字母按以下方式分配数字:
b, f, p, v = 1 c, g, j, k, q, s, x, z = 2 d, t = 3 l = 4 m, n = 5 r = 6
如果原始名称(在步骤1之前)中有两个或多个具有相同数字的字母相邻,或者除了任何插入的h和w之外相邻,则保留第一个字母并省略所有具有相同数字的相邻字母的其余部分。
返回前4个字节,右侧补0。
注意
如果使用SOUNDEX函数,则需要事先在search_path中指定“oracle”。
请参见
参阅“使用orafce的注意事项”了解如何编辑search_path。
示例
在下面的示例中,将从“aabcab”的结尾中删除“ab”字符串并返回。
SELECT SOUNDEX('SMYTHE')=SOUNDEX('Smith') as same FROM DUAL; same ------ t (1 row)
描述
使用字符指定位置和长度提取字符串的一部分。
语法
SUBSTR(str text, startPos integer) returns text SUBSTR(str text, startPos numeric) returns text SUBSTR(str text, startPos integer, len integer) returns text SUBSTR(str text, startPos numeric, len numeric) returns text SUBSTR(str CLOB, startPos number) returns CLOB SUBSTR(str CLOB, startPos number, len number) returns CLOB
通用规则
SUBSTR从字符串str的位置startPos开始提取并返回一个子字符串,长度为len个字符。
当startPos为正数时,它将是从字符串开头算起的字符数。
当startPos为0时,它将被视为1。
当startPos为负数时,它将是从字符串末尾算起的字符数。
当未指定len时,将返回字符串末尾的所有字符。如果len小于1,则返回NULL。
对于startPos和len,请指定整数或NUMERIC类型。如果指定了包含小数位的数字,则将其截断为整数。
函数返回值为 TEXT 类型如果第一个参数是字符类型,CLOB 类型如果第一个参数是 CLOB 类型。
注意
有两种类型的SUBSTR。一种与上述描述相同,另一种与SUBSTRING相同。必须修改search_path参数才能使其与上述规范的行为相同。
如果未实施更改,则SUBSTR与SUBSTRING相同。
信息
LightDB的SUBSTRING的通用规则如下:
无论起始位置是正数、0还是负数,起始位置都将从字符串开头算起。
当未指定len时,将返回字符串末尾的所有字符。
如果未提取字符串或len小于1,则返回空字符串。
请参见
请参阅LightDB文档中的“The SQL Language” > “Functions and Operators” > “String Functions and Operators”中的SUBSTRING信息。
示例
在下面的示例中,提取了字符串“ABCDEFG”的部分内容。
SELECT SUBSTR('ABCDEFG',3,4) "Substring" FROM DUAL; Substring ----------- CDEF (1 row) SELECT SUBSTR('ABCDEFG',-5,4) "Substring" FROM DUAL; Substring ----------- CDEF (1 row)
描述
使用字节指定位置和长度提取字符串的一部分。
语法
SUBSTRB(str text, startPos integer) returns varchar2 SUBSTRB(str text, startPos integer, len integer) returns varchar2
通用规则
SUBSTR从字符串str的字节位置startPos开始提取并返回一个子字符串,长度为len个字节。
当startPos为0或负数时,提取从起始位置减1并向左移动相应位置数后找到的位置开始。
当未指定len时,将返回字符串末尾的所有字节。
如果未提取字符串或len小于1,则返回空字符串。
对于startPos和len,请指定SMALLINT或INTEGER类型。
返回值的数据类型是VARCHAR2。
注意
SUBSTRB的外部规范与orafce添加的SUBSTR不同,符合LightDB的SUBSTRING。
示例
在下面的示例中,提取了字符串“aaabbbccc”的部分内容。
SELECT SUBSTRB('aaabbbccc',4,3) FROM DUAL; substrb ----------- bbb (1 row) SELECT SUBSTRB('aaabbbccc',-2,6) FROM DUAL; substrb ----------- aaa (1 row)
描述
拼接两个字符串
语法
CONCAT(str1 TEXT, str2 TEXT) returns TEXT CONCAST(str1 CLOB, str2 CLOB) returns CLOB
通用规则
拼接两个不同类型的值时,该函数返回值类型为导致无损转换的数据类型。
该函数和拼接操作符 || 等价。
函数返回值为 TEXT 类型如果第一个参数是字符类型,CLOB 类型如果第一个参数是 CLOB 类型。
样例
SELECT concat('a', 'b') FROM DUAL; concat -------- ab (1 row) SELECT concat(to_clob('a'), 'b') FROM DUAL; concat -------- ab (1 row)
描述
UPPER 返回所有字母为大写的字符串
语法
UPPER(string TEXT) returns TEXT UPPER(string CLOB) returns CLOB
通用规则
函数返回值为 TEXT 类型如果第一个参数是字符类型,CLOB 类型如果第一个参数是 CLOB 类型。
样例
SELECT UPPER('hello world') FROM DUAL; upper ------------- HELLO WORLD (1 row) SELECT UPPER(to_clob('hello world')) FROM DUAL; upper ------------- HELLO WORLD (1 row)
支持以下日期/时间函数:
ADD_MONTHS
DBTIMEZONE
LAST_DAY
MONTHS_BETWEEN
NEXT_DAY
ROUND
SESSIONTIMEZONE
SYSDATE
TRUNC
TZ_OFFSET
注意
如果日期/时间函数中只显示了DATE类型,则这些函数可在orafce和LightDB中使用。
描述
对日期添加月份。
语法
ADD_MONTHS(date DATE, months INTEGER) returns DATE ADD_MONTHS(date TIMESTAMP WITH TIME ZONE, months INTEGER) returns TIMESTAMP
通用规则
ADD_MONTHS返回date加上months。
对于date,请指定DATE或TIMESTAMP WITH TIME ZONE类型。
对于months,请指定SMALLINT或INTEGER类型。
如果months指定为负值,则从日期中减去月数。
返回值的数据类型是DATE或TIMESTAMP。
注意
如果使用orafce的DATE类型,则需要提前指定search_path为“oracle”。
请参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
示例
下面的示例显示了在日期2016年5月1日上添加3个月的结果。
SELECT ADD_MONTHS(DATE'2016/05/01',3) FROM DUAL; add_months --------------------- 2016-08-01 00:00:00 (1 row)
描述
返回数据库时区的值。
语法
DBTIMEZONE() returns text
通用规则
DBTIMEZONE返回数据库的时区值。
返回值的数据类型为TEXT。
注意
如果使用DBTIMEZONE,则需要提前在search_path中指定“oracle”。
数据库的时区默认设置为“GMT”。 要更改时区,请更改“orafce.timezone”参数。 下面是使用SET语句的示例。
SET orafce.timezone = 'Japan';
可以使用任何设置服务器参数的方法来设置orafce.timezone设置。
如果使用设置了orafce.timezone的SQL语句,可能会显示以下消息,但是参数设置已启用,所以可以忽略此消息。
WARNING: unrecognized configuration parameter "orafce.timezone"
可以在“orafce.timezone”中设置的时区与“TimeZone”服务器参数的设置相同。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关时区的信息,请参阅LightDB文档中的“The SQL Language” > “Data Types” > “Date/Time Types”。
示例
在以下示例中,返回DBTIMEZONE结果。
SELECT DBTIMEZONE() FROM DUAL; dbtimezone ------------ GMT (1 row)
描述
返回指定日期所在月份的最后一天。
语法
LAST_DAY(date DATE) returns DATE LAST_DAY(date TIMESTAMPTZ) returns TIMESTAMPTZ
通用规则
LAST_DAY返回指定日期所在月份的最后一天。
对于date,请指定DATE或TIMESTAMPTZ类型。
返回值的数据类型为DATE或TIMESTAMPTZ。
注意
如果使用orafce的DATE类型,则需要提前在search_path中指定“oracle”。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
示例
在以下示例中,返回“2016年2月1日”的最后一天。
SELECT LAST_DAY(DATE'2016/02/01') FROM DUAL; last_day --------------------- 2016-02-29 00:00:00 (1 row)
描述
返回两个日期之间的月数。
语法
MONTHS_BETWEEN(date1 DATE, date2 DATE) returns NUMERIC MONTHS_BETWEEN(date1 TIMESTAMP WITH TIME ZONE, date2 TIMESTAMP WITH TIME ZONE) returns NUMERIC
通用规则
MONTHS_BETWEEN返回date1和date2之间月份的差异。
对于date1和date2,请指定DATE或TIMESTAMPTZ类型。
如果date2比date1早,返回值将为负数。
如果两个日期是同一天,或者这两个日期都是它们所属月份的最后一天,则返回一个整数。 如果这两个日期的天数不同,则将一个月视为31天,并返回一个值,该值加上日期差的除以31的结果。
返回值的数据类型为DATE或NUMERIC。
注意
如果使用orafce的DATE类型,则需要提前在search_path中指定“oracle”。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
示例
在以下示例中,返回2016年3月15日和2015年11月15日之间月份的差异。
SELECT MONTHS_BETWEEN(DATE'2016/03/15', DATE'2015/11/15') FROM DUAL; months_between ---------------- 4 (1 row)
描述
返回指定日期之后的第一个特定星期几的日期。
语法
NEXT_DAY(date DATE, dayOfWk TEXT) returns DATE NEXT_DAY(date DATE, dayOfWk INTEGER) returns DATE NEXT_DAY(date TIMESTAMP WITH TIME ZONE, dayOfWk TEXT) returns TIMESTAMP NEXT_DAY(date TIMESTAMP WITH TIME ZONE, dayOfWk INTEGER) returns TIMESTAMP
通用规则
NEXT_DAY 返回符合条件的日期,即在指定日期 date 之后的第一个 dayOfWk 的实例。
对于 date,请指定为 DATE 或 TIMESTAMPTZ WITH TIME ZONE 类型。
指定表示星期几的数字值或字符串。
可指定的星期几值
Table K.99. NEXT_DAY 函数中设置 dayOfWk 的值
设置示例 |
概述 |
---|---|
1 |
可指定数字 1 到 7 表示星期日到星期六 |
'Sun' 或 'Sunday' |
英文显示的星期几 |
'*' |
日文显示的星期几 |
返回值的数据类型为 DATE 或 TIMESTAMP。
注意
如果使用 orafce 的 DATE 类型,则需要提前指定 search_path 为 "oracle"。
使用日语输入日期的能力是由 orafce 私有规范提供的。 当使用除 NEXT_DAY 之外的日期/时间函数(如 TO_DATE)时,无法使用日语输入日期。
参见
有关如何编辑 search_path 的信息,请参阅 "使用 orafce 的注意事项"。
示例
在下面的示例中,返回 "2016 年 5 月 1 日" 或之后的第一个星期五的日期。
SELECT NEXT_DAY(DATE'2016/05/01', 'Friday') FROM DUAL; next_day --------------------- 2016-05-06 00:00:00 (1 row)
描述
对日期进行四舍五入。
语法
ROUND(date DATE) returns DATE ROUND(date DATE, fmt TEXT) returns DATE ROUND(date TIMESTAMP WITH TIME ZONE) returns TIMESTAMP WITH TIME ZONE ROUND(date TIMESTAMP WITH TIME ZONE, fmt TEXT) returns TIMESTAMP WITH TIME ZONE ROUND(date TIMESTAMP WITHOUT TIME ZONE) returns TIMESTAMP WITHOUT TIME ZONE ROUND(date TIMESTAMP WITHOUT TIME ZONE, fmt TEXT) returns TIMESTAMP WITHOUT TIME ZONE
通用规则
ROUND 函数返回按格式模型 fmt 指定的单位进行四舍五入的日期。
对于 date,请指定为 DATE 或 TIMESTAMPTZ 类型。
以字符串形式指定格式模型。
可指定的格式模型值
Table K.100. ROUND 函数中设置格式模型
格式模型 |
舍入单位 |
---|---|
Y,YY,YYY,YYYY, SYYYY,YEAR,SYEAR |
年 |
I,IY,IYY,IYYY |
年(包括符合 ISO 标准的日历周的值) |
Q |
季度 |
WW |
周(一年的第一天) |
IW |
周(该周的星期一) |
W |
周(该月的第一个星期日所在的周) |
DAY,DY,D |
周(该周的星期日) |
MONTH,MON,MM,RM |
月 |
CC,SCC |
世纪 |
DDD,DD,J |
日 |
HH,HH12,HH24 |
小时 |
MI |
分钟 |
如果小数位数被四舍五入:对于年,舍入边界为 7 月 1 日; 对于月份,日期为 16 日;对于周,星期四为舍入边界。
如果省略 fmt,则按天四舍五入日期。
如果在日期中指定了 LightDB 的 DATE 类型,则返回值的数据类型将为 DATE 类型。 如果在日期中指定了 TIMESTAMP 类型,则数据类型将为 TIMESTAMP WITH TIME ZONE, 无论是否使用时区。
示例
在下面的示例中,返回按本周的星期日进行四舍五入的 "2016 年 6 月 20 日 18:00:00" 的结果。
SELECT ROUND(TIMESTAMP'2016/06/20 18:00:00','DAY') FROM DUAL; round ------------------------ 2016-06-19 00:00:00+09 (1 row)
描述
返回会话的时区。
语法
SESSIONTIMEZONE() returns text
通用规则
SESSIONTIMEZONE 返回会话之间的时区值。
返回值的数据类型为TEXT。
注意
如果使用SESSIONTIMEZONE,需要提前将search_path指定为"oracle"。
SESSIONTIMEZONE返回的值将成为"TimeZone"服务器参数中设置的值。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
示例
在下面的示例中,返回会话的时区。
SELECT SESSIONTIMEZONE() FROM DUAL; sessiontimezone ----------------- Japan (1 row)
描述
返回系统日期。
语法
SYSDATE() returns oracle.date
通用规则
SYSDATE返回系统日期。
返回值的数据类型是orafce的DATE类型。
注意
如果使用SYSDATE,需要提前将search_path指定为"oracle"。
SYSDATE返回的日期依赖于orafce数据库的时区值。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关数据库时区值的信息,请参阅"DBTIMEZONE"。
有关时区的信息,请参阅LightDB文档中的“The SQL Language” > “Data Types” > “Date/Time Types”。
示例
在下面的示例中,返回系统日期。
SELECT SYSDATE() FROM DUAL; sysdate --------------------- 2016-06-22 08:06:51 (1 row)
描述
截取日期部分。
语法
TRUNC(date DATE) returns DATE TRUNC(date DATE, fmt TEXT) returns DATE TRUNC(date TIMESTAMP WITH TIME ZONE) returns TIMESTAMP WITH TIME ZONE TRUNC(date TIMESTAMP WITH TIME ZONE, fmt TEXT) returns TIMESTAMP WITH TIME ZONE TRUNC(date TIMESTAMP WITHOUT TIME ZONE) returns TIMESTAMP WITHOUT TIME ZONE TRUNC(date TIMESTAMP WITHOUT TIME ZONE, fmt TEXT) returns TIMESTAMP WITHOUT TIME ZONE
通用规则
TRUNC返回按格式模型fmt指定的单位截断的日期。
对于date,请指定DATE或TIMESTAMP类型。
将格式模型指定为字符串。可以指定的值与ROUND相同。
如果省略fmt,则按天截断日期。
如果在日期中指定了LightDB的DATE类型,则返回值的数据类型将是该DATE类型。 如果在日期中指定了TIMESTAMP类型,则返回值的数据类型为TIMESTAMP WITH TIME ZONE, 无论是否使用时区。
参见
有关可以为格式模型指定的值的信息,请参阅“ROUND”。
示例
在下面的示例中,返回截取了日期部分的"August 10, 2016 15:30:00"。
SELECT TRUNC(TIMESTAMP'2016/08/10 15:30:00','DDD') FROM DUAL; trunc ------------------------ 2016-08-10 00:00:00+09 (1 row)
描述
返回时区偏移量。
语法
TZ_OFFSET(text) returns text
通用规则
您可以输入一个有效的时区区域名称,或一个距UTC的时区偏移量(仅返回该偏移量本身)。
要获取time_zone_name的有效值列表,请查询pg_timezone_names的name列。
注意
如果使用TZ_OFFSET,需要提前将search_path指定为"oracle"。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
请参考LightDB文档中的"服务器管理" > "服务器配置" > "设置参数",了解如何设置服务器参数。
示例
SELECT TZ_OFFSET('Asia/Shanghai') FROM DUAL; tz_offset ----------- 08:00:00 (1 row) (1 row)
支持以下数据类型格式化函数:
CONVERT
NUMTOYMINTERVAL
TO_BLOB(raw)
TO_CHAR
TO_DATE
TO_MULTI_BYTE
TO_NUMBER
TO_SINGLE_BYTE
ASCIISTR
ASCII
SQLCODE_TO_SQLSTATE
TO_CLOB
RAWTOHEX
ROWIDTOCHAR
描述
CONVERT将一个字符字符串从一个字符集转换为另一个字符集。
语法
CONVERT(str TEXT,dest_char_set TEXT,source_char_set TEXT DEFAULT 'utf8') returns TEXT
通用规则
str参数是要转换的值。
dest_char_set参数是将str转换为的字符集的名称。
source_char_set参数是数据库中存储str的字符集的名称。默认值为数据库字符集。
目标字符集和源字符集参数都可以是文字或包含字符集名称的列。
为了在字符转换中实现完全对应,目标字符集必须包含源字符集中定义的所有字符的表示。如果目标字符集中不存在某个字符,则会出现替换字符。替换字符可以作为字符集定义的一部分进行定义。
注意
如果使用CONVERT转换字符串,则需要事先指定"oracle"用于search_path。
参见
请参考"使用orafce的注意事项"了解如何编辑search_path。
请参考LightDB文档中的"服务器管理" > "服务器配置" > "设置参数",了解如何设置服务器参数。
示例
SELECT CONVERT('娴嬭瘯', 'gbk', 'utf8') from dual; FROM DUAL; convert --------- 测试 (1 row)
描述
NUMTOYMINTERVAL将数字转换为INTERVAL YEAR TO MONTH文字。
语法
NUMTOYMINTERVAL(n numeric, interval_unit text) returns interval
通用规则
interval_unit的值指定n的单位,并且必须解析为以下字符串值之一:'YEAR','MONTH'。
interval_unit不区分大小写。
注意
如果使用NUMTOYMINTERVAL指定日期/时间值,则需要事先指定"oracle"用于search_path。
参见
请参考"使用orafce的注意事项"了解如何编辑search_path。
请参考LightDB文档中的"服务器管理" > "服务器配置" > "设置参数",了解如何设置服务器参数。
示例
SELECT NUMTOYMINTERVAL(1,'YEAR') FROM DUAL; numtoyminterval ----------------- 1 year (1 row)
描述
TO_BLOB(raw)将RAW值转换为BLOB值。
语法
TO_BLOB(raw) returns blob
注意
如果使用TO_BLOB(raw)函数,则需要事先指定"oracle"用于search_path。
参见
请参考"使用orafce的注意事项"了解如何编辑search_path。
请参考LightDB文档中的"服务器管理" > "服务器配置" > "设置参数",了解如何设置服务器参数。
示例
SELECT TO_BLOB(UTL_RAW.CAST_TO_RAW('测试')) FROM DUAL; to_blob ---------------- \xe6b58be8af95 (1 row)
描述
将一个值转换为字符串。
语法
TO_CHAR(num SMALLINT) returns TEXT TO_CHAR(num INTEGER) returns TEXT TO_CHAR(num BIGINT) returns TEXT TO_CHAR(num REAL) returns TEXT TO_CHAR(num DOUBLE PRECISION) returns TEXT TO_CHAR(num NUMERIC) returns TEXT TO_CHAR(date TIMESTAMP) returns TEXT TO_CHAR(TEXT) returns TEXT TO_CHAR(date TIMESTAMP, fmt TEXT) returns TEXT TO_CHAR(date TIMESTAMP WITH TIME ZONE, fmt TEXT) returns TEXT TO_CHAR(date TIMESTAMP, fmt TEXT, nls_date_language TEXT) returns TEXT TO_CHAR(date TIMESTAMP WITH TIME ZONE, fmt TEXT, nls_date_language TEXT) returns TEXT
通用规则
TO_CHAR将特定的数字或日期/时间值转换为字符串。
对于num,请指定数字数据类型。
对于date,请指定DATE或TIMESTAMP类型。 另外,您可以事先为nls_date_format变量设置日期/时间格式,则无需 TO_CHAR 调用时指定。 以下是使用SET语句进行设置的示例。
SET nls_date_format = 'YYYY/MM/DD HH24:MI:SS';
无论显示指定还是调用时指定,格式符大小写效果相同。
对于fmt,用于设置数据格式。 当第一个参数是数字类型时,请参见数字值的模版模式。 当第一个参数是日期类型时,请参见日期值的模板模式。
对于nls_date_language,用于设置日期的显示语言环境。
返回值的数据类型为TEXT。
注意
如果使用TO_CHAR来指定日期/时间值,则需要事先将search_path设置为"oracle"。
可以使用任何设置服务器参数的方法来设置nls_date_format设置。
如果设置了nls_date_format,则在执行SQL语句时可能会显示以下消息,但是参数设置已启用,因此可以忽略此消息。
WARNING: unrecognized configuration parameter "nls_date_format"
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关如何设置服务器参数的信息,请参阅LightDB文档中的“服务器管理” > “服务器配置” > “设置参数”。
示例
在以下示例中,将数字值“123.45”作为字符串返回。
SELECT TO_CHAR(123.45) FROM DUAL; to_char --------- 123.45 (1 row) SELECT to_char (sysdate, 'YYYY-MM-DD', 'NLS_DATE_LANGUAGE=''SIMPLIFIED CHINESE''' ); to_char ------------ 2023-12-04 (1 row)
描述
根据指定的格式将字符串转换为日期。
语法
TO_DATE(str TEXT) returns TIMESTAMP TO_DATE(str TEXT, fmt TEXT) returns TIMESTAMP TO_DATE(oracle.date) returns TIMESTAMP
通用规则
TO_DATE将字符串str根据指定的格式fmt转换为日期。
指定一个表示日期/时间的字符串。
指定所需的日期/时间格式。如果省略,则使用nls_date_format变量中指定的格式。 如果未设置nls_date_format变量,则使用现有的日期/时间输入解释。 以下是使用SET语句进行设置的示例。
SET nls_date_format = 'YYYY/MM/DD HH24:MI:SS';
返回值的数据类型为TIMESTAMP。
注意
上述TO_DATE规范使用orafce来实现,其行为与LightDB的TO_DATE不同。 必须修改search_path参数,以使其按照orafce规范运行。
可以使用任何设置服务器参数的方法来设置nls_date_format设置。
如果设置了nls_date_format,则在执行SQL语句时可能会显示以下消息,但是参数设置已启用,因此可以忽略此消息。
WARNING: unrecognized configuration parameter "nls_date_format"
信息
LightDB中TO_DATE指定数据类型格式的通用规则如下:
返回值的数据类型是LightDB的DATE类型。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关LightDB中TO_DATE的信息,请参阅LightDB文档中的“The SQL Language” > “Functions and Operators” > “Data Type Formatting Functions”。
有关如何设置服务器参数的信息,请参阅LightDB文档中的“服务器管理” > “服务器配置” > “设置参数”。
有关现有日期/时间输入解释的信息,请参阅LightDB文档中的“日期/时间支持” > “日期/时间输入解释”。
示例
在以下示例中,将字符串“2016/12/31”转换为日期并返回。
SELECT TO_DATE('2016/12/31','YYYY/MM/DD') FROM DUAL; to_date --------------------- 2016-12-31 00:00:00 (1 row) SELECT to_date('2009-01-02'::oracle.date); to_date --------------------- 2009-01-02 00:00:00 (1 row)
描述
将单字节字符串转换为多字节字符串。
语法
TO_MULTI_BYTE(str TEXT) returns TEXT
通用规则
TO_MULTI_BYTE将字符串str中的半角字符转换为全角字符,并返回转换后的字符串。
指定一个表示日期/时间的字符串。
指定所需的日期/时间格式。如果省略,则使用nls_date_format变量中指定的格式。 如果未设置nls_date_format变量,则使用现有的日期/时间输入解释。 以下是使用SET语句进行设置的示例。
Only halfwidth alphanumeric characters, spaces and symbols can be converted.
返回值的数据类型是TEXT。
示例
在以下示例中,将“abc123”转换为全角字符并返回。
SELECT TO_MULTI_BYTE('abc123') FROM DUAL; to_multi_byte --------------- ****** (1 row)
“******”是多字节的“abc123”。
描述
根据指定的格式将值转换为数字。
语法
TO_NUMBER(str TEXT) returns NUMERIC TO_NUMBER(num NUMERIC) returns NUMERIC TO_NUMBER(num NUMERIC, fmt NUMERIC) returns NUMERIC
通用规则
TO_NUMBER将指定的值按照指定的格式fmt转换为数字值。
对于num,指定一个数字数据类型。
对于str,指定一个表示数字值的字符串。 数字值必须由可转换字符组成。
指定所需的数字数据格式。 指定的数字值将被处理为数据类型表达式。
返回值的数据类型是 NUMERIC。
详见
有关数字值格式的信息,请参阅LightDB文档中的"The SQL Language" > "Functions and Operators" > "Data Type Formatting Functions"。
示例
在以下示例中,将数字字面值“-130.5”转换为数字值并返回。
SELECT TO_NUMBER(-130.5) FROM DUAL; to_number ----------- -130.5 (1 row)
描述
将多字节字符串转换为单字节字符串。
语法
TO_SINGLE_BYTE(str TEXT) returns TEXT
通用规则
TO_SINGLE_BYTE将字符串str中的全角字符转换为半角字符,并返回转换后的字符串。
只有可以显示为半角的全角字母数字字符、空格和符号才能被转换。
返回值的数据类型为TEXT。
示例
在以下示例中,“******”被转换为半角字符并返回。 “******”是多字节字符串“xyz999”。
SELECT TO_SINGLE_BYTE('******') FROM DUAL; to_single_byte ---------------- xyz999 (1 row)
描述
ASCIISTR以一个字符串或解析为字符串的表达式作为其参数,并返回数据库字符集中字符串的ASCII版本。
语法
ASCIISTR(str TEXT) returns TEXT
通用规则
非ASCII字符被转换为形式\ xxxx,其中xxxx表示UTF-16代码单元。
返回值的数据类型为TEXT。
示例
在以下示例中,“Ä”被转换为“\00C4”。
SELECT ASCIISTR('ABÄCDE') FROM DUAL; asciistr ---------------- AB\00C4CDE (1 row)
描述
ASCII以一个字符串或解析为字符串的表达式作为其参数,并返回第一个字符的数据库字符集中的值。
语法
ASCIISTR(str TEXT) returns BIGINT
通用规则
如果您的数据库字符集是7位ASCII,则此函数返回ASCII值。如果您的数据库字符集是UTF-8 Code,则此函数返回UTF-8值。
返回值的数据类型为BIGINT。
示例
在以下示例中,“Ä”被转换为UTF-8中的“50052”。
SELECT ORACLE.ASCII('Ä') FROM DUAL; ascii ------- 50052 (1 row)
描述
将整数错误代码转换为长度为5的字符串错误代码。
语法
SQLCODE_TO_SQLSTATE(code INTEGER) returns TEXT
通用规则
只能转换0和715827882之间的整数错误代码。
返回值的数据类型为TEXT。
示例
在以下示例中,转换错误码2。
select SQLCODE_TO_SQLSTATE(2); sqlcode_to_sqlstate --------------------- 20000 (1 row)
描述
将字符字符串或数值转换为CLOB值。
语法
TO_CLOB(str TEXT) returns CLOB
通用规则
TO_CLOB 转换值为CLOB值.
示例
CREATE TABLE testorafce_to_clob ( col_char CHAR(10), col_varchar2 VARCHAR2(20), col_varchar VARCHAR(20), col_nchar NCHAR(10), col_nvarchar2 NVARCHAR2(20), col_smallint smallint, col_integer integer, col_bigint bigint, col_decimal decimal, col_numeric numeric, col_real real, col_double double precision, col_clob CLOB, col_raw raw(10) ); INSERT INTO testorafce_to_clob (col_char, col_varchar2, col_varchar, col_nchar, col_nvarchar2, col_smallint, col_integer, col_bigint, col_decimal, col_numeric, col_real, col_double, col_clob, col_raw) VALUES ('ABC1', 'Hello', 'world', 'hello', 'world', 1, 2, 3, 4, 5, 6, 7, 'This is a CLOB', 'AB'); INSERT INTO testorafce_to_clob (col_char, col_varchar2, col_varchar, col_nchar, col_nvarchar2, col_smallint, col_integer, col_bigint, col_decimal, col_numeric, col_real, col_double, col_clob, col_raw) VALUES ('ABC2', 'Hello', 'world', 'hello', 'world', 1, 2, 3, 4, 5, 6, 7, 'This is a CLOB', '1'); INSERT INTO testorafce_to_clob (col_char, col_varchar2, col_varchar, col_nchar, col_nvarchar2, col_smallint, col_integer, col_bigint, col_decimal, col_numeric, col_real, col_double, col_clob, col_raw) VALUES ('ABC3', 'Hello', 'world', 'hello', 'world', 1, 2, 3, 4, 5, 6, 7, to_clob('This is a CLOB'), '1AB456789'); SELECT to_clob(col_char) AS clob_char, to_clob(col_varchar2) AS clob_varchar2, to_clob(col_varchar) AS col_varchar, to_clob(col_nchar) AS clob_nchar, to_clob(col_nvarchar2) AS clob_nvarchar2, to_clob(col_clob) AS clob_clob, to_clob(col_smallint) AS col_smallint, to_clob(col_integer) AS col_integer, to_clob(col_bigint) AS col_bigint, to_clob(col_decimal) AS col_decimal, to_clob(col_numeric) AS col_numeric, to_clob(col_real) AS col_real, to_clob(col_double) AS col_double, to_clob(col_raw) AS clob_nclob FROM testorafce_to_clob order by col_char asc; clob_char | clob_varchar2 | col_varchar | clob_nchar | clob_nvarchar2 | clob_clob | col_smallint | col_integer | col_bigint | col_decimal | col_numeric | col_real | col_double | clob_nclob ------------+---------------+-------------+------------+----------------+----------------+--------------+-------------+------------+-------------+-------------+----------+------------+------------ ABC1 | Hello | world | hello | world | This is a CLOB | 1 | 2 | 3 | 4 | 5 | 6 | 7 | AB ABC2 | Hello | world | hello | world | This is a CLOB | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 01 ABC3 | Hello | world | hello | world | This is a CLOB | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 01AB456789 (3 rows)
描述
RAWTOHEX将传入值转换为包含其十六进制表示形式的字符值。
语法
RAWTOHEX(test_raw RAW) returns TEXT RAWTOHEX(test_text TEXT) returns TEXT RAWTOHEX(test_uuid UUID) returns VARCHAR2
通用规则
此函数返回一个值,该值具有构成传入值的字节的十六进制表示形式。每个字节由两个十六进制数字表示。
示例
select rawtohex(sys_guid()); rawtohex ---------------------------------- 6466c654a5dc4755902b70d0e6ea6eb6 (1 row)
描述
ROWIDTOCHAR将传入值ORACLE的tid类型的ROWID转换为varchar2形式的字符值。
语法
ROWIDTOCHAR(test_rowid TID) returns VARCHAR2
通用规则
此函数返回一个值,该值具有构成传入值的字节转化为的varchar2的表示形式。最大长度为18位。
示例
drop TABLE if EXISTS rowidtochar_t1; create table rowidtochar_t1 ( id int not null ); insert into rowidtochar_t1 values(1); select rowidtochar(rowid) from rowidtochar_t1; rowidtochar ------------- (0,1) (1 row)
支持以下用于比较的函数:
DECODE
LNNVL
NANVL
NVL
NVL2
描述
比较值,如果它们匹配,则返回相应的值。
语法
DECODE(expr, srch, result) DECODE(expr, srch, result, default) DECODE(expr, srch1, result1, srch2, result2) DECODE(expr, srch1, result1, srch2, result2, default) DECODE(expr, srch1, result1, srch2, result2, srch3, result3) DECODE(expr, srch1, result1, srch2, result2, srch3, result3, default)
通用规则
DECODE按顺序逐个比较要转换的值表达式和搜索值。 如果值匹配,则返回相应的结果值。 如果没有匹配的值,则返回指定的默认值。 如果没有指定默认值,则返回NULL值。
如果指定了相同的搜索值超过一次,则返回的结果值是列出的第一个搜索值的结果值。
结果值和默认值中可以使用以下数据类型:
CHAR
VARCHAR
VARCHAR2
NCHAR
NCHAR VARYING
NVARCHAR2
TEXT
INTEGER
BIGINT
NUMERIC
DATE
TIME WITHOUT TIME ZONE
TIMESTAMP WITHOUT TIME ZONE
TIMESTAMP WITH TIME ZONE
要转换的值和搜索值必须指定相同的数据类型。 但是,请注意,如果在搜索值中指定了文字,可以指定不同的数据类型,且要转换的值表达式包含可以转换的数据类型。
如果结果值和默认值都是文字,则这些值的数据类型如下所示:
如果所有值都是字符串文字,则所有值都将成为字符类型。
如果有一个或多个数字文字,则所有值都将变为数值类型。
如果有一个或多个文字转换为日期时间/时间类型,则所有值都将变为日期时间/时间类型。
如果结果值和默认值包含文字和非文字的混合,则文字将转换为非文字的数据类型。
所有结果值和默认值都必须指定相同的数据类型。 但是,如果可以转换结果值或默认值的任何数据类型,则可以指定不同的数据类型-这些数据类型如下所示:
Table K.101. DECODE可以转换的数据类型组合(摘要)
其他结果值或默认值 | ||||
---|---|---|---|---|
数值类型 | 字符类型 | 日期/时间类型 | ||
结果值(任何) | 数值类型 | Y | N | N |
字符类型 | N | Y | N | |
日期/时间类型 | N | N | S(*1) |
Y:可以转换
S:可转换一些数据类型
N:无法转换
*1:可转换日期/时间类型的数据类型如下所示:
Table K.102. DECODE可转换的结果值和默认值日期/时间数据类型
其他结果值或默认值 | |||||
---|---|---|---|---|---|
DATE | TIME WITHOUT TIME ZONE | TIMESTAMP WITHOUT TIME ZONE | TIMESTAMP WITH TIME ZONE | ||
结果值(任何) | DATE | Y | N | Y | Y |
TIME WITHOUT TIME ZONE | N | Y | N | N | |
TIMESTAMP WITHOUT TIME ZONE | Y | N | Y | Y | |
TIMESTAMP WITH TIME ZONE | Y | N | Y | Y |
Y:可以转换
N:无法转换
返回值的数据类型将是结果值或默认值中最长且精度最高的数据类型。
示例
在下面的示例中,将比较并转换表t1中col3的值为不同的值。 如果col3值匹配搜索值1,则返回的结果值是“one”。 如果col3值不与搜索值1、2或3中的任何一个匹配,则返回默认值“other number”。
SELECT col1, DECODE(col3, 1, 'one', 2, 'two', 3, 'three', 'other number') "num-word" FROM t1; col1 | num-word ------+---------- 1001 | one 1002 | two 1003 | three (3 rows)
描述
确定指定条件的值是TRUE还是FALSE。
语法
LNNVL(cond BOOLEAN) returns BOOLEAN
通用规则
LNNVL确定指定条件的值是TRUE还是FALSE。 如果条件的结果是FALSE或NULL,则返回TRUE。 如果条件的结果是TRUE,则返回FALSE。
在条件中指定了返回TRUE或FALSE的表达式。
返回值的数据类型是BOOLEAN。
示例
在以下示例中,当col3的值为2000或更低或为空时,返回表t1的col1和col3。
SELECT col1,col3 FROM t1 WHERE LNNVL( col3 > 2000 ); col1 | col3 ------+------ 1001 | 1000 1002 | 2000 2002 | (3 row)
描述
当值不是数字(NaN)时返回替代值。
语法
NANVL(expr FLOAT4, substitute FLOAT4) returns FLOAT4 NANVL(expr FLOAT8, substitute FLOAT8) returns FLOAT8 NANVL(expr NUMERIC, substitute NUMERIC) returns NUMERIC NANVL(expr FLOAT4, substitute VARCHAR) returns FLOAT4 NANVL(expr FLOAT8, substitute VARCHAR) returns FLOAT8 NANVL(expr NUMERIC, substitute VARCHAR) returns NUMERIC
通用规则
NANVL函数在指定的值不是数字(NaN)时返回替代值。 替代值可以是数字或可转换为数字的字符串。
对于expr和substitute,请指定数字数据类型。 如果expr和substitute具有不同的数据类型, 它们将转换为具有更大长度或精度的数据类型,并返回该数据类型。
对于substitute,您还可以指定表示数字值的字符串。
如果为替代值指定了字符串,则返回值使用的数据类型与expr的数据类型相同。
示例
在以下示例中,如果表t1中的col1的值是NaN值,则返回“0”。
SELECT col1, NANVL(col3,0) FROM t1; col1 | nanvl ------+------- 2001 | 0 (1 row)
描述
当值为NULL时返回替代值。
语法
NVL(expr1 anyelement, expr2 anyelement) return anyelement
通用规则
NVL函数在指定的值为NULL时返回替代值。 当expr1为NULL时,返回expr2。 当expr1不为NULL时返回expr1。
请为expr1和expr2指定相同的数据类型。 然而,如果在expr2中指定了常量,并且数据类型也可以由expr1转换, 则可以指定不同的数据类型。 在这种情况下,expr2的转换将根据expr1的数据类型进行调整, 因此expr1为NULL值时返回的expr2的值将以expr1的 数据类型转换。 对于类型(numeric、int)和(bigint、int)来说,这是不必要的。
示例
在以下示例中,如果表t1中的col1的值是NULL值,则返回“IS NULL”。
SELECT col2, NVL(col1,'IS NULL') "nvl" FROM t1; col2 | nvl ------+--------- aaa | IS NULL (1 row)
描述
根据值是否为NULL或非NULL返回替代值。
语法
NVL2(expr anyelement, substitute1 anyelement, substitute2 anyelement) return anyelement
通用规则
NVL2函数根据指定的值是否为NULL返回替代值。 当expr为NULL时,返回substitute2。 当它不为NULL时,返回substitute1。
请为expr、substitute1和substitute2指定相同的数据类型。 然而,如果在substitute1或substitute2中指定了文字,而且数据类型也可以由 expr转换,则可以指定不同的数据类型。在这种情况下,substitute1或 substitute2将根据expr的数据类型进行调整,因此当expr 为NULL值时返回的substitute2的值将以expr的数据类型转换。
示例
在以下示例中,如果表t1中列col1中的值为NULL,则返回“IS NULL”,如果不为NULL,则返回“IS NOT NULL”。
SELECT col2, NVL2(col1,'IS NOT NULL','IS NULL') FROM t1; col2 | nvl2 ------+--------- aaa | IS NULL bbb | IS NOT NULL (2 row)
支持以下聚合函数:
ANY_VALUE
BIT_AND_AGG
BIT_OR_AGG
BIT_XOR_AGG
KURTOSIS_POP
KURTOSIS_SAMP
LISTAGG
MEDIAN
SKEWNESS_POP
SKEWNESS_SAMP
WY_CONCAT
描述
ANY_VALUE函数返回表达式(expr)的一个非确定性值。
语法
ANY_VALUE(expr anyelement) returns anyelement
通用规则
使用ANY_VALUE来优化包含GROUP BY子句的查询。ANY_VALUE返回一组中一个表达式的值。它被优化以返回第一个值。
它确保不会为任何传入的行进行比较,并消除了将每个列指定为GROUP BY子句的一部分的必要性。
由于它不比较值,在GROUP BY查询中,ANY_VALUE比MIN或MAX更快地返回一个值。
根据GROUP BY规范,返回每个组中的任何值。如果组中所有行的表达式值都为NULL,则返回NULL。
ANY_VALUE的结果是非确定性的。
注意
如果使用ANY_VALUE,则需要事先指定search_path为"oracle"。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关如何设置服务器参数的信息,请参阅LightDB文档中的“服务器管理” > “服务器配置” > “设置参数”。
示例
create table test_any_value(key1 int, key2 int); insert into test_any_value values(1, 1); select any_value(key2) from test_any_value group by key1; any_value ----------- 1 (1 row)
描述
BIT_AND_AGG是一个位运算聚合函数,返回位与运算的结果。
语法
BIT_AND_AGG(numeric) returns int
通用规则
您可以将BIT_AND_AGG作为GROUP BY查询、窗口函数或分析函数的一部分使用。
对于一组给定的值,位运算聚合的结果总是确定性的,与排序无关。
返回值的数据类型是int。
注意
如果使用BIT_AND_AGG,则需要事先指定search_path为"oracle"。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关如何设置服务器参数的信息,请参阅LightDB文档中的“服务器管理” > “服务器配置” > “设置参数”。
示例
select bit_and_agg(column1) from (values (1),(2),(4),(8)) x; bit_and_agg ------------- 0 (1 row)
描述
BIT_OR_AGG是一个位运算聚合函数,返回位或运算的结果。
语法
BIT_OR_AGG(numeric) returns int
通用规则
您可以将BIT_OR_AGG作为GROUP BY查询、窗口函数或分析函数的一部分使用。
对于一组给定的值,位运算聚合的结果总是确定性的,与排序无关。
返回值的数据类型是int。
注意
如果使用BIT_OR_AGG,则需要事先指定search_path为"oracle"。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关如何设置服务器参数的信息,请参考LightDB文档中的"服务器管理" > "服务器配置" > "设置参数"一节。
示例
select bit_or_agg(column1) from (values (1),(2),(4),(8)) x; bit_or_agg ------------ 15 (1 row)
描述
BIT_XOR_AGG是一个位运算聚合函数,返回位异或操作的结果。
语法
BIT_XOR_AGG(numeric) returns int
通用规则
您可以将BIT_XOR_AGG作为GROUP BY查询、窗口函数或分析函数的一部分使用。
对于给定的一组值,位聚合的结果始终是确定性的,并且与排序无关。
返回值的数据类型是int。
注意
如果使用BIT_XOR_AGG函数,需要提前在search_path中指定"oracle"。
参见
有关如何编辑search_path的信息,请参考"使用orafce的注意事项"。
有关如何设置服务器参数的信息,请参考LightDB文档中的"服务器管理" > "服务器配置" > "设置参数"一节。
示例
select bit_xor_agg(column1) from (values (1),(3),(4),(8)) x; bit_xor_agg ------------- 14 (1 row)
描述
总体峰度函数KURTOSIS_POP主要用于确定给定分布中的异常值特征。
语法
KURTOSIS_POP(numeric) returns numeric
通用规则
expr中的NULL值将被忽略。
如果组中所有行的expr值都为NULL,则返回NULL。
如果expr中只有一个或两个行,则返回0。
对于给定的一组值,总体峰度(KURTOSIS_POP)和样本峰度(KURTOSIS_SAMP)的结果始终是确定性的。但是,KURTOSIS_POP和KURTOSIS_SAMP的值是不同的。随着数据集中值的数量增加,计算出的KURTOSIS_SAMP和KURTOSIS_POP值之间的差异会减小。
注意
如果使用KURTOSIS_POP函数,需要提前在search_path中指定"oracle"。
参见
有关如何编辑search_path的信息,请参考"使用orafce的注意事项"。
有关如何设置服务器参数的信息,请参考LightDB文档中的"服务器管理" > "服务器配置" > "设置参数"一节。
示例
select kurtosis_pop(column1) from (values (1),(2),(4),(8)) x; kurtosis_pop ------------------------- -1.09897920604914942667 (1 row)
描述
样本峰度(KURTOSIS_SAMP)函数主要用于确定给定分布中的异常值特征。
语法
KURTOSIS_SAMP(numeric) returns numeric
总则
expr中的NULL值将被忽略。
如果组中的所有行都具有NULL表达式值,则返回NULL。
如果expr中只有一行或两行,则返回0。
对于一组给定的值,样本峰度(KURTOSIS_SAMP)和总体峰度(KURTOSIS_POP)的结果始终是确定性的。 然而,KURTOSIS_SAMP和KURTOSIS_POP的值是不同的。随着数据集中值的数量增加,计算出的KURTOSIS_SAMP和KURTOSIS_POP的差异减小。
注意
如果使用KURTOSIS_SAMP函数,则需要提前指定“oracle”作为search_path。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关如何设置服务器参数的信息,请参阅LightDB文档中的“服务器管理”>“服务器配置”>“设置参数”。
示例
select kurtosis_samp(column1) from (values (1),(2),(4),(8)) x; kurtosis_samp -------------------- 0.7576559546313793 (1 row)
描述
返回一个由字符串值组成的连接的、带分隔符的列表。
语法
LISTAGG(strExpr TEXT) returns TEXT LISTAGG(strExpr TEXT, delimiter TEXT) []returns TEXT LISTAGG(strExpr TEXT, delimiter TEXT ON OVERFLOW TRUNCATE) []returns TEXT LISTAGG(strExpr TEXT, delimiter TEXT ON OVERFLOW ERROR) []returns TEXT
总则
LISTAGG连接和分隔一组字符串值,并返回结果。
对于delimiter,请指定一个字符串。 如果省略了分隔符,则返回一个没有分隔符的字符串列表。
在LightDB中,LISTAGG支持在函数中使用distinct和within group子句。 例如:LISTAGG(distinct c1) within group(order by c1)
在LightDB中,LISTAGG支持在函数中使用on overflow truncate。 例如:LISTAGG(c1, ':' on overflow truncate)
在LightDB中,LISTAGG支持在函数中使用on overflow error。 例如:LISTAGG(c1, ':' on overflow error)
在LightDB中,LISTAGG支持在over子句中使用within group子句。 在这种情况下,我们还不能在函数中使用distinct。 例如:LISTAGG(c1) within group(order by c1) over(partition by c2)
返回值的数据类型为TEXT。
示例
在下面的示例中,返回由表t1中列col2的值组成的、以“:”为分隔符的结果。
SELECT LISTAGG(col2,':') FROM t1; listagg ------------------- AAAAA:BBBBB:CCCCC (1 row)
在下面的示例中,使用over中的within group。
CREATE TABLE EMP ( EMPNO NUMBER(4, 0), ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4, 0), HIREDATE DATE, SAL NUMBER(7, 2), COMM NUMBER(7, 2), DEPTNO NUMBER(2, 0), DNAME VARCHAR2(100), CONSTRAINT PK_EMP PRIMARY KEY (EMPNO) ); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7369, 'SMITH', 'CLERK', 7902, to_date('1980-12-17','yyyy-mm-dd'), 800.00, null, 20, null); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7499, 'ALLEN', 'SALESMAN', 7698, to_date('1981-02-20','yyyy-mm-dd'), 1600.00, 300.00, 30, null); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7521, 'WARD', 'SALESMAN', 7698, to_date('1981-02-22','yyyy-mm-dd'), 1250.00, 500.00, 30, null); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7566, 'JONES', 'MANAGER', 7839, to_date('1981-04-02','yyyy-mm-dd'), 2975.00, null, 20, null); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7654, 'MARTIN', 'SALESMAN', 7698, to_date('1981-09-28','yyyy-mm-dd'), 1250.00, 1400.00, 30, null); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7698, 'BLAKE', 'MANAGER', 7839, to_date('1981-05-01','yyyy-mm-dd'), 2850.00, null, 30, null); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7782, 'CLARK', 'MANAGER', 7839, to_date('1981-06-09','yyyy-mm-dd'), 2450.00, null, 10, null); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7788, 'SCOTT', 'ANALYST', 7566, to_date('1987-04-19','yyyy-mm-dd'), 3000.00, null, 20, null); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7839, 'KING', 'PRESIDENT',null, to_date('1981-11-17','yyyy-mm-dd'), 5000.00, null, 10, null); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7844, 'TURNER', 'SALESMAN', 7698, to_date('1981-09-08','yyyy-mm-dd'), 1500.00, 0.00, 30, null); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7876, 'ADAMS', 'CLERK', 7788, to_date('1987-05-23','yyyy-mm-dd'), 1100.00, null, 20, null); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7900, 'JAMES', 'CLERK', 7698, to_date('1981-12-03','yyyy-mm-dd'), 950.00, null, 30, null); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7902, 'FORD', 'ANALYST', 7566, to_date('1981-12-03','yyyy-mm-dd'), 3000.00, null, 20, null); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME) values (7934, 'MILLER', 'CLERK', 7782, to_date('1982-01-23','yyyy-mm-dd'), 1300.00, null, 10, null); select listagg(ename, ',') within group(order by ename) over(partition by deptno) as enames, deptno, ename from EMP; enames | deptno | ename --------------------------------------+--------+-------- CLARK,KING,MILLER | 10 | CLARK CLARK,KING,MILLER | 10 | KING CLARK,KING,MILLER | 10 | MILLER ADAMS,FORD,JONES,SCOTT,SMITH | 20 | ADAMS ADAMS,FORD,JONES,SCOTT,SMITH | 20 | FORD ADAMS,FORD,JONES,SCOTT,SMITH | 20 | JONES ADAMS,FORD,JONES,SCOTT,SMITH | 20 | SCOTT ADAMS,FORD,JONES,SCOTT,SMITH | 20 | SMITH ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD | 30 | ALLEN ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD | 30 | BLAKE ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD | 30 | JAMES ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD | 30 | MARTIN ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD | 30 | TURNER ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD | 30 | WARD (14 rows)
描述
计算一组数字的中位数。
语法
MEDIAN(numExpr REAL) returns REAL MEDIAN(numExpr DOUBLE PRECISION) returns DOUBLE PRECISION
通用规则
MEDIAN返回一组数字的中位数。
数字必须是数值数据类型。
如果数字是REAL类型,则返回值的数据类型为REAL;如果指定了其他类型,则为DOUBLE PRECISION。
示例
在下面的示例中,返回表t1中列col3的中位数。
SELECT MEDIAN(col3) FROM t1; median -------- 2000 (1 row)
描述
SKEWNESS_POP是一个聚合函数,主要用于确定给定分布中的对称性。
语法
SKEWNESS_POP(numeric) returns numeric
通用规则
忽略expr中的NULL值。
如果组中所有行的expr值都为NULL,则返回NULL。
如果expr中有一行或两行,则返回0。
对于给定的值集,总体偏度(SKEWNESS_POP)和样本偏度(SKEWNESS_SAMP)的结果始终是确定性的。但是,SKEWNESS_POP和SKEWNESS_SAMP的值是不同的。随着数据集中值的数量增加,SKEWNESS_SAMP和SKEWNESS_POP的计算值之间的差异会减小。
注意
如果使用SKEWNESS_POP函数,则需要事先指定search_path为“oracle”。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关如何设置服务器参数的信息,请参阅LightDB文档中的“服务器管理”>“服务器配置”>“设置参数”。
示例
SELECT SKEWNESS_POP(column1) from (values (1),(2),(4),(8)) x; skewness_pop ------------------------ 0.65680773449969915746 (1 row)
描述
SKEWNESS_SAMP是一个聚合函数,主要用于确定给定分布中的对称性。
语法
SKEWNESS_SAMP(numeric) returns numeric
通用规则
忽略expr中的NULL值。
如果组中所有行的expr值都为NULL,则返回NULL。
如果expr中有一行或两行,则返回0。
对于给定的值集,总体偏度(SKEWNESS_POP)和样本偏度(SKEWNESS_SAMP)的结果始终是确定性的。但是,SKEWNESS_POP和SKEWNESS_SAMP的值是不同的。随着数据集中值的数量增加,SKEWNESS_SAMP和SKEWNESS_POP的计算值之间的差异会减小。
注意
如果使用SKEWNESS_SAMP函数,则需要事先指定search_path为“oracle”。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关如何设置服务器参数的信息,请参阅LightDB文档中的“服务器管理”>“服务器配置”>“设置参数”。
示例
SELECT SKEWNESS_SAMP(column1) from (values (1),(2),(4),(8)) x; skewness_samp ------------------------ 1.13762436695768880892 (1 row)
描述
返回一个由字符串值组成的连接的、带逗号分隔符的列表。
语法
WY_CONCAT(strExpr TEXT) returns CLOB
总则
WY_CONCAT连接和分隔一组字符串值,并返回结果。
返回值的数据类型为CLOB。
示例
在下面的示例中,返回由表t1中列col2的值组成的、以“,”为分隔符的结果。
SELECT WY_CONCAT(col2) FROM t1; wy_concat ------------------- AAAAA,BBBBB,CCCCC (1 row)
支持以下返回内部信息的函数:
DUMP
NLS_CHARSET_ID
NLS_CHARSET_NAME
SYS_CONTEXT
USERENV
描述
返回一个值的内部信息。
语法
DUMP(expr TEXT) returns VARCHAR DUMP(expr TEXT, fmt INTEGER) returns VARCHAR
通用规则
DUMP命令以符合输出格式的显示格式返回指定表达式的内部信息。
数据类型的内部代码(Typ)、数据长度(Len)和数据的内部表达式将作为内部信息输出。
可以为表达式指定任何数据类型。
数据的内部表达式的显示格式(基数n)由输出格式指定。可以指定的基数为8、10和16。如果省略,则默认使用10。
返回值的数据类型为VARCHAR。
注意
DUMP命令输出的信息将是完整的内部信息。因此,由于产品更新等原因,这些值可能会发生变化。
示例
在下面的示例中,将返回表t1中列col1的内部信息。
SELECT col1, DUMP(col1) FROM t1; col1 | dump ------+------------------------------------ 1001 | Typ=25 Len=8: 32,0,0,0,49,48,48,49 1002 | Typ=25 Len=8: 32,0,0,0,49,48,48,50 1003 | Typ=25 Len=8: 32,0,0,0,49,48,48,51 (3 row)
描述
NLS_CHARSET_ID返回与字符集名称字符串对应的字符集ID编号。
语法
NLS_CHARSET_ID(str text) returns integer
通用规则
无效的字符集名称返回null。
注意
字符集名称来自于Oracle,请仅使用此函数进行兼容性。
如果使用NLS_CHARSET_ID函数,则需要提前指定search_path为"oracle"。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关如何设置服务器参数的信息,请参阅LightDB文档中的“服务器管理”>“服务器配置”>“设置参数”。
示例
下面的示例返回字符集的字符集ID:
SELECT NLS_CHARSET_ID('AL32UTF8') FROM DUAL; nls_charset_id ---------------- 873 (1 row)
描述
NLS_CHARSET_NAME返回与ID编号对应的字符集名称。
语法
NLS_CHARSET_NAME(str text) returns integer
通用规则
如果number不能被识别为有效的字符集ID,则此函数将返回null。
注意
字符集名称来自于Oracle,请仅使用此函数进行兼容性。
如果使用NLS_CHARSET_NAME函数,则需要提前指定search_path为"oracle"。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关如何设置服务器参数的信息,请参阅LightDB文档中的“服务器管理”>“服务器配置”>“设置参数”。
示例
下面的示例返回与字符集ID编号873对应的字符集:
SELECT NLS_CHARSET_NAME(873) FROM DUAL; nls_charset_name ------------------ AL32UTF8 (1 row)
描述
返回与上下文命名空间相关联的参数在当前时刻的值。
语法
SYS_CONTEXT(namespace text, parameter text, length int4 default 256) returns text
通用规则
对于命名空间和参数,可以指定字符串或解析为指定命名空间或属性的字符串的表达式。
上下文命名空间必须已经创建,相关联的参数及其值也必须已设置。
命名空间必须是有效的标识符。参数名称可以是任何字符串。 它不区分大小写,但长度不能超过4000字节。
注意
LightDB提供以下内置命名空间:
USERENV - 描述当前会话。 命名空间USERENV的预定义参数列在表Table K.103中。
SYS_SESSION_ROLES - 指示指定的角色当前是否为会话启用。
Table K.103. 命名空间USERENV的预定义参数
参数 |
概述 |
---|---|
CLIENT_IDENTIFIER |
数据库会话所使用的程序的名称 |
CLIENT_INFO |
数据库会话所使用的程序的名称 |
CLIENT_PROGRAM_NAME |
数据库会话所使用的程序的名称 |
CDB_NAME |
当前数据库 |
CON_ID |
始终为1 |
CON_NAME |
当前数据库 |
CURRENT_SCHEMA |
当前模式 |
CURRENT_SCHEMAID |
当前模式ID |
CURRENT_USER |
当前用户 |
CURRENT_USERID |
当前用户ID |
DATABASE_ROLE |
角色是以下之一:PRIMARY,PHYSICAL STANDBY |
DB_NAME |
当前数据库 |
DB_UNIQUE_NAME |
当前数据库 |
HOST |
连接客户端的主机名称 |
INSTANCE |
始终为1 |
INSTANCE_NAME |
始终为 'LightDB' |
IP_ADDRESS |
连接客户端的机器的IP地址 |
ISDBA |
如果用户已被认证为具有DBA特权,则返回TRUE |
LANG |
语言的缩写名称,比现有的 'LANGUAGE' 参数更简短 |
LANGUAGE |
您的会话当前使用的语言和区域设置,以及数据库字符集 |
MODULE |
数据库会话所使用的程序的名称 |
NETWORK_PROTOCOL |
用于通信的网络协议 |
NLS_DATE_FORMAT |
会话的日期格式 |
ORACLE_HOME |
数据主目录的完整路径名 |
PID |
当前进程ID |
SERVER_HOST |
listen_addresses |
SERVICE_NAME |
当前数据库 |
SESSION_USER |
当前用户 |
SESSION_USERID |
当前用户ID |
SESSIONID |
当前会话进程ID |
SID |
当前会话进程ID |
注意
如果使用 SYS_CONTEXT,则需要提前指定 search_path 为 "oracle"。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关如何设置服务器参数的信息,请参阅LightDB文档中的“服务器管理”>“服务器配置”>“设置参数”。
示例
下面的语句返回登录到数据库的用户的名称:
SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER') FROM DUAL; sys_context ------------- lightdb (1 row)
描述
返回有关当前会话的信息
语法
USERENV(parameter text) returns text
通用规则
这些信息对于编写特定于应用程序的审计跟踪表或确定当前会话使用的特定于语言的字符可能很有用。
表Table K.103描述了参数参数的值。
注意
如果使用USERENV,则需要事先指定“oracle”作为search_path。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关如何设置服务器参数的信息,请参阅LightDB文档中的“服务器管理”>“服务器配置”>“设置参数”。
示例
下面的示例返回当前会话的LANGUAGE参数:
SELECT USERENV('LANGUAGE') "Language" FROM DUAL; Language ------------- en_US.UTF-8 (1 row)
orafce支持以下日期类型的日期时间操作符。
Table K.104. 日期时间操作符
操作 | 示例 | 结果 |
---|---|---|
+ | DATE'2016/01/01' + 10 | 2016-01-11 00:00:00 |
- | DATE'2016/03/20' - 35 | 2016-02-14 00:00:00 |
- | DATE'2016/09/01' - DATE'2015/12/31' | 245 |
Note
如果使用orafce的DATE类型的日期时间操作符,则需要事先指定“oracle”作为search_path。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
以下函数用于其他目的:
EMPTY_CLOB
EMPTY_BLOB
ORA_HASH
VSIZE
DEPS_SAVE_AND_DROP_DEPENDENCIES/DEPS_RESTORE_DEPENDENCIES
PLVSTR.IS_PREFIX
PLVDATE.ISLEAPYEAR
TIMESTAMP_TO_SCN
描述
返回一个空的CLOB
语法
EMPTY_CLOB() RETURNS clob
通用规则
可以用来初始化一个 CLOB 变量,或者在 INSERT 或 UPDATE 语句中初始化 CLOB 列为 EMPTY. EMPTY 意味着该 CLOB 已被初始化但没有被赋值。
长度为 0 但不为 NULL.
注意
如果使用EMPTY_CLOB函数,则需要事先指定“oracle”作为search_path。
参见
有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。
有关如何设置服务器参数的信息,请参阅LightDB文档中的“服务器管理”>“服务器配置”>“设置参数”。
示例
select length(empty_clob()) FROM DUAL; length -------- 0 (1 row)
select count(*) from dual where empty_clob() is null; count ------- 0 (1 row)
create table foo (a int, b clob default empty_clob()); insert into foo(a) values(1); insert into foo values (2, 'hello'); select count(*) from foo where b is not null; count ------- 2 (1 row) select count(*) from foo where length(b) > 0; count ------- 1 (1 row)
描述
返回一个空的 BLOB
语法
EMPTY_BLOB() RETURNS blob
通用规则
可以用来初始化一个 BLOB 变量,或者在 INSERT 或 UPDATE 语句中初始化 BLOB 列为 EMPTY. EMPTY 意味着该 BLOB 已被初始化但没有被赋值。
长度为 0 但不为 NULL
样例
select length(empty_blob()) FROM DUAL; length -------- 0 (1 row)
select count(*) from dual where empty_blob() is null; count ------- 0 (1 row)
create table foo (a int, b blob default empty_blob()); insert into foo(a) values(1); insert into foo values (2, to_blob('616263')); select count(*) from foo where b is not null; count ------- 2 (1 row) select count(*) from foo where length(b) > 0; count ------- 1 (1 row)
描述
ORA_HASH是一个计算给定表达式哈希值的函数。此函数可用于操作,例如分析数据子集和生成随机样本。
语法
ORA_HASH(p_data anyelement,p_buckets int4, p_seed int4) RETURNS int
通用规则
参数p_data确定要计算哈希值的数据。 参数expr通常表示列名,对于其长度没有限制。
可选参数p_buckets确定哈希函数返回的最大桶值。 您可以指定0到2147483647之间的任何值。默认值为0。
可选参数p_seed使LightDB能够为相同的数据集生成许多不同的结果。LightDB将哈希函数应用于expr和p_seed的组合。 您可以指定0到2147483647之间的任何值。默认值为0。
返回值的数据类型为int。
注意
如果使用ORA_HASH,则需要事先指定“oracle”作为search_path。
参见
请参考“使用orafce的注意事项”以获取如何编辑search_path的信息。
请参考LightDB文档中的“服务器管理” > “服务器配置” > “设置参数”章节,以获取如何设置服务器参数的信息。
示例
select ora_hash('abcdAbcdasd'::text) FROM DUAL; ora_hash ----------- 303228277 (1 row)
描述
VSIZE函数返回expr内部表示的字节数。如果expr为null,则该函数返回null。
语法
VSIZE(anyelement) RETURNS integer
通用规则
pg_column_size函数与之相同。
注意
如果使用VSIZE函数,则需提前将search_path指定为“oracle”。
参见
请参考“使用orafce的注意事项”以获取如何编辑search_path的信息。
请参考LightDB文档中的“服务器管理” > “服务器配置” > “设置参数”章节,以获取如何设置服务器参数的信息。
示例
select vsize(123456789) FROM DUAL; vsize ------- 4 (1 row)
描述
这些函数用于修改具有视图依赖关系的表。 递归备份所有依赖视图,然后修改基表,最后重新创建所有备份视图。
DEPS_SAVE_AND_DROP_DEPENDENCIES函数用于保存和删除表的依赖关系。
DEPS_RESTORE_DEPENDENCIES函数用于恢复表的依赖关系。
语法
DEPS_SAVE_AND_DROP_DEPENDENCIES(name, name default current_schema()::name, jsonb default '{}'::jsonb) RETURNS void DEPS_RESTORE_DEPENDENCIES(name, name default current_schema()::name, jsonb default '{}'::jsonb)
通用规则
在lt_catalog下创建。
依赖关系保存在lt_catalog.deps_saved_ddl表中。
dry_run参数用于不实际删除依赖关系运行函数,默认值为false。
verbose参数用于显示调试日志,默认值为false。
populate_materialized_view参数用于启用或禁用使用WITH [NO] DATA标志刷新创建的物化视图,默认值为false。
注意
如果使用DEPS_SAVE_AND_DROP_DEPENDENCIES/DEPS_RESTORE_DEPENDENCIES函数,则无需提前将search_path指定为“oracle”。
示例
create table test_t(key1 int); create view test_t_v as select * from test_t; begin; select deps_save_and_drop_dependencies('test_t'); alter table test_t modify key1 number; select * from deps_restore_dependencies('test_t'); commit;
描述
PLVSTR.IS_PREFIX会在一个字符串或数字是另一个字符串或数字的前缀时返回true。
语法
PLVSTR.IS_PREFIX(p bigint, prefix bigint) RETURNS boolean PLVSTR.IS_PREFIX(p integer, prefix integer) RETURNS boolean PLVSTR.IS_PREFIX(p text, prefix text) RETURNS boolean
通用规则
这个功能在测试字符串或数字是否以某些内容开头时非常有用。
例子
select plvstr.is_prefix(111, 11) FROM DUAL; is_prefix ----------- t (1 row) select plvstr.is_prefix('abc', 'AB') from dual; is_prefix ----------- f (1 row)
描述
判断某个年份是否是闰年
语法
PLVDATE.ISLEAPYEAR(date) RETURNS boolean
示例
select plvdate.isleapyear(date '2023-01-01') FROM DUAL; isleapyear ----------- f select plvdate.isleapyear(date '2020-01-01') from dual; isleapyear ----------- t
描述
timestamp_to_scn
函数返回一个事务 ID, 该 ID 对应的事务提交时间戳小于或等于给定的时间戳。
语法
TIMESTAMP_TO_SCN(timestamptz) RETURNS bigint
样例
set orafce.timezone = 'Asia/Shanghai'; select timestamp_to_scn(sysdate) FROM DUAL; timestamp_to_scn ----------- 12345
“包”是由模式组合在一起的一组功能,具有单一的功能,并通过从PL/pgSQL调用来使用。
支持以下包:
DBMS_ALERT
DBMS_ASSERT
DBMS_DATAPUMP
DBMS_LOB
DBMS_OUTPUT
DBMS_PIPE
DBMS_RANDOM
DBMS_UTILITY
DBMS_JOB
DBMS_LOCK
DBMS_METADATA
DBMS_OBFUSCATION_TOOLKIT
DBMS_SNAPSHOT
DBMS_SQL
DBMS_STATS
UTL_FILE
UTL_RAW
UTL_URL
UTL_ENCODE
要从PL/pgSQL调用不同的功能,请使用PERFORM语句或SELECT语句,并使用包名称限定功能名称。请参考每个包功能的解释,以获取有关调用格式的信息。
概述
DBMS_ALERT包可将警报从一个PL/pgSQL会话发送到多个其他PL/pgSQL会话。
当进行1:N处理时,可以使用此包,例如在同时将警报从给定的PL/pgSQL会话通知到另一个PL/pgSQL会话时。
Table K.105. DBMS_ALERT功能
特性 | 描述 |
---|---|
REGISTER | 注册指定的警报。 |
REMOVE | 删除指定的警报。 |
REMOVEALL | 从会话中删除所有警报。 |
SIGNAL | 通知警报。 |
WAITANY | 等待会话注册的任何警报的通知。 |
WAITONE | 等待会话注册的特定警报的通知。 |
语法
本节将说明DBMS_ALERT的每个功能。
REGISTER
REGISTER函数将指定的警报注册到会话中。通过将警报注册到会话中,可以接收到SIGNAL通知。
指定警报的名称。
警报区分大小写。
可以在单个会话中注册多个警报。如果注册多个警报,请为每个警报调用REGISTER函数。
示例
PERFORM DBMS_ALERT.REGISTER('sample_alert');
REMOVE
REMOVE 从会话中移除指定警报。
指定警报的名称。
警报区分大小写。
警报留下的消息将被移除。
示例
PERFORM DBMS_ALERT.REMOVE('sample_alert');
REMOVEALL
REMOVEALL 从会话中移除所有已注册的警报。
所有警报留下的消息都将被移除。
示例
PERFORM DBMS_ALERT.REMOVEALL();
SIGNAL
SIGNAL 发送指定警报的消息通知。
指定要发送消息通知的警报名称。
警报区分大小写。
在消息中,指定要通知的警报消息。
当执行 SIGNAL 时,消息通知并不完整。消息通知是在提交事务时发送的。如果在 SIGNAL 执行后执行回滚,则消息通知会被丢弃。
如果来自多个会话的同一警报发送了消息通知,则消息将被累积而不被移除。
示例
PERFORM DBMS_ALERT.SIGNAL('ALERT001','message001');
注意
如果连续发出 SIGNAL,累积的消息超过一定数量,则可能会输出内存不足错误。如果内存不足,请调用 AITANY 或 WAITONE 来接收警报,并减少累积的消息。
WAITANY
WAITANY 等待会话中任何已注册的警报的通知。
指定等待警报的最大等待时间 timeout(以秒为单位)。
使用 SELECT 语句获取通知信息,该信息存储在名称、消息和状态列中。
名称列存储警报名称。名称的数据类型为 TEXT。
消息列存储通知警报的消息。消息的数据类型为 TEXT。
状态列存储操作返回的状态代码:0-发生警报;1-发生超时。状态的数据类型为 INTEGER。
示例
DECLARE alert_name TEXT := 'sample_alert'; alert_message TEXT; alert_status INTEGER; BEGIN SELECT name,message,status INTO alert_name,alert_message,alert_status FROM DBMS_ALERT.WAITANY(60);
WAITONE
WAITONE 等待指定警报的通知。
指定要等待的警报名称。
警报区分大小写。
指定等待警报的最大等待时间 timeout(以秒为单位)。
使用 SELECT 语句获取通知信息,该信息存储在消息和状态列中。
消息列存储通知警报的消息。消息的数据类型为 TEXT。
状态列存储操作返回的状态代码:0-发生警报;1-发生超时。状态的数据类型为 INTEGER。
示例
DECLARE alert_message TEXT; alert_status INTEGER; BEGIN SELECT message,status INTO alert_message,alert_status FROM DBMS_ALERT.WAITONE('sample_alert', 60);
下面是 DBMS_ALERT 处理流程的使用示例。
DBMS_ALERT 流程
注意
SIGNAL 发送的消息通知的目标是在执行 SIGNAL 时执行 REGISTER 的会话。
在接收端,始终确保使用 REMOVE 或 REMOVEALL 尽快删除警报,以便在不再需要警报时将其删除。如果关闭会话而没有删除警报,则可能无法在另一个会话中接收到同名警报的 SIGNAL。
DBMS_ALERT 和 DBMS_PIPE 使用相同的内存环境。因此,当检测到 DBMS_PIPE 的内存不足时,也可能会检测到 DBMS_ALERT 的内存不足。
使用示例
发送方
CREATE FUNCTION send_dbms_alert_exe() RETURNS VOID AS $$ BEGIN PERFORM DBMS_ALERT.SIGNAL('sample_alert','SIGNAL ALERT'); END; $$ LANGUAGE plpgsql; SELECT send_dbms_alert_exe(); DROP FUNCTION send_dbms_alert_exe();
接收方
CREATE FUNCTION receive_dbms_alert_exe() RETURNS VOID AS $$ DECLARE alert_name TEXT := 'sample_alert'; alert_message TEXT; alert_status INTEGER; BEGIN PERFORM DBMS_ALERT.REGISTER(alert_name); SELECT message,status INTO alert_message,alert_status FROM DBMS_ALERT.WAITONE(alert_name,300); RAISE NOTICE 'Message : %', alert_message; RAISE NOTICE 'Status : %', alert_status; PERFORM DBMS_ALERT.REMOVE(alert_name); END; $$ LANGUAGE plpgsql; SELECT receive_dbms_alert_exe(); DROP FUNCTION receive_dbms_alert_exe();
概述
在 PL/pgSQL 中执行输入值属性的验证。
Table K.106. DBMS_ASSERT 特性
特性 | 描述 |
---|---|
ENQUOTE_LITERAL | 返回用单引号括起来的指定字符串。 |
ENQUOTE_NAME | 返回用双引号括起来的指定字符串。 |
NOOP | 按原样返回指定的字符串。 |
OBJECT_NAME | 验证指定的字符串是否为已定义的标识符。 |
QUALIFIED_SQL_NAME | 验证指定的字符串是否以适当的格式作为标识符。 |
SCHEMA_NAME | 验证指定的字符串是否为已定义的模式。 |
SIMPLE_SQL_NAME | 验证指定的字符串是否以适当的格式作为单个标识符。 |
语法
本节介绍了 DBMS_ASSERT 的每个特性。
ENQUOTE_LITERAL
ENQUOTE_LITERAL 返回用单引号括起来的指定字符串。
指定一个用单引号括起来的字符串。
返回值的数据类型是VARCHAR。
示例
DECLARE q_literal VARCHAR(256); BEGIN q_literal := DBMS_ASSERT.ENQUOTE_LITERAL('literal_word');
ENQUOTE_NAME
ENQUOTE_NAME将指定的字符串用双引号括起来返回。
指定用双引号括起来的字符串。
对于小写字母转换,请指定TRUE或FALSE。指定TRUE将字符串中的大写字母转换为小写字母。如果指定FALSE,则不会进行小写转换。默认值为TRUE。
如果字符串中的所有字符都是小写,则不会用双引号括起来。
返回值的数据类型是VARCHAR。
参见
有关布尔类型(TRUE/FALSE)值的信息,请参阅LightDB文档中的“The SQL Language”>“Data Types”>“Boolean Type”。
示例
DECLARE dq_literal VARCHAR(256); BEGIN dq_literal := DBMS_ASSERT.ENQUOTE_NAME('TBL001');
NOOP
NOOP原样返回指定的字符串。
指定一个字符串。
返回值的数据类型是VARCHAR。
示例
DECLARE literal VARCHAR(256); BEGIN literal := DBMS_ASSERT.NOOP('NOOP_WORD');
OBJECT_NAME
OBJECT_NAME验证指定的字符串是否为已定义的标识符。
指定要验证的标识符。如果已定义该标识符,则返回指定的标识符。否则,将出现以下错误。
ERROR: invalid object name
返回值的数据类型是VARCHAR。
示例
DECLARE object_name VARCHAR(256); BEGIN object_name := DBMS_ASSERT.OBJECT_NAME('SCM001.TBL001');
QUALIFIED_SQL_NAME
QUALIFIED_SQL_NAME验证指定的字符串是否符合标识符的适当格式。
指定要验证的标识符。如果字符串可以用作标识符,则将返回指定的标识符。否则,将出现以下错误。
ERROR: string is not qualified SQL name
返回值的数据类型是VARCHAR。
参见
关于可以用作标识符的格式的信息,请参阅LightDB文档中的“The SQL Language”>“Lexical Structure”>“Identifiers and Key Words”。
示例
DECLARE object_name VARCHAR(256); BEGIN object_name := DBMS_ASSERT.QUALIFIED_SQL_NAME('SCM002.TBL001');
SCHEMA_NAME
SCHEMA_NAME验证指定的字符串是否为已定义的模式。
指定要验证的模式名称。如果已定义该模式,则返回指定的模式名称。否则,将出现以下错误。
ERROR: invalid schema name
返回值的数据类型是VARCHAR。
示例
DECLARE schema_name VARCHAR(256); BEGIN schema_name := DBMS_ASSERT.SCHEMA_NAME('SCM001');
SIMPLE_SQL_NAME
SIMPLE_SQL_NAME验证指定的字符串是否符合单个标识符的适当格式。
指定要验证的标识符。如果指定的字符串可以用作标识符,则返回指定的标识符。否则,将出现以下错误。
ERROR: string is not qualified SQL name
返回值的数据类型是VARCHAR。
参见
关于可以用作标识符的格式的信息,请参阅LightDB文档中的“The SQL Language”>“Lexical Structure”>“Identifiers and Key Words”。请注意,如果指定了使用全角字符的标识符,则会出现错误。如果包含全角字符,请指定带引号的标识符。
示例
DECLARE simple_name VARCHAR(256); BEGIN simple_name := DBMS_ASSERT.SIMPLE_SQL_NAME('COL01');
下面是 DBMS_ASSERT 的使用示例。
CREATE FUNCTION dbms_assert_exe() RETURNS VOID AS $$ DECLARE w_schema VARCHAR(20) := 'public'; w_table VARCHAR(20) := 'T1'; w_object VARCHAR(40); BEGIN PERFORM DBMS_ASSERT.NOOP(w_schema); PERFORM DBMS_ASSERT.SIMPLE_SQL_NAME(w_table); PERFORM DBMS_ASSERT.SCHEMA_NAME(w_schema); w_object := w_schema || '.' || w_table; PERFORM DBMS_ASSERT.QUALIFIED_SQL_NAME(w_object); PERFORM DBMS_ASSERT.OBJECT_NAME(w_object); RAISE NOTICE 'OBJECT : %', DBMS_ASSERT.ENQUOTE_LITERAL(w_object); RAISE NOTICE 'TABLE_NAME : %', DBMS_ASSERT.ENQUOTE_NAME(w_table); END; $$ LANGUAGE plpgsql; SELECT dbms_assert_exe(); DROP FUNCTION dbms_assert_exe();
概述
提供一组函数存储过程来管理数据泵作业、导出和导入数据、查询作业状态等操作。
Table K.107. DBMS_DATAPUMP功能
功能 | 描述 |
---|---|
ADD_FILE | 添加转储文件日志文件。 |
ATTACH | 获取数据泵作业句柄。 |
METADATA_FILTER | 添加元数据筛选项。 |
OPEN | 声明新作业返回句柄。 |
SET_PARALLEL | 指定作业并行度。 |
SET_PARAMETER | 指定作业配置项。 |
START_JOB | 启动数据泵作业。 |
STOP_JOB | 结束数据泵作业。 |
WAIT_FOR_JOB | 数据泵作业等待。(无效) |
语法
PROCEDURE ADD_FILE(HANDLE IN NUMERIC, FILENAME IN VARCHAR2, DIRECTORY IN VARCHAR2, FILESIZE IN VARCHAR2 DEFAULT NULL, FILETYPE IN NUMERIC DEFAULT 0, REUSEFILE IN NUMERIC DEFAULT NULL); FUNCTION ATTACH(JOB_NAME IN VARCHAR2 DEFAULT NULL, JOB_OWNER IN VARCHAR2 DEFAULT NULL) RETURN NUMERIC; PROCEDURE METADATA_FILTER(HANDLE IN NUMERIC, NAME IN VARCHAR2, VALUE IN VARCHAR2, OBJECT_PATH IN VARCHAR2 DEFAULT NULL); PROCEDURE METADATA_FILTER(HANDLE IN NUMERIC, NAME IN VARCHAR2, VALUE IN CLOB, OBJECT_PATH IN VARCHAR2 DEFAULT NULL); FUNCTION OPEN(OPERATION IN VARCHAR2, JOB_MODE IN VARCHAR2, REMOTE_LINK IN VARCHAR2 DEFAULT NULL, JOB_NAME IN VARCHAR2 DEFAULT NULL, VERSION IN VARCHAR2 DEFAULT 'COMPATIBLE') RETURN NUMERIC; PROCEDURE SET_PARAMETER(HANDLE IN NUMERIC, NAME IN VARCHAR2, VALUE IN VARCHAR2); PROCEDURE SET_PARAMETER(HANDLE IN NUMERIC, NAME IN VARCHAR2, VALUE IN NUMERIC); PROCEDURE SET_PARALLEL(HANDLE IN NUMERIC, DEGREE IN NUMERIC); PROCEDURE START_JOB(HANDLE IN NUMERIC, SKIP_CURRENT IN NUMERIC DEFAULT 0, ABORT_STEP IN NUMERIC DEFAULT 0, CLUSTER_OK IN NUMERIC DEFAULT 1, SERVICE_NAME IN VARCHAR2 DEFAULT NULL); PROCEDURE STOP_JOB(HANDLE IN NUMERIC, IMMEDIATE IN NUMERIC DEFAULT 0, KEEP_MASTER IN NUMERIC DEFAULT NULL, DELAY IN NUMERIC DEFAULT 60); PROCEDURE WAIT_FOR_JOB(HANDLE IN NUMERIC, JOB_STATE OUT VARCHAR2);
本节解释了DBMS_DATAPUMP的每个功能。
ADD_FILE
此过程添加转储文件或日志文件到导入导出作业。
FILESIZE,REUSEFILE参数目前未使用。
示例
DBMS_DATAPUMP.ADD_FILE(HANDLE => hdl, FILENAME => 'example001.dmp', DIRECTORY => 'DMPDIR'); DBMS_DATAPUMP.ADD_FILE(HANDLE => hdl, FILENAME => 'example001.log', DIRECTORY => 'DMPDIR', FILESIZE => '', FILETYPE => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);
ATTACH
此函数获取数据泵作业句柄。
示例
DBMS_DATAPUMP.ATTACH(JOB_NAME => 'example001', JOB_OWNER => 'lightdb')
METADATA_FILTER
此过程添加元数据筛选项。
NAME已支持'SCHEMA_EXPR','NAME_EXPR';VALUE已支持IN,NOT IN,LIKE,NOT LIKE表达式。
OBJECT_PATH参数目前未使用。
示例
DBMS_DATAPUMP.METADATA_FILTER(HANDLE => hdl, NAME => 'SCHEMA_EXPR', VALUE => 'LIKE ''%HR%'''); DBMS_DATAPUMP.METADATA_FILTER(HANDLE => hdl, NAME => 'NAME_EXPR', VALUE => 'LIKE ''%EMP%''');
OPEN
此函数声明新作业返回句柄。
OPERATION已支持'EXPORT','IMPORT';JOB_MODE已支持'SHCEMA','TABLE'。
REMOTE_LINK,VERSION参数目前未使用。
示例
DBMS_DATAPUMP.OPEN(OPERATION => 'EXPORT', JOB_MODE => 'TABLE', REMOTE_LINK => NULL, JOB_NAME => 'EXAMPLE001', VERSION => 'LATEST');
SET_PARAMETER
指定作业配置项。
示例
DBMS_DATAPUMP.SET_PARAMETER(HANDLE => hdl, NAME => 'COMPRESSION', VALUE => 'ALL');
SET_PARALLEL
指定作业并行度。
示例
DBMS_DATAPUMP.SET_PARALLEL(HANDLE => hdl, DEGREE => 2);
START_JOB
启动数据泵作业。
SKIP_CURRENT,ABORT_STEP,CLUSTER_OK,SERVICE_NAME参数目前未使用。
示例
DBMS_DATAPUMP.START_JOB(HANDLE => hdl);
STOP_JOB
结束数据泵作业。
IMMEDIATE,KEEP_MASTER,DELAY参数目前未使用。
示例
DBMS_DATAPUMP.STOP_JOB(HANDLE => hdl);
WAIT_FOR_JOB
数据泵作业等待(当前该存储过程内部未作实现)。
示例
DBMS_DATAPUMP.WAIT_FOR_JOB(HANDLE => hdl,JOB_STATE => jbs);
下面是DBMS_DATAPUMP的一个使用示例。
--EXPORT JOB declare hdl numeric; jbs varchar2; begin hdl := dbms_datapump.open(operation => 'EXPORT', job_mode => 'TABLE', remote_link => NULL, job_name => 'EXAMPLE001', version => 'LATEST'); dbms_datapump.add_file(handle => hdl, filename => 'example001.dmp', directory => 'DMPDIR'); dbms_datapump.add_file(handle => hdl, filename => 'example001.log', directory => 'DMPDIR', filesize => '', filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE); dbms_datapump.metadata_filter(handle => hdl, name => 'NAME_EXPR', value => 'LIKE ''%EMP%'''); dbms_datapump.set_parameter(handle => hdl, name => 'COMPRESSION', value => 'ALL'); dbms_datapump.set_parallel(handle => hdl, degree => 2); dbms_datapump.start_job(handle => hdl); dbms_datapump.wait_for_job(handle => hdl,job_state => jbs); dbms_datapump.stop_job(handle => hdl); end; / --IMPORT JOB declare hdl numeric; jbs varchar2; begin hdl := dbms_datapump.open(operation => 'IMPORT', job_mode => 'TABLE', remote_link => NULL, job_name => 'EXAMPLE001', version => 'LATEST'); dbms_datapump.add_file(handle => hdl, filename => 'example001.dmp', directory => 'DMPDIR'); dbms_datapump.add_file(handle => hdl, filename => 'example001.log', directory => 'DMPDIR', filesize => '', filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE); dbms_datapump.set_parallel(handle => hdl, degree => 2); dbms_datapump.start_job(handle => hdl); dbms_datapump.wait_for_job(handle => hdl,job_state => jbs); dbms_datapump.stop_job(handle => hdl); end; /
概述
一些与 DBMS_LOB 包兼容的函数。
Table K.108. DBMS_LOB 功能
功能 | 描述 |
---|---|
INSTR | 返回指定 LOB 的起始索引。 |
SUBSTR | 提取 LOB 的子字符串。 |
GETLENGTH | 返回 LOB 中字符的数量。 |
APPEND | 将源 LOB 的内容追加到目标 LOB 中。 |
CLOSE | 关闭之前打开的内部或外部 LOB。(已作废) |
COMPARE | 比较两个完整的 LOB 或两个 LOB 的部分。 |
COPY | 将源 LOB 的全部或部分内容复制到目标 LOB 中。 |
CREATETEMPORAR | 在用户默认的临时表空间中创建一个临时 BLOB 或 CLOB 及其相应的索引。(已作废) |
ERASE | 擦除一个LOB的全部或部分。 |
FREETEMPORARY | 释放一个LOB的全部或部分临时空间。 |
OPEN | 在默认的临时表空间中释放临时BLOB或CLOB。(无效) |
READ | 从指定偏移量开始读取LOB中的数据。 |
TRIM | 将LOB值修剪为指定的较短长度。 |
WRITE | 从指定偏移量开始向LOB写入数据。 |
WRITEAPPEND | 将缓冲区写入LOB的末尾。 |
COMPARE | 比较两个完整的LOB或两个LOB的部分。 |
COMPARE | 比较两个完整的LOB或两个LOB的部分。 |
COMPARE | 比较两个完整的LOB或两个LOB的部分。 |
语法
INSTR(STR TEXT, PATT TEXT, START INTEGER DEFAULT 1, NTH INTEGER DEFAULT 1) RETURNS INTEGER INSTR(STR BLOB, PATT TEXT, START INTEGER DEFAULT 1, NTH INTEGER DEFAULT 1) RETURNS INTEGER SUBSTR(STR CLOB, AMOUNT INTEGER DEFAULT 32767, START_OFFSET INTEGER DEFAULT 1) RETURNS VARCHAR2 SUBSTR(STR BLOB, AMOUNT INTEGER DEFAULT 32767, START_OFFSET INTEGER DEFAULT 1) RETURNS RAW GETLENGTH(STR CLOB) RETURNS INTEGER GETLENGTH(STR BLOB) RETURNS INTEGER APPEND(dest_lob BLOB,src_lob BLOB)/APPEND(CLOB,CLOB) COMPARE(lob_1 BLOB,lob_2 BLOB,amount INT4 DEFAULT 2147483647,offset_1 INT4 DEFAULT 1,offset_2 INT4 DEFAULT 1) RETURNS INTEGER COMPARE(CLOB,CLOB,INT4 DEFAULT 2147483647,INT4 DEFAULT 1,INT4 DEFAULT 1) RETURNS INTEGER COPY(dest_lob BLOB,src_lob BLOB,amount INT4,dest_offset INT4 DEFAULT 1,src_offset INT4 DEFAULT 1)/COPY(CLOB,CLOB,INT4,INT4 DEFAULT 1,INT4 DEFAULT 1) ERASE(lob_loc BLOB,amount INT4,p_offset INT4 DEFAULT 1)/ERASE(CLOB,INT4,INT4 DEFAULT 1) READ(lob_loc BLOB,amount INT4,p_offset INT4,buffer RAW)/READ(CLOB,INT4,INT4,TEXT) TRIM(lob_loc BLOB,newlen INT4)/TRIM(CLOB,INT4) WRITE(lob_loc BLOB,amount INT4,p_offset INT4,buffer RAW)/WRITE(CLOB,INT4,INT4,TEXT) WRITEAPPEND(lob_loc BLOB,amount INT4,buffer RAW)/WRITEAPPEND(CLOB,INT4,TEXT)
特性
本节介绍了DBMS_LOB的每个特性。
INSTR
匹配模式的起始偏移量,以字节或字符为单位。如果未找到模式,则返回0。
如果任何一个或多个输入参数为NULL或INVALID,则返回null。
如果offset < 1,则返回NULL。
例子
select dbms_lob.INSTR('Thomas', 'om') from dual; select dbms_lob.INSTR('Thomas'::blob, utl_raw.CAST_TO_RAW('om')) from dual;
SUBSTR
如果指定了start和count,则从start位置开始提取字符串的子字符串,并在count个字符后停止。
如果任何输入参数为NULL,则返回NULL。
如果amount < 1,则返回NULL。
如果offset < 1,则返回NULL。
例子
select dbms_lob.substr('1234567',1,2) from dual; select dbms_lob.substr('1234567'::blob,1,2) from dual;
GETLENGTH
文本的长度,以字节或字符的形式表示为INTEGER。
如果输入的str为NULL,则返回NULL。
例子
select DBMS_LOB.GETLENGTH('abc') from dual;
APPEND
将源LOB的内容附加到目标LOB中。
例子
declare l_blob blob := 'abcd'::blob; l_clob clob := 'abcd'::clob; begin dbms_output.serveroutput(true); dbms_lob.append(l_blob, 'ext'::blob); dbms_output.put_line(l_blob::text); dbms_lob.append(l_clob, 'ext'::clob); dbms_output.put_line(l_clob); end; /
COMPARE
比较两个完整的LOB或两个LOB的部分。
返回 0 如果 `lob_1` 和 `lob_2` 相等,返回 -1 如果 `lob_1` 比 `lob_2` 小,返回 1 如果 `lob_1` 比 `lob_2` 大。
返回 NULL 如果amount、offset_1或offset_2不是有效的LOB偏移值。有效偏移值的范围为1至LOBMAXSIZE(包括1和LOBMAXSIZE)。
例子
declare l_result int; l_blob blob := 'abcd'::blob; l_clob clob := 'abcd'::clob; l_raw_result raw; l_amout INTEGER := 100; l_text_result text; begin dbms_output.serveroutput(true); l_result := dbms_lob.compare('abcd'::blob, 'abcd'::blob); dbms_output.put_line(l_result); l_result := dbms_lob.compare('abcd'::clob, 'abcd'::clob); dbms_output.put_line(l_result); end; /
COPY
将源LOB的全部或部分内容复制到目标LOB中。 您可以指定源LOB和目标LOB的偏移量,以及要复制的字节数或字符数。
如果您在目标LOB中指定的偏移量超出了当前LOB中的数据末尾,则会在目标BLOB或CLOB中插入零字节填充或空格。如果偏移量小于目标LOB的当前长度,则现有数据将被覆盖。
例子
declare l_result int; l_blob blob := 'abcd'::blob; l_clob clob := 'abcd'::clob; l_raw_result raw; l_amout INTEGER := 100; l_text_result text; begin dbms_output.serveroutput(true); dbms_lob.copy(l_blob, 'new_blob'::blob, 100); dbms_output.put_line(l_blob::text); dbms_lob.copy(l_blob, 'xnew_blob'::blob, 100, 1, 2); dbms_output.put_line(l_blob::text); dbms_lob.copy(l_blob, 'xnew_blob'::blob, 100, 2, 2); dbms_output.put_line(l_blob::text); end; /
ERASE
擦除整个内部LOB或部分内部LOB。
当从LOB中间擦除数据时,会写入BLOB或CLOB的零字节填充或空格。
如果在擦除指定数量之前到达LOB值的末尾,则实际擦除的字节数或字符数可能与您在amount参数中指定的数量不同。实际擦除的字符或字节数将在amount参数中返回。
例子
declare l_result int; l_blob blob := 'abcd'::blob; l_clob clob := 'abcd'::clob; l_raw_result raw; l_amout INTEGER := 100; l_text_result text; begin dbms_output.serveroutput(true); l_blob := 'abcd'::blob; l_amout := 100; dbms_output.put_line(l_blob::text); dbms_lob.erase(l_blob, l_amout); dbms_output.put_line(l_blob::text); l_clob := 'abcd'::clob; l_amout := 4; dbms_lob.erase(l_clob, l_amout); dbms_output.put_line(l_clob); end; /
READ
此过程读取LOB的一部分,并将指定的amount从LOB开头的绝对偏移量开始返回到缓冲区参数中。
实际读取的字节数或字符数将在amount参数中返回。如果输入的偏移量指向LOB的末尾,则将amount设置为0,并引发NO_DATA_FOUND异常。
例子
declare l_result int; l_blob blob := 'abcd'::blob; l_clob clob := 'abcd'::clob; l_raw_result raw; l_amout INTEGER := 100; l_text_result text; begin dbms_output.serveroutput(true); l_amout := 5; dbms_lob.read('abcde'::blob, l_amout, 1, l_raw_result); dbms_output.put_line(l_raw_result); l_amout := 5; dbms_lob.read('abcde'::clob, l_amout, 1, l_text_result); dbms_output.put_line(l_text_result); end; /
TRIM
此过程将内部LOB的值修剪为您在newlen参数中指定的长度。对于BLOB,请以字节为单位指定长度;对于CLOB,请以字符为单位指定长度。
例子
declare l_result int; l_blob blob := 'abcd'::blob; l_clob clob := 'abcd'::clob; l_raw_result raw; l_amout INTEGER := 100; l_text_result text; begin dbms_output.serveroutput(true); l_blob := 'abcde'::blob; dbms_lob.trim(l_blob, 1); dbms_output.put_line(l_blob::text); l_clob := 'abcde'::clob; dbms_lob.trim(l_clob, 1); dbms_output.put_line(l_clob); end; /
WRITE
此过程从LOB开头的绝对偏移量开始,将指定数量的数据从缓冲区参数中写入内部LOB。数据从缓冲区参数中写入。
WRITE将替换(覆盖)在指定偏移量上已存在的LOB中的任何数据,替换的长度由您指定。
例子
declare l_result int; l_blob blob := 'abcd'::blob; l_clob clob := 'abcd'::clob; l_raw_result raw; l_amout INTEGER := 100; l_text_result text; begin dbms_output.serveroutput(true); l_blob := 'abcde'::blob; dbms_lob.write(l_blob, pg_catalog.length(utl_raw.CAST_TO_RAW('测试')), 2, utl_raw.CAST_TO_RAW('测试')); dbms_output.put_line(l_blob::text); -- write clob l_clob := 'abcde'::clob; dbms_lob.write(l_clob, 2, 2,'测试'::text); dbms_output.put_line(l_clob); end; /
WRITEAPPEND
此过程将指定数量的数据从缓冲区参数中写入内部LOB的末尾。
例子
declare l_result int; l_blob blob := 'abcd'::blob; l_clob clob := 'abcd'::clob; l_raw_result raw; l_amout INTEGER := 100; l_text_result text; begin dbms_output.serveroutput(true); -- writeappend blob l_blob := 'abcde'::blob; dbms_lob.writeappend(l_blob, pg_catalog.length(utl_raw.CAST_TO_RAW('测试')), utl_raw.CAST_TO_RAW('测试')); dbms_output.put_line(l_blob::text); -- write clob l_clob := 'abcde'::clob; dbms_lob.writeappend(l_clob, 2,'测试'::text); dbms_output.put_line(l_clob); end; /
下面展示了DBMS_LOB的使用示例。
CREATE PROCEDURE dbms_lob_exe() AS $$ DECLARE str1 text; str2 text; pos INTEGER; count INTEGER; BEGIN str2 := dbms_lob.substr('1234567',2,3); pos := dbms_lob.instr('Tech on the net', 'e'); count := dbms_lob.getlength('1234567'); raise info 'str2=%,pos=%,count=%', str2, pos, count; END; $$ LANGUAGE plpgsql; call dbms_lob_exe(); DROP PROCEDURE dbms_lob_exe();
概述
从PL/pgSQL向客户端(如ltsql)发送消息。
特点
Table K.109. DBMS_OUTPUT 特点
特点 | 描述 |
---|---|
ENABLE | 启用此包的功能。 |
DISABLE | 禁用此包的功能。 |
SERVEROUTPUT | 控制是否发送消息。 |
PUT | 发送消息。 |
PUT_LINE | 发送带换行符的消息。 |
NEW_LINE | 发送一个换行符。不能带参数,支持两种使用方式:dbms_output.new_line和dbms_output.new_line()。 |
GET_LINE | 从消息缓冲区获取一行。 |
GET_LINES | 从消息缓冲区检索多行。 |
语法
本节详细说明了DBMS_OUTPUT的每个功能。
ENABLE
ENABLE启用PUT、PUT_LINE、NEW_LINE、GET_LINE和GET_LINES的使用。
在多次执行ENABLE时,最后指定的值是缓冲区大小(以字节为单位)。请指定2000到1000000之间的缓冲区大小。
缓冲区大小的默认值为20000。如果将NULL指定为缓冲区大小,则将使用1000000。
如果没有执行ENABLE,则即使执行PUT、PUT_LINE、NEW_LINE、GET_LINE和GET_LINES,它们也会被忽略。
例子
PERFORM DBMS_OUTPUT.ENABLE(20000);
DISABLE
DISABLE禁用PUT、PUT_LINE、NEW_LINE、GET_LINE和GET_LINES的使用。
剩余的缓冲区信息将被丢弃。
例子
PERFORM DBMS_OUTPUT.DISABLE();
SERVEROUTPUT
SERVEROUTPUT控制是否发送消息。
对于sendMsgs,请指定TRUE或FALSE。
如果指定为TRUE,则在执行PUT、PUT_LINE或NEW_LINE时,将消息发送到客户端(如ltsql),而不是存储在缓冲区中。
如果指定为FALSE,则在执行PUT、PUT_LINE或NEW_LINE时,将消息存储在缓冲区中,而不发送到客户端(如ltsql)。
默认指定为TRUE。
参见
请参阅LightDB文档中的“The SQL Language” > “Data Types” > “Boolean Type”以获取有关布尔类型(TRUE/FALSE)值的信息。
例子
PERFORM DBMS_OUTPUT.SERVEROUTPUT(TRUE);
SET SERVEROUTPUT ON/OFF; 等同于 SELECT DBMS_OUTPUT.SERVEROUTPUT(TRUE/FALSE);。
例子
lightdb@oracle=# SET SERVEROUTPUT ON; serveroutput -------------- (1 row) lightdb@oracle=# SELECT DBMS_OUTPUT.PUT_LINE('my serveroutput'); my serveroutput put_line ---------- (1 row) lightdb@oracle=# SET SERVEROUTPUT OFF; serveroutput -------------- (1 row) lightdb@oracle=# SELECT DBMS_OUTPUT.PUT_LINE('my serveroutput'); put_line ---------- (1 row) lightdb@oracle=#
PUT
PUT设置要发送的消息。
字符串是要发送的消息。
当为SERVEROUTPUT指定TRUE时,消息将发送到客户端,例如ltsql。
当SERVEROUTPUT指定为FALSE时,消息将保留在缓冲区中。
PUT不会附加换行符。要附加换行符,请执行NEW_LINE。
如果发送的字符串长度超过了在ENABLE中指定的缓冲区大小,则会发生错误。
示例
PERFORM DBMS_OUTPUT.PUT('abc');
PUT_LINE
PUT_LINE将要发送的信息设置为末尾加上一个换行符。
字符串是要发送的信息。
当在SERVEROUTPUT中指定TRUE时,消息将被发送给客户端,如ltsql。
当在SERVEROUTPUT中指定FALSE时,消息将被保留在缓冲区中。
如果发送的字符串长度超过了ENABLE中指定的缓冲区大小,就会发生错误。
示例
PERFORM DBMS_OUTPUT.PUT_LINE('abc');
NEW_LINE
NEW_LINE在使用PUT创建消息时在末尾添加一个换行符。
当在SERVEROUTPUT中指定TRUE时,消息将被发送给客户端,如ltsql。
当在SERVEROUTPUT中指定FALSE时,消息将被保留在缓冲区中。
示例
PERFORM DBMS_OUTPUT.NEW_LINE();
GET_LINE
GET_LINE从消息缓冲区中检索一行。
使用SELECT语句获取检索到的行和操作返回的状态码,它们存储在line和status列中。
line列存储从缓冲区检索到的行。line的数据类型为TEXT。
status列存储操作返回的状态码:0-成功完成;1-因缓冲区中没有更多行而失败。status的数据类型为INTEGER。
如果执行GET_LINE或GET_LINES,然后执行PUT、PUT_LINE或PUT_LINES,而缓冲区中仍存在未检索的消息,则未从缓冲区检索到的消息将被丢弃。
示例
DECLARE buff1 VARCHAR(20); stts1 INTEGER; BEGIN SELECT line,status INTO buff1,stts1 FROM DBMS_OUTPUT.GET_LINE();
GET_LINES
GET_LINES从消息缓冲区中检索多行信息。
指定从缓冲区中检索的行数。
使用SELECT语句获取检索到的行和行数,它们存储在lines和numlines列中。
lines列存储从缓冲区检索到的行。lines的数据类型为TEXT。
numlines列存储从缓冲区检索到的行数。如果此数字小于所请求的行数,则缓冲区中没有更多行。numlines的数据类型为INTEGER。
如果执行GET_LINE或GET_LINES,然后执行PUT、PUT_LINE或NEW_LINE,而缓冲区中仍存在未检索的消息,则未从缓冲区检索到的消息将被丢弃。
示例
DECLARE buff VARCHAR(20)[10]; stts INTEGER := 10; BEGIN SELECT lines, numlines INTO buff,stts FROM DBMS_OUTPUT.GET_LINES(stts);
下面是DBMS_OUTPUT的一个使用示例。
CREATE FUNCTION dbms_output_exe() RETURNS VOID AS $$ DECLARE buff1 VARCHAR(20); buff2 VARCHAR(20); stts1 INTEGER; stts2 INTEGER; BEGIN PERFORM DBMS_OUTPUT.DISABLE(); PERFORM DBMS_OUTPUT.ENABLE(); PERFORM DBMS_OUTPUT.SERVEROUTPUT(FALSE); PERFORM DBMS_OUTPUT.PUT('DBMS_OUTPUT TEST 1'); PERFORM DBMS_OUTPUT.NEW_LINE(); PERFORM DBMS_OUTPUT.PUT_LINE('DBMS_OUTPUT TEST 2'); SELECT line,status INTO buff1,stts1 FROM DBMS_OUTPUT.GET_LINE(); SELECT line,status INTO buff2,stts2 FROM DBMS_OUTPUT.GET_LINE(); PERFORM DBMS_OUTPUT.SERVEROUTPUT(TRUE); PERFORM DBMS_OUTPUT.PUT_LINE(buff1); PERFORM DBMS_OUTPUT.PUT_LINE(buff2); END; $$ LANGUAGE plpgsql; SELECT dbms_output_exe(); DROP FUNCTION dbms_output_exe();
概述
在执行PL / pgSQL的会话之间进行通信。
该包可用于1:1通信,例如在执行PL/pgSQL的会话之间交换数据时。
对于管道,有显式管道和隐式管道,并且对于显式管道,您可以选择公共管道和私有管道。每种类型的特征如下:
管道类型
Table K.110. 管道类型
类型 | 特点 |
---|---|
显式管道 |
- 使用 CREATE_PIPE 显式地创建一个管道。 - 在创建管道时,可以选择公共管道和私有管道。 - 必须使用 REMOVE_PIPE 显式地删除一个管道。 |
隐式管道 |
- 在使用 SEND_MESSAGE 和 RECEIVE_MESSAGE 时自动创建。 - 创建的管道成为公共管道。 - 当使用 RECEIVE_MESSAGE 接收消息时,如果管道中没有其他消息剩余,管道将被自动删除。 |
公共管道 |
- 可以作为显式管道或隐式管道创建。 - 也可以被除创建者以外的用户使用。 |
私有管道 |
- 只能作为显式管道创建。 - 只能被其创建者使用。 |
注意
单个实例最多可同时使用50个管道。
在频繁创建和删除管道的情况下,请使用公共管道。 如果创建私有管道,即使在管道被删除后,内部信息(私有管道的创建者)仍将保留。 因此,反复创建和删除管道可能会导致内存耗尽。
当通过 RECEIVE_MESSAGE 创建隐式管道时,在未收到消息的情况下发生超时,管道不会被移除。
特点
Table K.111. DBMS_PIPE 特点
特点 | 描述 |
---|---|
CREATE_PIPE | 创建公共或私有管道。 |
NEXT_ITEM_TYPE | 确定本地缓冲区中下一个项目的数据类型,并返回该类型。 |
PACK_MESSAGE | 在本地缓冲区中设置一个消息。 |
PURGE | 清空指定管道的内容。 |
RECEIVE_MESSAGE | 在本地缓冲区设置接收到的消息。 |
REMOVE_PIPE | 移除指定的管道。 |
RESET_BUFFER | 重置本地缓冲区的设置位置。 |
SEND_MESSAGE | 发送本地缓冲区的内容。 |
UNIQUE_SESSION_NAME | 返回一个唯一的会话名称。 |
UNPACK_MESSAGE_BYTEA | 在本地缓冲区中以 BYTEA 类型接收一个消息。 |
UNPACK_MESSAGE_DATE | 在本地缓冲区中以 DATE 类型接收一个消息。 |
UNPACK_MESSAGE_NUMBER | 在本地缓冲区中以 NUMERIC 类型接收一个消息。 |
UNPACK_MESSAGE_RECORD | 在本地缓冲区中以 RECORD 类型接收一个消息。 |
UNPACK_MESSAGE_TEXT | 在本地缓冲区中以 TEXT 类型接收一个消息。 |
UNPACK_MESSAGE_TIMESTAMP | 在本地缓冲区中以 TIMESTAMP 类型接收一个消息。 |
语法
本节将解释 DBMS_PIPE 的每个特点。
CREATE_PIPE
CREATE_PIPE explicitly creates a pipe environment for data communication.
指定要创建的管道的名称。
管道名称区分大小写。
指定可以发送或接收的最大消息数。如果省略,则使用 0(无法发送消息)。指定从 1 到 32767。
对于 private,指定 TRUE 或 FALSE。如果指定为 TRUE,则创建私有管道。如果指定为 FALSE,则创建公共管道。默认值为 FALSE。
如果已经创建了同名管道,则会发生错误。
参见
有关布尔类型(TRUE/FALSE)的信息,请参阅 LightDB 文档中的 "The SQL Language" > "Data Types" > "Boolean Type"。
示例
PERFORM DBMS_PIPE.CREATE_PIPE('P01', 100, FALSE);
NEXT_ITEM_TYPE
NEXT_ITEM_TYPE 返回本地缓冲区中的下一个数据类型。
返回值的数据类型为INTEGER。返回以下值之一:
Table K.112. NEXT_ITEM_TYPE返回的值
返回值 | 数据类型 |
---|---|
9 | NUMERIC类型 |
11 | TEXT类型 |
12 | DATE类型 |
13 | TIMESTAMP类型 |
23 | BYTEA类型 |
24 | RECORD类型 |
0 | 缓冲区中没有数据 |
示例
DECLARE i_iType INTEGER; BEGIN i_iType := DBMS_PIPE.NEXT_ITEM_TYPE();
PACK_MESSAGE
PACK_MESSAGE将指定的消息设置到本地缓冲区中。
指定要设置到本地缓冲区中的数据。可以使用以下数据类型:
字符类型 (*1)
整数类型 (*2)
NUMERIC类型
DATE类型
TIMESTAMP类型 (*3)
BYTEA类型
RECORD类型
*1:字符类型在内部转换为TEXT类型。
*2:整数类型在内部转换为NUMERIC类型。
*3:TIMESTAMP类型在内部转换为带时区的TIMESTAMP类型。
每次调用PACK_MESSAGE时,都会向本地缓冲区添加一个新消息。
本地缓冲区的大小约为8KB。但是,每个消息都有开销,因此实际可以存储的总大小小于8KB。要清除本地缓冲区,请发送消息(SEND_MESSAGE)或将缓冲区(RESET_BUFFER)重置为其初始状态。
示例
PERFORM DBMS_PIPE.PACK_MESSAGE('Message Test001');
PURGE
PURGE将管道中的消息删除。
指定要删除其消息的管道的名称。
管道名称区分大小写。
示例
PERFORM DBMS_PIPE.PURGE('P01');
注意
执行PURGE操作时,本地缓冲区将用于删除管道中的消息。因此,如果管道中仍有任何消息,本地缓冲区将被PURGE覆盖。
RECEIVE_MESSAGE
RECEIVE_MESSAGE接收指定管道中存在的消息,并将这些消息设置在本地缓冲区中。
消息按照发送到管道的单位进行接收,由SEND_MESSAGE发送。接收到的消息在设置到本地缓冲区之后会从管道中删除。
指定要接收消息的管道名称。
管道名称区分大小写。
指定等待消息的最大等待时间timeout(单位:秒)。如果省略,则默认为31536000秒(1年)。
返回值的数据类型为INTEGER。如果成功接收到消息,返回值为0。如果超时,则返回1。
示例
DECLARE i_Ret INTEGER; BEGIN i_Ret := DBMS_PIPE.RECEIVE_MESSAGE('P01', 60);
REMOVE_PIPE
REMOVE_PIPE将删除指定的管道。
指定要删除的管道的名称。
管道名称区分大小写。
示例
PERFORM DBMS_PIPE.REMOVE_PIPE('P01');
RESET_BUFFER
RESET_BUFFER重置了本地缓冲区的设置位置。使用此操作可以丢弃本地缓冲区中剩余的任何不必要的数据。
示例
PERFORM DBMS_PIPE.RESET_BUFFER();
SEND_MESSAGE
SEND_MESSAGE将本地缓冲区中存储的数据发送到指定的管道。
指定数据要发送到的管道的名称。
管道名称区分大小写。
请指定以秒为单位的发送数据的最大等待时间超时时间。如果省略,则默认为31536000秒(1年)。
请指定可以发送或接收的最大消息数。如果省略,则使用CREATE_PIPE中设置的最大消息数。如果在隐式管道中省略,则消息数将不受限制。可以指定1到32767之间的数字。
如果在SEND_MESSAGE和CREATE_PIPE中都指定了最大消息数,则将使用较大的值。
返回值的数据类型为INTEGER。如果成功接收到一条消息,则返回0。如果发生超时,则返回1。
示例
DECLARE i_Ret INTEGER; BEGIN i_Ret := DBMS_PIPE.SEND_MESSAGE('P01', 10, 20);
注意
如果达到最大消息数或正在发送的消息太大,则在发送过程中会发生超时。如果发生超时,请使用RECEIVE_MESSAGE接收管道中的任何消息。
UNIQUE_SESSION_NAME
UNIQUE_SESSION_NAME返回一个在所有会话中都唯一的名称。该名称可用作管道名称。
同一会话的多个调用始终返回相同的名称。
返回值的数据类型为VARCHAR。返回一个长度最多为30个字符的字符串。
示例
DECLARE p_Name VARCHAR(30); BEGIN p_Name := DBMS_PIPE.UNIQUE_SESSION_NAME();
UNPACK_MESSAGE_BYTEA
NPACK_MESSAGE_BYTEA在本地缓冲区中接收BTYEA类型的消息。
通过PACK_MESSAGE在本地缓冲区中设置单位来接收消息。接收到的消息将从本地缓冲区中移除。
返回值的数据类型是BYTEA。
如果本地缓冲区中没有消息,则返回NULL值。
对于数据类型,必须与PACK_MESSAGE设置的数据类型对齐。如果数据类型不同,则会出现以下错误。
ERROR: datatype mismatch DETAIL: unpack unexpected type: xx
示例
DECLARE g_Bytea BYTEA; BEGIN g_Bytea := DBMS_PIPE.UNPACK_MESSAGE_BYTEA();
UNPACK_MESSAGE_DATE
UNPACK_MESSAGE_DATE在本地缓冲区中接收DATE类型的消息。
通过PACK_MESSAGE在本地缓冲区中设置单位来接收消息。接收到的消息将从本地缓冲区中移除。
返回值的数据类型是DATE。
如果本地缓冲区中没有消息,则返回NULL值。
对于数据类型,必须与PACK_MESSAGE设置的数据类型对齐。如果数据类型不同,则会出现以下错误。
ERROR: datatype mismatch DETAIL: unpack unexpected type: xx
示例
DECLARE g_Date DATE; BEGIN g_Date := DBMS_PIPE.UNPACK_MESSAGE_DATE();
注意
如果在search_path中设置了“oracle”模式,则将使用orafce的DATE类型,因此接收数据时请使用UNPACK_MESSAGE_TIMESTAMP。UNPACK_MESSAGE_DATE是LightDB DATE类型的接口。
UNPACK_MESSAGE_NUMBER
UNPACK_MESSAGE_NUMBER在本地缓冲区中接收NUMERIC类型的消息。
通过PACK_MESSAGE在本地缓冲区中设置单位来接收消息。接收到的消息将从本地缓冲区中移除。
返回值的数据类型是NUMERIC。
如果本地缓冲区中没有消息,则返回NULL值。
对于数据类型,必须与PACK_MESSAGE设置的数据类型对齐。如果数据类型不同,则会出现以下错误。
ERROR: datatype mismatch DETAIL: unpack unexpected type: xx
示例
DECLARE g_Number NUMERIC; BEGIN g_Number := DBMS_PIPE.UNPACK_MESSAGE_NUMBER();
UNPACK_MESSAGE_RECORD
UNPACK_MESSAGE_RECORD 接收本地缓冲区中的 RECORD 类型消息。
消息由 PACK_MESSAGE 在本地缓冲区中按照设定的单元接收。接收到的消息将从本地缓冲区中移除。
返回值的数据类型是 RECORD。
如果本地缓冲区中没有消息,则返回 NULL 值。
对于数据类型,需要与 PACK_MESSAGE 设置的数据类型保持一致。如果数据类型不同,则会出现以下错误:
ERROR: datatype mismatch DETAIL: unpack unexpected type: xx
示例
DECLARE msg1 TEXT; status NUMERIC; BEGIN SELECT col1, col2 INTO msg1, status FROM DBMS_PIPE.UNPACK_MESSAGE_RECORD();
UNPACK_MESSAGE_TEXT
UNPACK_MESSAGE_TEXT 接收本地缓冲区中的 TEXT 类型消息。
消息由 PACK_MESSAGE 在本地缓冲区中按照设定的单元接收。接收到的消息将从本地缓冲区中移除。
返回值的数据类型是 TEXT。
如果本地缓冲区中没有消息,则返回 NULL 值。
对于数据类型,需要与 PACK_MESSAGE 设置的数据类型保持一致。如果数据类型不同,则会出现以下错误。
ERROR: datatype mismatch DETAIL: unpack unexpected type: xx
示例
DECLARE g_Text TEXT; BEGIN g_Text := DBMS_PIPE.UNPACK_MESSAGE_TEXT();
UNPACK_MESSAGE_TIMESTAMP
UNPACK_MESSAGE_TIMESTAMP 接收本地缓冲区中的 TIMESTAMP WITH TIME ZONE 类型消息。
消息由 PACK_MESSAGE 在本地缓冲区中按照设定的单元接收。接收到的消息将从本地缓冲区中移除。
返回值的数据类型是 TIMESTAMP WITH TIME ZONE。
如果本地缓冲区中没有消息,则返回 NULL 值。
对于数据类型,需要与 PACK_MESSAGE 设置的数据类型保持一致。如果数据类型不同,则会出现以下错误。
ERROR: datatype mismatch DETAIL: unpack unexpected type: xx
示例
DECLARE g_Timestamptz TIMESTAMP WITH TIME ZONE; BEGIN g_Timestamptz := DBMS_PIPE.UNPACK_MESSAGE_TIMESTAMP();
下面是使用 DBMS_PIPE 处理流程的示例:
DBMS_PIPE 的流程
注意
当使用 CREATE_PIPE 明确创建管道时,确保使用 REMOVE_PIPE 命令删除管道。如果未明确删除管道,则一旦创建,它将一直存在,直到实例停止。
在流程图中,创建管道和删除管道是在接收方描述的,但是,这些也可以在发送方执行。为了保持一致性,建议在一个方向上创建和删除管道。
如果同名管道已经存在,CREATE_PIPE 将会出现错误。 隐式创建的管道也可以成为 SEND_MESSAGE 和 RECEIVE_MESSAGE 的目标,因此在执行 CREATE_PIPE 时,确保不要先调用 SEND_MESSAGE 和 RECEIVE_MESSAGE。
DBMS_ALERT 和 DBMS_PIPE 使用相同的内存环境。因此,当检测到 DBMS_ALERT 的内存不足时,也可能会检测到 DBMS_PIPE 的内存不足。
信息
正在使用中的管道信息可以在DBMS_PIPE.DB_PIPES视图中查看。
SELECT * from dbms_pipe.db_pipes; name | items | size | limit | private | owner ------+-------+------+-------+---------+------- P01 | 1 | 18 | 100 | f | (1 row)
使用示例
发送方
CREATE FUNCTION send_dbms_pipe_exe(IN pipe_mess text) RETURNS void AS $$ DECLARE pipe_name text := 'sample_pipe'; pipe_time timestamp := current_timestamp; pipe_stat int; BEGIN PERFORM DBMS_PIPE.RESET_BUFFER(); PERFORM DBMS_PIPE.PACK_MESSAGE(pipe_mess); PERFORM DBMS_PIPE.PACK_MESSAGE(pipe_time); pipe_stat := DBMS_PIPE.SEND_MESSAGE(pipe_name); RAISE NOTICE 'PIPE_NAME: % SEND Return Value =%', pipe_name, pipe_stat; END; $$ LANGUAGE plpgsql; SELECT send_dbms_pipe_exe('Sample Message.'); DROP FUNCTION send_dbms_pipe_exe(text);
接收方
CREATE FUNCTION receive_dbms_pipe_exe() RETURNS void AS $$ DECLARE pipe_name text := 'sample_pipe'; pipe_text text; pipe_nume numeric; pipe_date date; pipe_time timestamp with time zone; pipe_byte bytea; pipe_reco record; pipe_item int; pipe_stat int; BEGIN pipe_stat := DBMS_PIPE.RECEIVE_MESSAGE(pipe_name,300); RAISE NOTICE 'Return Value = %', pipe_stat; LOOP pipe_item := DBMS_PIPE.NEXT_ITEM_TYPE(); RAISE NOTICE 'Next Item : %', pipe_item; IF (pipe_item = 9) THEN pipe_nume := DBMS_PIPE.UNPACK_MESSAGE_NUMBER(); RAISE NOTICE 'Get Message : %' ,pipe_nume; ELSIF (pipe_item =11) THEN pipe_text := DBMS_PIPE.UNPACK_MESSAGE_TEXT(); RAISE NOTICE 'Get Message : %' ,pipe_text; ELSIF (pipe_item = 12) THEN pipe_date := DBMS_PIPE.UNPACK_MESSAGE_DATE(); RAISE NOTICE 'Get Message : %' ,pipe_date; ELSIF (pipe_item = 13) THEN pipe_time := DBMS_PIPE.UNPACK_MESSAGE_TIMESTAMP(); RAISE NOTICE 'Get Message : %' ,pipe_time; ELSIF (pipe_item = 23) THEN pipe_byte := DBMS_PIPE.UNPACK_MESSAGE_BYTEA(); RAISE NOTICE 'Get Message : %' ,pipe_byte; ELSIF (pipe_item = 24) THEN pipe_reco := DBMS_PIPE.UNPACK_MESSAGE_RECORD(); RAISE NOTICE 'Get Message : %' ,pipe_reco; ELSE EXIT; END IF; END LOOP; PERFORM DBMS_PIPE.REMOVE_PIPE(pipe_name); END; $$ LANGUAGE plpgsql; SELECT receive_dbms_pipe_exe(); DROP FUNCTION receive_dbms_pipe_exe();
概述
生成在PL/pgSQL中的随机数。
Table K.113. DBMS_RANDOM功能
功能 | 描述 |
---|---|
INITIALIZE | 初始化生成随机数。 |
NORMAL | 返回正态分布的随机数。 |
RANDOM | 生成随机数。 |
SEED | 重置种子值。 |
STRING | 生成一个随机字符串。 |
TERMINATE | 终止随机数生成。 |
VALUE | 生成一个介于0和1之间的随机十进制数,或介于指定值之间的随机十进制数。 |
语法
本节介绍DBMS_RANDOM的每个功能。
INITIALIZE
INITIALIZE使用指定的种子值初始化随机数生成。
对于seedVal,请指定SMALLINT或INTEGER类型。
示例
PERFORM DBMS_RANDOM.INITIALIZE(999);
NORMAL
NORMAL生成并返回一个正态分布的随机数。
返回值类型为DOUBLE PRECISION。
示例
DECLARE d_RunNum DOUBLE PRECISION; BEGIN d_RunNum := DBMS_RANDOM.NORMAL();
RANDOM
RANDOM生成并返回一个随机数。
返回值的数据类型为INTEGER。
示例
DECLARE d_RunInt INTEGER; BEGIN d_RunInt := DBMS_RANDOM.RANDOM();
SEED
SEED使用指定的种子值或种子字符串初始化随机数生成。
对于seedVal,请指定SMALLINT或INTEGER类型。
种子字符串可以指定为任何字符串。
示例
PERFORM DBMS_RANDOM.SEED('123');
STRING
STRING根据指定的显示格式和字符串长度生成并返回一个随机字符串。
对于显示格式fmt,请指定以下任何值。如果指定了其他任何值,则会出现错误。
Table K.114. 可指定的显示格式值
设置值 | 生成的字符串 |
---|---|
'u', 'U' | 仅大写字母 |
'l', 'L' | 仅小写字母 |
'a', 'A' | 大写字母和小写字母的混合 |
'x', 'X' | 大写字母和数字 |
'p', 'P' | 任何可显示字符 |
指定要生成的字符串的长度。请指定SMALLINT或INTEGER类型。
返回值的数据类型为TEXT。
示例
DECLARE d_RunStr TEXT; BEGIN d_RunStr := DBMS_RANDOM.STRING('a', 20);
TERMINATE
调用TERMINATE以终止随机数生成。
信息
TERMINATE不执行任何操作,但已包含以与Oracle数据库兼容。
示例
PERFORM DBMS_RANDOM.TERMINATE();
VALUE
VALUE生成并返回指定范围内的随机数。
对于min和max, 请指定数字数据类型。将生成介于最小值和最大值之间(包括最小值和最大值)的随机数。
如果省略了最小值和最大值,则将生成介于0和1之间的随机十进制数。
返回值的数据类型为DOUBLE PRECISION。
示例
DECLARE d_RunDbl DOUBLE PRECISION; BEGIN d_RunDbl := DBMS_RANDOM.VALUE();
下面是DBMS_RANDOM的使用示例。
CREATE FUNCTION dbms_random_exe() RETURNS VOID AS $$ DECLARE w_rkey VARCHAR(10) := 'rnd111'; i_rkey INTEGER := 97310; BEGIN PERFORM DBMS_RANDOM.INITIALIZE(i_rkey); RAISE NOTICE 'RANDOM -> NORMAL : %', DBMS_RANDOM.NORMAL(); RAISE NOTICE 'RANDOM -> RANDOM : %', DBMS_RANDOM.RANDOM(); RAISE NOTICE 'RANDOM -> STRING : %', DBMS_RANDOM.STRING('a',10); RAISE NOTICE 'RANDOM -> VALUE : %', DBMS_RANDOM.VALUE(); PERFORM DBMS_RANDOM.SEED(w_rkey); RAISE NOTICE 'RANDOM -> NORMAL : %', DBMS_RANDOM.NORMAL(); RAISE NOTICE 'RANDOM -> RANDOM : %', DBMS_RANDOM.RANDOM(); RAISE NOTICE 'RANDOM -> STRING : %', DBMS_RANDOM.STRING('p',10); RAISE NOTICE 'RANDOM -> VALUE : %', DBMS_RANDOM.VALUE(1,100); PERFORM DBMS_RANDOM.TERMINATE(); END; $$ LANGUAGE plpgsql; SELECT dbms_random_exe(); DROP FUNCTION dbms_random_exe();
概述
提供PL/pgSQL的实用工具。
Table K.115. DBMS_UTILITY功能
功能 | 描述 |
---|---|
FORMAT_CALL_STACK | 返回当前调用堆栈。 |
GET_HASH_VALUE | 基于输入字符串的哈希值。 |
CANONICALIZE | 将给定字符串进行规范化。 |
COMMA_TO_TABLE | 将以逗号分隔的名称列表转换为PL/SQL名称表。 |
TABLE_TO_COMMA | 将PL/SQL名称表转换为以逗号分隔的名称列表。 |
DB_VERSION | 返回数据库的版本信息。 |
EXEC_DDL_STATEMENT | 在parse_string中执行DDL语句。 |
GET_TIME | 以百分之一秒为单位查找当前时间。 |
语法
FORMAT_CALL_STACK(fmt text); FORMAT_CALL_STACK(); GET_HASH_VALUE(name VARCHAR2,base INTEGER,hash_size INTEGER) CANONICALIZE(name TEXT,canon_name TEXT,canon_len INT4) COMMA_TO_TABLE(list TEXT,tablen INT4,tab TEXT[]) TABLE_TO_COMMA(tab TEXT[],tablen INT4,list TEXT) DB_VERSION(version TEXT,compatibility TEXT) EXEC_DDL_STATEMENT(parse_string TEXT)
本节介绍了DBMS_UTILITY的每个功能。
FORMAT_CALL_STACK
FORMAT_CALL_STACK返回PL/pgSQL的当前调用堆栈。
对于显示格式fmt,请指定以下任何值。如果指定了其他任何值,则会出现错误。
Table K.116. 可指定的显示格式值
设置值 | 显示的内容 |
---|---|
'o' | 标准格式的调用堆栈显示(带标题) |
's' | 标准格式的调用堆栈显示(不带标题) |
'p' | 逗号分隔的调用堆栈显示(不带标题) |
如果省略了显示格式,则使用显示格式“o”。
返回值的数据类型为TEXT。
示例
DECLARE s_StackTrace TEXT BEGIN s_StackTrace := DBMS_UTILITY.FORMAT_CALL_STACK();
注意
如果指定了英语以外的语言环境作为消息语言环境,则可能无法正确检索调用堆栈结果。为了正确检索调用堆栈结果,请将英语指定为消息语言环境。
GET_HASH_VALUE
基于输入字符串的哈希值,哈希值应在base和base + hash_size -1之间。
示例
PERFORM DBMS_UTILITY.GET_HASH_VALUE('abcdef',0,10000);
CANONICALIZE
此过程处理单个保留字或关键字(例如“table”),并为单个标识符删除空格,以便'table'变成TABLE。
示例
declare l_result text := ''; begin dbms_output.serveroutput(True); dbms_utility.canonicalize('taBle', l_result, 100); dbms_output.put_line(l_result); end; /
COMMA_TO_TABLE
这些过程将以逗号分隔的名称列表转换为PL/SQL名称表。
列表必须是非空的逗号分隔列表:除逗号分隔列表之外的任何内容都会被拒绝。双引号内的逗号不算。
示例
declare tablen int4; tab text[]; begin dbms_output.serveroutput(True); dbms_utility.comma_to_table('table, "Table","Table,122324" , Tablesd', tablen, tab); dbms_output.put_line(tablen); dbms_output.put_line(array_to_string(tab,',')); end; /
TABLE_TO_COMMA
此过程将PL/SQL名称表转换为逗号分隔的名称列表。
示例
declare tablen int4; l_str text; begin dbms_output.serveroutput(True); dbms_utility.table_to_comma('{table," \"table\"","\"table.1234567890\" "," tablezx",NULL}'::text[], tablen, l_str); dbms_output.put_line(tablen); dbms_output.put_line(l_str); end; /
DB_VERSION
此过程返回数据库的版本信息。
示例
declare lt_version text; compatibility text; begin dbms_output.serveroutput(True); dbms_utility.db_version(lt_version, compatibility); dbms_output.put_line(lt_version); dbms_output.put_line(oracle.nvl(compatibility,'NULL')); end; /
EXEC_DDL_STATEMENT
此过程在parse_string中执行DDL语句。
示例
declare l_result text := ''; begin dbms_output.serveroutput(True); dbms_utility.exec_ddl_statement('create table if not exists public.test_exec_ddl_stmt (id int, name text);'); end; /
GET_TIME
此函数返回当前时间的百分之一秒。两次调用返回时间之间的差异可测量两个时间点之间经过的总时间(不仅仅是CPU处理时间)
示例
DO $$ DECLARE start_time integer; end_time integer; BEGIN start_time := DBMS_UTILITY.GET_TIME(); PERFORM pg_sleep(2); end_time := DBMS_UTILITY.GET_TIME(); -- clamp long runtime on slow build machines to the 2s the testsuite is expecting IF end_time BETWEEN start_time + 300 AND start_time + 1000 THEN end_time := start_time + 250; END IF; RAISE NOTICE 'Execution time: % seconds', trunc((end_time - start_time)::numeric/100); END $$;
下面是DBMS_UTILITY的一个使用示例。
CREATE FUNCTION dbms_utility1_exe() RETURNS VOID AS $$ DECLARE s_StackTrace TEXT; v_hashvalue numeric(38,0); BEGIN s_StackTrace := DBMS_UTILITY.FORMAT_CALL_STACK(); RAISE NOTICE '%', s_StackTrace; v_hashvalue := DBMS_UTILITY.GET_HASH_VALUE('abcdef',0,10000); RAISE NOTICE 'v_hashvalue=%', v_hashvalue; END; $$ LANGUAGE plpgsql; CREATE FUNCTION dbms_utility2_exe() RETURNS VOID AS $$ BEGIN PERFORM dbms_utility1_exe(); END; $$ LANGUAGE plpgsql; SELECT dbms_utility2_exe(); DROP FUNCTION dbms_utility2_exe(); DROP FUNCTION dbms_utility1_exe(); declare l_result text := ''; begin dbms_output.serveroutput(True); dbms_utility.exec_ddl_statement('create table if not exists public.test_exec_ddl_stmt (id int, name text);'); l_result := dbms_metadata.get_ddl('table', 'test_exec_ddl_stmt'); dbms_output.put_line(l_result); dbms_utility.exec_ddl_statement(' truncate table public.test_exec_ddl_stmt'); dbms_output.put_line('truncate SUCCESS'); dbms_utility.exec_ddl_statement('drop table if exists public.test_exec_ddl_stmt ; '); dbms_output.put_line('drop SUCCESS'); end; /
概述
在lt_cron中安排和管理作业。
Table K.117. DBMS_JOB功能
功能 | 描述 |
---|---|
BROKEN | 禁用作业执行。(无效) |
CHANGE | 更改与作业关联的任何用户定义参数。 |
INSTANCE | 将作业分配给实例运行。(无效) |
INTERVAL | 更改指定作业的执行间隔。 |
NEXT_DATE | 更改指定作业的下一个执行时间。(无效) |
REMOVE | 从作业队列中删除指定的作业。 |
RUN | 强制指定的作业运行。(无效) |
SUBMIT | 向作业队列提交新作业。 |
USER_EXPORT | 为导出重新创建一个给定的作业。 |
WHAT | 更改指定作业的作业描述。 |
语法
CHANGE(job INT8,what TEXT,next_date TIMESTAMP,interval TEXT,instance INT4 default null,force BOOL default 'false') INTERVAL(job INT8,interval TEXT) REMOVE(job INT8) SUBMIT(job INT8,what TEXT,next_date TIMESTAMP default sysdate,interval TEXT default 'null',no_parse BOOL default 'false',instance INT4 default null,force BOOL default 'false') USER_EXPORT(job INT8,mycall TEXT) WHAT(job INT8,what TEXT)
本节解释了dbms_job的每个功能。
CHANGE
此过程更改用户可以在作业中设置的任何字段。
示例
dbms_job.change(l_job_id, 'select 3', sysdate, '0 11 * * *');
INTERVAL
此过程更改作业运行的频率。
interval参数格式是lt_cron的格式。
示例
dbms_job.interval(l_job_id, '0 11 * * *');
REMOVE
此过程从作业队列中删除现有作业。
示例
dbms_job.remove(2);
SUBMIT
此过程提交新作业。
此过程提交的作业将没有名称。 建议使用“select cron.Schedule(name,xxx)”提交。
示例
dbms_job.submit(l_job_id, 'select 1',sysdate, '0 10 * * *');
USER_EXPORT
生成重新创建给定作业的调用文本。
示例
dbms_job.user_export(2, l_result);
WHAT
此过程更改现有作业的操作。
示例
dbms_job.what(2, 'select 2');
下面是DBMS_JOB的一个使用示例。
declare l_job_id int8; l_result text := ''; begin dbms_output.serveroutput(true); -- use dbms_job.submit will not have jobname dbms_job.submit(l_job_id, 'select 1',sysdate, '0 10 * * *'); dbms_output.put_line('submit job, job id:'||l_job_id); dbms_job.user_export(l_job_id, l_result); dbms_output.put_line('user_export(job id'||l_job_id||'):'||l_result); -- update can't be used for job without name dbms_job.what(l_job_id, 'select 2'); dbms_job.user_export(l_job_id, l_result); dbms_output.put_line('after dbms_job.what user_export(job id:'||l_job_id||'):'||l_result); dbms_job.interval(l_job_id, '0 11 * * *'); dbms_job.user_export(l_job_id, l_result); dbms_output.put_line('after dbms_job.interval user_export(job id:'||l_job_id||'):'||l_result); dbms_job.change(l_job_id, 'select 3', sysdate, '0 11 * * *'); dbms_job.user_export(l_job_id, l_result); dbms_output.put_line('after dbms_job.change user_export(job id:'||l_job_id||'):'||l_result); dbms_job.next_date(l_job_id, sysdate); dbms_job.broken(l_job_id, True); dbms_job.instance(l_job_id, 10); dbms_job.run(l_job_id); dbms_job.remove(l_job_id); end; /
概述
提供锁管理服务的接口。
Table K.118. DBMS_LOCK功能
功能 | 描述 |
---|---|
sleep | 将一个会话置于休眠状态,等待特定时间。 |
语法
SLEEP(pi_seconds FLOAT8)
本节解释了dbms_job的每个功能。
SLEEP
此过程将暂停会话一段指定的时间。
暂停会话的时间以秒为单位。
示例
dbms_lock.sleep(0.1);
概述
为您提供了一种从数据库字典中检索元数据的方式。
Table K.119. DBMS_METADATA 功能
功能 | 描述 |
---|---|
get_ddl | 允许您获取对象的元数据。 |
语法
GET_DDL(object_type VARCHAR,name VARCHAR,schema VARCHAR DEFAULT current_schema(),VARCHAR DEFAULT 'COMPATIBLE',VARCHAR DEFAULT 'ORACLE',VARCHAR DEFAULT 'DDL',BOOL DEFAULT 'false') RETURNS TEXT
本节介绍了 dbms_job 的每个功能。
GET_DDL
允许您获取对象的元数据。
示例
select dbms_metadata.get_ddl('constraint', 'key1_check') from dual;
概述
启用应用程序使用数据加密标准(DES)或三重DES算法加密数据。
Table K.120. DBMS_OBFUSCATION_TOOLKIT 功能特性
功能 | 描述 |
---|---|
md5 | 生成数据的 MD5 哈希值。 |
语法
MD5(input_string TEXT) RETURNS RAW
本节介绍 dbms_job 的每个功能。
MD5
生成数据的 MD5 哈希值。
示例
select dbms_obfuscation_toolkit.md5(input_string => '测试')::text from dual;
概述
启用您刷新快照(MVIEW)。
Table K.121. DBMS_SNAPSHOT 功能特性
功能 | 描述 |
---|---|
refresh | 刷新快照列表。 |
语法
REFRESH(list TEXT,method TEXT default 'C')
本节介绍 dbms_job 的每个功能。
REFRESH
此过程刷新快照(MVIEW)列表。
示例
select dbms_snapshot.refresh('mv_test_dbms_snapshot,mv_test_dbms_snapshot1') from dual;
概述
在存储过程或匿名块中提供了一种执行动态sql的方法。
Table K.122. DBMS_SQL 功能特性
功能 | 描述 |
---|---|
OPEN_CURSOR | 返回一个游标句柄。 |
PARSE | 解析给定的SQL语句。 |
EXECUTE | 执行游标对应的SQL语句。 |
CLOSE_CURSOR | 关闭游标并释放内存。 |
语法
FUNCTION OPEN_CURSOR() RETURN INT; PROCEDURE PARSE(C INT, STMT VARCHAR2); PROCEDURE PARSE(C INT, STMT DBMS_SQL.VARCHAR2A, LB INT, UB INT, LFFLG BOOL, LANGUAGE_FLAG INT); FUNCTION EXECUTE(C INT) RETURN BIGINT; PROCEDURE CLOSE_CURSOR(C INT);
本节介绍 DBMS_SQL 的每个功能。
OPEN_CURSOR
返回一个游标句柄。
Example
cursor_sql integer; cursor_sql := dbms_sql.open_cursor;
PARSE
解析给定的SQL语句。
Example
vs_sql varchar2(200); vs_sql:='create or replace function f1(v int) RETURN int AS begin return v + 1; end;'; dbms_sql.parse(cursor_sql,vs_sql); vc_prosql dbms_sql.varchar2a; iIndex integer; iIndex := 1; vc_prosql(iIndex) := 'create or replace function f1(v int) RETURN int AS '; iIndex := iIndex + 1; vc_prosql(iIndex) := 'begin'; iIndex := iIndex + 1; vc_prosql(iIndex) := ' return v + 1;'; iIndex := iIndex + 1; vc_prosql(iIndex) := 'end;'; dbms_sql.parse(cursor_sql, vc_prosql, vc_prosql.first, vc_prosql.last, false, dbms_sql.native);
EXECUTE
执行游标对应的SQL语句。
Example
vn_ret int; vn_ret := dbms_sql.execute(cursor_sql);
CLOSE_CURSOR
关闭游标并释放内存。
Example
dbms_sql.close_cursor(cursor_sql);
以下是使用DBMS_SQL的一个完整案例。
DECLARE vc_prosql dbms_sql.varchar2a; cursor_sql integer; iIndex integer; vn_ret integer; BEGIN FOR i IN 1..2 LOOP cursor_sql := dbms_sql.open_cursor; vc_prosql.DELETE; iIndex := 1; vc_prosql(iIndex) := 'create or replace function f' || i || '(v int) RETURN int AS '; iIndex := iIndex + 1; vc_prosql(iIndex) := 'begin'; iIndex := iIndex + 1; vc_prosql(iIndex) := ' return v + ' || i || ';'; iIndex := iIndex + 1; vc_prosql(iIndex) := 'end;'; for j in 1..vc_prosql.last loop raise notice '%',vc_prosql(j); end loop; raise notice ''; dbms_sql.parse(cursor_sql, vc_prosql, vc_prosql.first, vc_prosql.last, false, dbms_sql.native); vn_ret := dbms_sql.execute(cursor_sql); dbms_sql.close_cursor(cursor_sql); END LOOP; END; /
概述
允许您收集优化器统计信息。
Table K.123. DBMS_STATS 功能
功能 | 描述 |
---|---|
gather_table_stats | 收集表、列和索引统计信息。 |
语法
GATHER_TABLE_STATS( ownname TEXT, tabname TEXT, partname TEXT DEFAULT NULL, estimate_percent NUMERIC DEFAULT NULL, block_sample BOOLEAN DEFAULT FALSE, method_opt TEXT DEFAULT NULL, degree NUMERIC DEFAULT NULL, granularity TEXT DEFAULT NULL, cascade BOOLEAN DEFAULT NULL, stattab TEXT DEFAULT NULL, statid TEXT DEFAULT NULL, statown TEXT DEFAULT NULL, no_invalidate BOOLEAN DEFAULT NULL, stattype TEXT DEFAULT NULL, force BOOLEAN DEFAULT FALSE, context TEXT DEFAULT NULL, options TEXT DEFAULT NULL )
本节介绍 dbms_stats 的每个功能。
GATHER_TABLE_STATS
此过程调用 ANALYZE 语句以收集表统计信息。
'ownname' 和 'tabname' 参数不能为空;它们是必需的。
目前,除了 'ownname'、'tabname' 和 'partname' 参数具有实际功能之外,其余参数均为了与 Oracle 兼容而设置,并没有实际功能。
当您成功执行了 GATHER_TABLE_STATS 之后,可通过 pg_statistic, pg_stat_all_tables, dba_tab_statistics 等视图来查询统计结果。
示例
begin DBMS_STATS.GATHER_TABLE_STATS( ownname => 'dbms_gather_test', tabname => 'dbms_stats_gather_test_1', degree => 4 ); end; /
概述
PL/pgSQL 可以写入和读取文本文件。
要执行这些文件操作,操作目标的目录必须预先在 UTL_FILE.UTL_FILE_DIR 表中注册。 作为数据库管理员或具有 INSERT 权限的用户,使用 INSERT 语句来注册目录。 此外,如果目录不再需要,请从相同的表中删除它。 有关如何注册和删除目录的信息,请参阅“注册和删除目录”。
在 PL/pgSQL 中,如下声明之后将解释的文件处理程序:
DECLARE f UTL_FILE.FILE_TYPE;
Table K.124. UTL_FILE 功能特性
功能 | 描述 |
---|---|
FCLOSE | 关闭文件。 |
FCLOSE_ALL | 关闭会话中打开的所有文件。 |
FCOPY | 复制整个文件或其连续部分。 |
FFLUSH | 刷新缓冲区。 |
FGETATTR | 检索文件的属性。 |
FOPEN | 打开文件。 |
FREMOVE | 删除文件。 |
FRENAME | 重命名文件。 |
FSEEK | 向前或向后按字节调整文件指针位置 |
GET_LINE | 从文本文件中读取一行。 |
IS_OPEN | 检查文件是否已打开。 |
NEW_LINE | 写入换行符。 |
PUT | 写入字符串。 |
PUT_LINE | 将换行符附加到字符串并将该字符串写入。 |
PUTF | 写入格式化字符串。 |
语法
FCLOSE(file utl_file.file_type) FCLOSE_ALL() FCOPY(srcDir text, srcFileName text, destDir text, destFileName text) FCOPY(srcDir text, srcFileName text, destDir text, destFileName text, startLine integer) FCOPY(srcDir text, srcFileName text, destDir text, destFileName text, startLine integer, endLine integer) FFLUSH(file utl_file.file_type) FGETATTR(dir text, fileName text, OUT fexists boolean, OUT file_length bigint, OUT blocksize integer) FOPEN(dir, fileName text, openMode text) return utl_file.file_type FOPEN(dir, fileName text, openMode text, maxLineSize integer) return utl_file.file_type FOPEN(dir, fileName text, openMode text, maxLineSize integer, encoding name) return utl_file.file_type FREMOVE(dir text, fileName text); FRENAME(srcDir text, srcFileName text,destDir text, destFileName text) FRENAME(srcDir text, srcFileName text,destDir text, destFileName text, overwrite boolean) FSEEK(file utl_file.file_type, absolute_offset bigint default null, relative_offset bigint default null) GET_LINE(file utl_file.file_type, OUT buffer text) GET_LINE(file utl_file.file_type, OUT buffer text, len integer) IS_OPEN(file utl_file.file_type) return boolean NEW_LINE(file utl_file.file_type) return boolean NEW_LINE(file utl_file.file_type,lines integer) return boolean PUT(file utl_file.file_type,str text) return boolean PUT(file utl_file.file_type,str anyelement) return boolean PUT_LINE(file utl_file.file_type, str text) PUT_LINE(file utl_file.file_type, str text, autoflush boolean) PUT_LINE(file utl_file.file_type, str anyelement) PUT_LINE(file utl_file.file_type, str anyelement, autoflush boolean) PUTF(file utl_file.file_type, fmt ) return boolean PUTF(file utl_file.file_type, fmt, arguments1 ) return boolean PUTF(file utl_file.file_type, fmt, arguments1, arguments2) return boolean PUTF(file utl_file.file_type, fmt, arguments1, arguments2, arguments3) return boolean PUTF(file utl_file.file_type, fmt, arguments1, arguments2, arguments3, arguments4) return boolean PUTF(file utl_file.file_type, fmt, arguments1, arguments2, arguments3, arguments4, arguments5) return boolean
注册目录
1. 检查目录是否已经注册(如果已经注册,则不需要执行第2步)。
SELECT * FROM UTL_FILE.UTL_FILE_DIR WHERE dir='/home/pgsql';
2. 注册目录。
INSERT INTO UTL_FILE.UTL_FILE_DIR VALUES('/home/pgsql');
删除目录
DELETE FROM UTL_FILE.UTL_FILE_DIR WHERE dir='/home/lightdb';
本节介绍 UTL_FILE 的每个功能。
FCLOSE
FCLOSE 用于关闭打开的文件。
指定一个打开的文件句柄。
示例
UTL_FILE.FCLOSE(f);
FCLOSE_ALL
FCLOSE_ALL 关闭会话中所有打开的文件。
使用 FCLOSE_ALL 关闭的文件将无法再进行读写操作。
示例
PERFORM UTL_FILE.FCLOSE_ALL();
FCOPY
FCOPY 可以复制整个文件或其连续部分。如果没有指定 startLine 和 endLine,则会复制整个文件。
指定源文件的目录位置。
指定源文件。
指定创建目标文件的目录。
指定目标文件的名称。
指定开始复制的行号。请指定大于0的值。如果没有指定,则使用1。
指定复制结束的行号。如果没有指定,则使用文件的最后一行。
示例
PERFORM UTL_FILE.FCOPY('/home/lightdb', 'regress_ltsql.txt', '/home/lightdb', 'regress_ltsql2.txt');
FFLUSH
FFLUSH 强制将缓冲数据写入文件。
指定一个打开的文件句柄。
示例
PERFORM UTL_FILE.FFLUSH(f);
FGETATTR
FGETATTR 用于检索文件属性: 文件是否存在, 文件大小以及有关文件块大小的信息。
指定文件所在的目录。
指定相关文件名。
表示文件是否存在的boolean值。如果文件存在,则将“fexists”设置为TRUE。如果文件不存在,则将“fexists”设置为FALSE。fexists的数据类型为BOOLEAN。
以字节为单位存储文件的长度。如果文件不存在,则为NULL。file_length的数据类型为INTEGER。
以字节为单位存储文件的块大小。如果文件不存在,则为NULL。blocksize的数据类型为INTEGER。
示例
eclare f utl_file.file_type; fexists boolean; file_length integer; blocksize integer; begin utl_file.fgetattr('DATA','LT_VERSION',fexists, file_length, blocksize); IF fexists then DBMS_OUTPUT.PUT_LINE('fexists IS: true'); ELSE DBMS_OUTPUT.PUT_LINE('fexists IS: false'); END IF; DBMS_OUTPUT.PUT_LINE('file_length IS:'||nvl(to_char(file_length),'[NULL]')); DBMS_OUTPUT.PUT_LINE('blocksize IS:'||nvl(to_char(blocksize),'[NULL]')); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('SQLCODE IS:'||SQLCODE); DBMS_OUTPUT.PUT_LINE('SQLERRM IS:'||SQLERRM); end; /
FOPEN
FOPEN打开一个文件。
指定文件所在的目录。
指定文件名。
指定打开文件的模式:
r:读取模式
w: 写入
a: 添加
指定可以在一次操作中处理的最大字符串长度(以字节为单位)。 如果省略,默认值为1024。指定1到32767之间的值。
每次会话最多可以同时打开50个文件。
示例
f := UTL_FILE.FOPEN('/home/pgsql','regress_pgsql.txt','r',1024);
FREMOVE
FREMOVE用于删除一个文件。
指定文件所在的目录。
指定文件名。
示例
PERFORM UTL_FILE.FREMOVE('/home/lightdb', 'regress_ltsql.txt');
FRENAME
FRENAME用于重命名文件。
指定源文件所在的目录位置。
指定要重命名的源文件。
指定要创建重命名文件的目录。
指定文件的新名称。
指定是否覆盖与重命名文件同名并位于同一位置的文件。如果指定为TRUE,则会覆盖现有文件。如果指定为FALSE,则会发生错误。如果省略,则设置为FALSE。
参见
请参考LightDB文档中的“SQL语言” > “数据类型” > “布尔类型”以获取关于布尔类型(TRUE/FALSE)值的信息。
示例
UTL_FILE.FRENAME('DATA', 'regress_ltsql.txt', 'DATA', 'regress_ltsql2.txt', TRUE);
FSEEK
FSEEK在文件中将文件指针向前或向后调整指定字节。
指定一个文件句柄。
指定移动的绝对值; 默认值为NULL.
指定向前或向后移动的相对偏移; 正数向前移动, 负数向后移动, 0,移动到当前位置,默认值为NULL
如果在指定的字节数之前到达文件的开头,则 文件指针放在文件的开头。如果在指定的字节数之前到达文件末尾,则会引发INVALID_OFFSET错误。
如果absolute_offset被指定,则过程寻址到以字节为单位的绝对位置。
See
Example
UTL_FILE.fseek(filehandle, 0);
GET_LINE
GET_LINE用于从文件中读取一行。
指定以r(读取)模式返回的FOPEN文件句柄。
指定从文件中读取的字节数。如果未指定,则将使用FOPEN中指定的最大字符串长度。
指定用于接收读取一行数据的缓冲区。
换行符不会被加载到缓冲区中。
如果加载的是空行,则返回NULL。
指定要读取的数据的最大长度(以字节为单位)。指定1到32767之间的值。如果未指定,则设置为FOPEN中指定的最大字符串长度。如果在FOPEN中未指定最大字符串长度,则设置为1024。
如果行长度大于要读取的指定字节数,则剩余部分将在下一次调用中读取。
当尝试读取最后一行之后的内容时,将会发生NO_DATA_FOUND异常。
示例
UTL_FILE.GET_LINE(f, buff);
IS_OPEN
IS_OPEN用于检查文件是否已经打开。
指定文件句柄。
返回值是BOOLEAN类型。TRUE表示打开状态,FALSE表示关闭状态。
参见
请参考LightDB文档中的“SQL语言” > “数据类型” > “布尔类型”以获取关于布尔类型(TRUE/FALSE)值的信息。
示例
IF UTL_FILE.IS_OPEN(f) THEN UTL_FILE.FCLOSE(f); END IF;
NEW_LINE
NEW_LINE用于写入一个或多个换行符。
指定一个打开的文件句柄。
指定要写入文件的换行符数量。如果省略,则使用“1”。
示例
PERFORM UTL_FILE.NEW_LINE(f, 2);
PUT
PUT用于将字符串写入文件。
指定使用w(写入)或a(追加)打开的FOPEN文件句柄。
指定要写入文件的字符串。
要写入的字符串的最大长度(以字节为单位)是在FOPEN中指定的最大字符串长度。
PUT不会追加换行符。如果要追加换行符,请使用NEW_LINE命令。
示例
PERFORM UTL_FILE.PUT(f, 'ABC');
PUT_LINE
PUT_LINE将一个换行符追加到字符串末尾,并将字符串写入文件。
指定使用w(写入)或a(追加)打开的FOPEN文件句柄。
指定是否强制写入文件。如果指定为TRUE,则会强制写入文件。如果指定为FALSE,则文件写入是异步的。如果省略,则设置为FALSE。
字符串的最大长度(以字节为单位)是在FOPEN中指定的最大字符串长度。
示例
UTL_FILE.PUT_LINE(f, 'ABC', TRUE);
PUTF
PUTF用于写入格式化的字符串。
指定使用w(写入)或a(追加)打开的FOPEN文件句柄。
指定格式,格式字符串中包含格式化字符 \n 和 %s。
格式字符串中的 \n 表示换行符。
输入值的数量必须与格式字符串中 %s 的数量相同。最多可以指定五个输入值。格式字符串中的 %s 将被相应的输入字符替换。如果没有指定与 %s 相应的输入值,则它将被替换为空字符串。
示例
PERFORM UTL_FILE.PUTF(f, '[1=%s, 2=%s, 3=%s, 4=%s, 5=%s]\n', '1', '2', '3', '4', '5');
在使用 UTL_FILE 时的流程和使用示例如下所示。
1. 准备
在开始使用 UTL_FILE 的新作业之前,请在 UTL_FILE.UTL_FILE_DIR 表中注册目录。
有关如何注册目录的信息,请参见“注册和删除目录”。
2. 执行作业
执行使用 UTL_FILE 的作业。以下是示例。
CREATE OR REPLACE procedure gen_file(mydir TEXT, infile TEXT, outfile TEXT, copyfile TEXT) as v1 VARCHAR(32767); inf UTL_FILE.FILE_TYPE; otf UTL_FILE.FILE_TYPE; BEGIN inf := UTL_FILE.FOPEN(mydir, infile,'r',256); otf := UTL_FILE.FOPEN(mydir, outfile,'w'); UTL_FILE.GET_LINE(inf, v1, 256); UTL_FILE.PUT_LINE(otf,v1,TRUE); UTL_FILE.GET_LINE(inf, v1, 256); PERFORM UTL_FILE.PUTF(otf,'%s\n',v1); UTL_FILE.GET_LINE(inf, v1, 256); PERFORM UTL_FILE.PUT(otf,v1); PERFORM UTL_FILE.NEW_LINE(otf); PERFORM UTL_FILE.FFLUSH(otf); UTL_FILE.FCLOSE(inf); UTL_FILE.FCLOSE(otf); PERFORM UTL_FILE.FCOPY(mydir, outfile, mydir, copyfile, 2, 3); UTL_FILE.FRENAME(mydir, outfile, mydir, 'rename.txt'); END; / BEGIN gen_file('DATA', 'input.txt', 'output.txt', 'copyfile.txt'); END; /
3. 后处理
如果你移除使用UTL_FILE的一个作业,需要从UTL_FILE.UTL_FILE_DIR表中删除该目录的信息。 确保在删除之前该目录的信息不再被其他作业使用。
参考"注册和删除目录"以获取有关如何删除该目录的信息。
概述
提供用于操作RAW数据类型的SQL函数。
Table K.125. UTL_RAW 特性
特性 | 描述 |
---|---|
BIT_AND | 对RAW r1和RAW r2中的值执行按位逻辑“与”操作,并返回“与”结果RAW。 |
BIT_COMPLEMENT | 对RAW r中的值执行按位逻辑“补码”操作,并返回“补码”结果RAW。 |
BIT_OR | 对RAW r1和RAW r2中的值执行按位逻辑“或”操作,并返回“或”结果RAW。 |
BIT_XOR | 对RAW r1和RAW r2中的值执行按位逻辑“异或”操作,并返回“异或”结果RAW。 |
CAST_FROM_BINARY_INTEGER | 返回BINARY_INTEGER值的RAW二进制表示。 |
CAST_FROM_NUMBER | 返回一个数字值的原始二进制表示。 |
CAST_TO_BINARY_INTEGER | 将一个BINARY_INTEGER的原始二进制表示转换为BINARY_INTEGER。 |
CAST_TO_NUMBER | 将一个数字的原始二进制表示转换为数字。 |
CAST_TO_RAW | 将一个文本值转换为一个RAW值。 |
CAST_TO_VARCHAR2 | 将一个RAW值转换为文本值。 |
COMPARE | 比较RAW r1和RAW r2。 |
CONCAT | 将最多12个RAW连接成一个RAW。 |
CONVERT | 将RAW r从字符集from_charset转换为字符集to_charset,返回结果RAW。 |
COPIES | 返回n个连接在一起的r的副本。 |
LENGTH | 返回RAW r的字节长度。 |
OVERLAY | 从目标RAW的字节位置pos开始,使用覆盖RAW覆盖目标RAW的指定部分,覆盖长度为len个字节。 |
REVERSE | 反转RAW r中的字节序列。 |
TRANSLITERATE | 根据从集合RAW from_set和集合RAW to_set中的字节,翻译输入RAW r中的字节。 |
TRANSLATE | 根据从集合RAW from_set和集合RAW to_set中的字节,转换输入RAW r中的字节。 |
XRANGE | 创建一系列RAW值,从start到end,步长为step。 |
XRANGE | 返回一个包含所有连续有效1字节编码的RAW,从start_byte开始,到end_byte结束。 |
语法
CAST_TO_VARCHAR2(r raw) RETURNS TEXT CAST_TO_RAW(c TEXT) RETURNS RAW CONCATr1 RAW,r2 RAW,r3 RAW,r4 RAW,r5 RAW,r6 RAW,r7 RAW,r8 RAW,r9 RAW,r10 RAW,r11 RAW,r12 RAW) RETURNS RAW LENGTH(r RAW) RETURNS INT4 SUBSTR(r RAW,pos INT4,len INT4 DEFAULT null) RETURNS RAW TRANSLITERATE(r RAW,to_set RAW DEFAULT ''::raw ,from_set RAW DEFAULT ''::raw,pad RAW DEFAULT '00'::raw) RETURNS RAW TRANSLATE(r RAW,from_set RAW,to_set RAW) RETURNS RAW COPIES(r RAW,n INT8) RETURNS RAW OVERLAY(overlay_str RAW,target RAW,pos INT4 DEFAULT 1,len INT4 DEFAULT NULL,pad RAW DEFAULT '00'::raw) RETURNS RAW XRANGE(start_byte RAW,end_byte RAW) RETURNS RAW REVERSE(r RAW) RETURNS RAW COMPARE(r1 RAW,r2 RAW,pad RAW) RETURNS INT4 CONVERT(r RAW,to_charset TEXT,from_charset TEXT) RETURNS RAW BIT_AND(r1 RAW,r2 RAW) RETURNS RAW BIT_OR(r1 RAW,r2 RAW) RETURNS RAW BIT_XOR(r1 RAW,r2 RAW) RETURNS RAW BIT_COMPLEMENT(r RAW) RETURNS RAW CAST_TO_NUMBER(r RAW)RETURNS NUMERIC CAST_FROM_NUMBER(n NUMERIC) RETURNS RAW CAST_TO_BINARY_INTEGER(r RAW,endianess INT)RETURNS INT4 CAST_FROM_BINARY_INTEGER(n INT4,endianess INT) RETURNS RAW
本节介绍dbms_job的每个功能。
CAST_TO_VARCHAR2
这个函数将一个使用一些数据字节表示的RAW值转换为一个具有相同数量数据字节的文本值。
示例
select utl_raw.cast_to_varchar2('43616D65726F6E') from dual;
CAST_TO_RAW
这个函数将一个使用一些数据字节表示的文本值转换为一个具有相同数量数据字节的RAW值。数据本身不做任何修改,但其数据类型被重新转换为RAW数据类型。
示例
select utl_raw.cast_to_raw('测试') from dual;
CONCAT
这个函数将最多12个RAW连接成一个RAW。
示例
select utl_raw.concat( '1', '0102', 'f', '1a2b' ) from dual;
LENGTH
这个函数返回RAW r的字节长度。
示例
select UTL_RAW.length('FFFF'::raw) from dual;
SUBSTR
如果pos为正数,则SUBSTR从r的开头开始计数以找到第一个字节。如果pos为负数,则SUBSTR从r的末尾开始向后计数。pos的值可以为0。
示例
select utl_raw.substr( '0102030405', 3, 2 ) from dual;
TRANSLITERATE
这个函数根据从集合RAW from_set和集合RAW to_set中的字节,转换输入RAW r中的字节。 r中的连续字节被查找from_set,在查找不到时,未更改地复制到结果RAW中。 如果找到,则它们将被对应的to_set中的字节或填充字节替换为结果RAW中,当没有对应关系时。
示例
select utl_raw.transliterate( '010203040502', '0709', '01020304', 'ff' ) from dual;
TRANSLATE
这个函数根据从集合RAW from_set和集合RAW to_set中的字节,转换输入RAW r中的字节。 如果r中的一个字节在from_set中有一个匹配字节,则它将被相应位置to_set中的字节替换,或删除。
示例
select utl_raw.translate( '0102030405', '0304', '09' ) from dual;
COPIES
这个函数返回n个r的副本,按顺序连接在一起。
示例
select utl_raw.copies( '010203', 3 ) from dual;
OVERLAY
OVERLAY函数将目标RAW的指定部分用overlay_str RAW替换,从目标的字节位置pos开始,继续len个字节。
如果overlay_str少于len个字节,则使用填充字节将其扩展到len个字节。如果overlay_str超过len个字节,则忽略overlay_str中的额外字节。 如果从目标的位置pos开始的len个字节超过了目标的长度,则目标被扩展以包含整个overlay_str的长度。
示例
select utl_raw.overlay( 'aabb', '010203', 5, 1, 'FF' ) from dual;
XRANGE
此函数返回一个RAW值,其中包含以指定字节代码开头和结尾的一字节编码的连续。
如果start_byte的值大于end_byte的值,则结果字节的连续开始于start_byte,通过x'FF'回到x'00',然后以end_byte结束。
示例
select utl_raw.xrange( 'FA', '01' ) from dual;
REVERSE
此函数将RAW r的字节序列从末尾到开头进行反转。例如,x'0102F3'将被反转为x'F30201',而'xyz'将被反转为'zyx'。 结果长度与输入RAW长度相同。
示例
select utl_raw.reverse( '010203040506070809' ) from dual;
COMPARE
此函数比较两个RAW值。如果它们的长度不同,则根据可选的填充参数在右侧扩展较短的值。
示例
select utl_raw.compare( '010203', '01020304', '04' ) from dual;
转换
此函数将RAW r从字符集from_charset转换为字符集to_charset,并返回转换后的RAW。
from_charset和to_charset必须是LightDB服务器定义的支持字符集。
示例
select utl_raw.convert(rawout('测试'::BYTEA)::text::raw,'GBK','UTF8') from dual;
BIT_AND
此函数对RAW r1和RAW r2中的值执行位逻辑“与”操作,并返回“与”结果RAW。 它是一个严格函数。
如果r1和r2长度不同,则两个RAW中长度较短的一个将通过添加'00'来扩展到相同的长度(这与Oracle不同)。
示例
select utl_raw.bit_and('1234ffdd','fff1234f') from dual;
BIT_OR
此函数对RAW r1和RAW r2中的值执行位逻辑“或”操作,并返回“或”结果RAW。 它是一个严格函数。
如果r1和r2长度不同,则两个RAW中长度较短的一个将通过添加'00'来扩展到相同的长度(这与Oracle不同)。
示例
select utl_raw.bit_or('1234ffdd','fff1234f') from dual;
BIT_XOR
此函数对RAW r1和RAW r2中的值执行位逻辑“异或”操作,并返回“异或”结果RAW。 它是一个严格函数。
如果r1和r2长度不同,则两个RAW中长度较短的一个将通过添加'00'来扩展到相同的长度(这与Oracle不同)。
示例
select utl_raw.bit_xor('1234ffdd','1234ffee') from dual;
BIT_COMPLEMENT
此函数对RAW r中的值执行位逻辑“补码”操作,并返回补码结果RAW。结果长度等于输入RAW r的长度。 它是一个严格函数。
示例
select UTL_raw.bit_complement('1122FF') from dual;
CAST_TO_NUMBER
此函数将NUMBER的RAW二进制表示转换为NUMBER。
示例
select utl_raw.cast_TO_number('C10215') from dual;
CAST_FROM_NUMBER
此函数返回NUMBER值的RAW二进制表示。
示例
select UTL_raw.cast_from_number(1.2) from dual;
CAST_TO_BINARY_INTEGER
此函数将整数的RAW二进制表示转换为整数。(Oracle中为BINARY_INTEGER)
示例
select utl_raw.cast_to_binary_integer('FF00') from dual;
CAST_FROM_BINARY_INTEGER
此函数返回整数值的RAW二进制表示。(Oracle中为BINARY_INTEGER)
示例
select utl_raw.cast_from_binary_integer(65280) from dual;
概述
有两个函数提供对URL字符进行转义和反转义的机制。
Table K.126. UTL_URL Features
特性 | 描述 |
---|---|
ESCAPE | 返回一个URL,其中的非法字符(可选保留字符)使用%2-digit-hex-code格式进行转义。 |
UNESCAPE | 将URL中的转义字符序列恢复为其原始形式。将%XX转义字符序列转换为原始字符。 |
语法
ESCAPE(url TEXT,escape_reserved_chars BOOL DEFAULT FALSE,url_charset TEXT DEFAULT 'UTF8') RETURNS TEXT UNESCAPE(url TEXT,url_charset TEXT DEFAULT 'UTF8') RETURNS TEXT
本节介绍dbms_job的每个特性。
ESCAPE
此函数返回一个URL,其中的非法字符(可选保留字符)使用%2-digit-hex-code格式进行转义。
示例
select utl_url.escape('http://新年好.com') from dual;
UNESCAPE
此函数将URL中的转义字符序列恢复为其原始形式,将%XX转义字符序列转换为原始字符。
示例
select utl_url.unescape('http%3A%2F%2F%E6%96%B0%E5%B9%B4%E5%A5%BD.com', 'utf8') from dual;
概述
提供将原始数据编码为标准编码格式的函数。
Table K.127. UTL_ENCODE 特性
特性 | 描述 |
---|---|
BASE64_DECODE | 读取 base64 编码的原始输入字符串,并将其解码为其原始的原始字符串值。 |
BASE64_ENCODE | 将原始值的二进制表示编码为 base 64 元素,并以原始字符串形式返回它。 |
MIMEHEADER_DECODE | 从 MIME 标头格式解码字符串。 |
MIMEHEADER_ENCODE | 将字符串编码为 MIME 标头格式。 |
QUOTED_PRINTABLE_DECODE | 读取文本 quoted printable 格式的输入字符串,并将其解码为相应的原始字符串。 |
QUOTED_PRINTABLE_ENCODE | 读取原始输入字符串并将其编码为相应的 quoted printable 格式字符串。 |
TEXT_DECODE | 解码一个字符集敏感的文本字符串。 |
TEXT_ENCODE | 编码一个字符集敏感的文本字符串。 |
UUDECODE | 读取原始 uuencode 格式的输入字符串,并将其解码为相应的原始字符串。 |
UUDECODE | 读取原始输入字符串并将其编码为相应的 uuencode 格式字符串。 |
语法
BASE64_DECODE(r RAW) RETURNS RAW BASE64_ENCODE(r RAW) RETURNS RAW MIMEHEADER_DECODE(buf TEXT) RETURNS TEXT MIMEHEADER_ENCODE(buf TEXT,encode_charset TEXT default 'UTF8'::text,encoding INT4 default 2::int4) RETURNS TEXT QUOTED_PRINTABLE_DECODE(r RAW) RETURNS RAW QUOTED_PRINTABLE_ENCODE(r RAW) RETURNS RAW TEXT_DECODE(buf TEXT,encode_charset TEXT default 'UTF8'::text,encoding INT4 default 2::int4) RETURNS TEXT TEXT_ENCODE(buf TEXT,encode_charset TEXT default 'UTF8'::text,encoding INT4 default 2::int4) RETURNS TEXT UUDECODE(r RAW) RETURNS RAW UUENCODE(r RAW,type INT default 1::int,filename TEXT default 'uuencode.txt',permission TEXT default '0') RETURNS RAW
本节介绍 dbms_job 的每个特性。
BASE64_DECODE
此函数读取 base64 编码的原始输入字符串,并将其解码为其原始的原始字符串值。
示例
select utl_encode.base64_decode('3572574C364B2B56') from dual;
BASE64_ENCODE
此函数将原始值的二进制表示编码为 base 64 元素,并以原始字符串形式返回它。
示例
select utl_encode.base64_encode(rawtohex('测试')::raw) from dual;
MIMEHEADER_DECODE
从 MIME 标头格式('=?<charset> ?<encoding> ?<encoded text>?= ')解码字符串。
示例
select UTL_ENCODE.mimeheader_decode('=?UTF-8?Q?What=20is=20the=20date=20=E7=8E=8B=20=3D20=20/=20\=3F?=') from dual;
MIMEHEADER_ENCODE
此函数生成一个形式为('=?<charset> ?<encoding> ?<encoded text>?= ')的“编码单词”作为输出。
ENCODING 输入参数接受 UTL_ENCODE.QUOTED_PRINTABLE 或 UTL_ENCODE.BASE64 或 NULL 作为有效值。如果为 NULL,则选择 quoted-printable 编码作为默认值。
<charset> 值作为输入参数 encode_charset 指定。
示例
select utl_encode.MIMEHEADER_ENCODE('What is the date 王 =20 / \?', encode_charset =>'UTF8', encoding => 1 ) from dual;
QUOTED_PRINTABLE_DECODE
该函数读取原始的 quoted printable 格式的输入字符串,并将其解码为相应的原始字符串。
示例
select utl_encode.quoted_printable_decode('3D45353D42453D3830313233345C61732064663D33444142') from dual;
QUOTED_PRINTABLE_ENCODE
此函数将读取原始输入字符串并将其编码为相应的Quoted-Printable格式字符串。
示例
select utl_encode.quoted_printable_decode('3D45353D42453D3830313233345C61732064663D33444142') from dual;
TEXT_DECODE
此函数将把输入的文本转换为目标字符集,该字符集由encode_charset参数指定,如果encode_charset参数不为NULL。编码后的文本将被转换为数据库的基本字符集。
您可以根据每个编码参数选择解码Quoted-Printable或Base64格式。 1表示Base64编码,2表示Quoted-Printable编码,默认为Quoted-Printable格式。
示例
select utl_encode.text_decode('=CD=F91234\as df=3DAB',encode_charset => 'GBK',encoding => 2) from dual;
TEXT_ENCODE
此函数将把输入的文本转换为目标字符集,该字符集由encode_charset参数指定,如果encode_charset参数不为NULL。文本将根据encoding参数指定的格式编码为Base64或Quoted-Printable格式。
示例
select utl_encode.text_encode('往12\as df=AB',encode_charset => 'GBK', encoding => 1) from dual;
UUDECODE
此函数将读取RAW Uuencode格式的输入字符串并将其解码为相应的RAW字符串。
示例
select UTL_ENCODE.uudecode(rawtohex(',6[C9&5FA$R,S0`')::raw) from dual;
UUENCODE
此函数将读取原始输入字符串并将其编码为相应的Uuencode格式字符串。
示例
select UTL_ENCODE.uuencode('5BB8D91959A113233340'::raw) from dual;
大多数事务行为都是完全相同的,但以下内容不同。
create table t (a int primary key, b int); begin; insert into t values(1,1); insert into t values(1, 1); commit;
Oracle:提交操作可能会成功。这之后,t表将有1行记录。
LightDB:由于第二个插入操作失败,提交失败。因此,t表没有任何记录。
情况1:
create table dml(a int, b int); insert into dml values(1, 1), (2,2); -- session 1: begin; delete from dml where a in (select min(a) from dml); --session 2: delete from dml where a in (select min(a) from dml); -- session 1: commit;
在Oracle中:sess2中删除了1行记录。因此最终dml中没有任何记录。
在LightDB中:sess2中没有删除任何记录,因此最终dml中有1行记录。
Oracle可能会检测到min(a)已更改,然后回滚/重新运行该语句。
相同的原因也可能导致以下不同之处。
create table su (a int, b int); insert into su values(1, 1); - session 1: begin; update su set b = 2 where b = 1; - sess 2: select * from su where a in (select a from su where b = 1) for update; - sess 1: commit;
在Oracle中,未选择任何记录。在LightDB中,选择了1行记录(1,2)。
最佳实践是在DML和SELECT ... FOR UPDATE中永远不要使用子查询。即使在Oracle中,行为也不一致。在Oracle 11.2.0.1和11.2.0.3之间,可能的行为与LightDB相同,但其他版本则不同。
这些视图基于Oracle 11g,但一些视图包含新版本的一些字段。
视图在Oracle和sys模式下创建。
为了与Oracle兼容,以下视图具有与Oracle中相应视图相同的字段,但对于那些无法获取或难以获取其字段值的字段返回NULL值。
支持的字段如下所示。某些字段的含义与Oracle不同。
DBA_SEQUENCES描述了数据库中的所有序列。
ALL_SEQUENCES视图目前与DBA_SEQUENCES视图相同,并且不像Oracle那样进行权限验证。
USER_SEQUENCES描述了当前用户拥有的所有序列。
Table K.128. ALL_SEQUENCES
列名 |
描述 |
---|---|
SEQUENCE_OWNER |
序列所有者 |
SEQUENCE_NAME |
序列名称 |
MIN_VALUE |
序列的最小值 |
MAX_VALUE |
序列的最大值 |
INCREMENT_BY |
序列增加的值 |
CYCLE_FLAG |
指示序列在达到限制时是否循环(Y)或不循环(N) |
ORDER_FLAG |
指示序列号是否按顺序生成(Y)或不按顺序生成(N)。在LightDB下,始终为Y。 |
CACHE_SIZE |
缓存的序列号数量 |
LAST_NUMBER |
写入磁盘的最后一个序列号。 |
LightDB尚不支持SYNONYMS,因此这些视图目前为空。
DBA_TAB_COLS描述了数据库中所有表和视图的列。
ALL_TAB_COLS视图目前与DBA_TAB_COLS视图相同,并且不像Oracle那样进行权限验证。
USER_TAB_COLS描述了当前用户拥有的表和视图的列。此视图不显示OWNER列。
COLS与USER_TAB_COLS相同。
DBA_TAB_COLUMNS描述了数据库中所有表和视图的列。
ALL_TAB_COLUMNS视图目前与DBA_TAB_COLUMNS视图相同,并且不像Oracle那样进行权限验证。
USER_TAB_COLUMNS描述了当前用户拥有的表和视图的列。此视图不显示OWNER列。
[DBA/ALL/USER]_TAB_COLS视图与[DBA/ALL/USER]_TAB_COLUMNS视图不同,因为不会过滤隐藏列(HIDDEN_COLUMN,VIRTUAL_COLUMN,SEGMENT_COLUMN_ID,INTERNAL_COLUMN_ID)。
Table K.129. ALL_TAB_COLS
列名 |
描述 |
---|---|
OWNER |
表、视图的所有者 |
TABLE_NAME |
表、视图的名称 |
COLUMN_NAME |
列名 |
DATA_TYPE |
列的数据类型 |
DATA_TYPE_OWNER |
列的数据类型的所有者 |
DATA_LENGTH |
列的长度(字符类型单位为字符数;其他类型为字节数,对于number/numeric 类型,长度总是22) |
DATA_PRECISION |
NUMBER数据类型的小数精度;FLOAT数据类型的二进制精度;其他数据类型的值为NULL。 |
DATA_SCALE |
小数点右侧的数字位数 |
NULLABLE |
指示列是否允许为空。如果列有NOT NULL约束或列是主键的一部分,则值为N。 |
COLUMN_ID |
列的创建顺序号 |
DEFAULT_LENGTH |
列默认值的长度 |
DATA_DEFAULT |
列的默认值 |
NUM_DISTINCT |
列中不同值的数量 |
NUM_NULLS |
列中的空值数量 |
AVG_COL_LEN |
列的平均长度(单位为字节) |
CHAR_LENGTH |
显示列的字符长度 |
CHAR_USED |
指示列使用字节长度语义(B)或字符长度语义(C),或者数据类型不是以下任何一种(NULL) |
DBA_TAB_COL_STATISTICS包含从"DBA_TAB_COLUMNS"中提取的列统计信息和直方图信息。它的列与"ALL_TAB_COL_STATISTICS"中的列相同。
ALL_TAB_COL_STATISTICS视图目前与DBA_SEQUENCES视图相同,且不像Oracle那样进行权限验证。
USER_TAB_COL_STATISTICS显示从“USER_TAB_COLUMNS”提取的此类信息。该视图不显示OWNER列。
Table K.130. ALL_TAB_COL_STATISTICS
Column |
Description |
---|---|
OWNER |
表的所有者 |
TABLE_NAME |
表的名称 |
COLUMN_NAME |
列名称 |
NUM_DISTINCT |
列中不同值的数量 |
NUM_NULLS |
列中NULL的数量 |
AVG_COL_LEN |
列的平均长度(字节为单位) |
DBA_OBJECTS描述了数据库中的所有对象。其列与“ALL_OBJECTS”中的列相同。
ALL_OBJECTS视图目前与DBA_OBJECTS视图相同,且不像Oracle那样进行权限验证。
USER_OBJECTS描述了当前用户拥有的所有对象。该视图不显示OWNER列。
OBJ与USER_OBJECTS相同。
Table K.131. ALL_OBJECTS
Column |
Description |
---|---|
OWNER |
对象的所有者 |
OBJECT_NAME |
对象的名称 |
SUBOBJECT_NAME |
子对象的名称(例如,分区),如果不存在则为NULL |
OBJECT_ID |
对象的字典对象编号 |
DATA_OBJECT_ID |
包含该对象的段的字典对象编号 |
OBJECT_TYPE |
对象的类型 |
STATUS |
对象的状态:VALID,INVALID |
TEMPORARY |
表示对象是否为临时对象(当前会话只能看到自己放置在该对象中的数据)(Y)或不是(N) |
DBA_CATALOG列出数据库中的所有表、视图和序列(不包括聚簇和同义词)。
ALL_CATALOG视图目前与DBA_CATALOG视图相同,且不像Oracle那样进行权限验证。
USER_OCATALOG 显示当前用户模式中的表、视图和序列。
Oracle 视图中的所有列都得到支持。
Table K.132. ALL_CATALOG
列名 |
描述 |
---|---|
OWNER |
表、视图或序列的拥有者 |
TABLE_NAME |
表、视图或序列的名称 |
TABLE_TYPE |
表、视图或序列的类型 |
DICTIONARY/DICT 包含数据字典表和视图的描述。
Table K.133. DICTIONARY
Column |
Description |
---|---|
TABLE_NAME |
对象的名称 |
COMMENTS |
对象的文本注释 |
DBA_DEPENDENCIES 描述了数据库中所有过程、包、函数、包体和触发器之间的依赖关系,包括对未使用任何数据库链接创建的视图的依赖关系。 该视图不会显示 SCHEMAID 列。
ALL_DEPENDENCIES视图目前与DBA_DEPENDENCIES视图相同,并且不像Oracle一样进行权限验证。
USER_DEPENDENCIES描述了当前用户模式中对象之间的依赖关系。此视图不显示OWNER列。
Table K.134. ALL_DEPENDENCIES
列名 |
描述 |
---|---|
OWNER |
对象的所有者 |
NAME |
对象的名称 |
类型 |
对象的类型 |
REFERENCED_OWNER |
引用对象的所有者(如果是远程对象,则为远程所有者) |
REFERENCED_NAME |
引用对象的名称 |
REFERENCED_TYPE |
引用对象的类型 |
DEPENDENCY_TYPE |
依赖关系的类型(oracle: 表示依赖关系是否为REF依赖关系(REF),或者不是(HARD)) |
DBA_SOURCE描述数据库中所有存储对象的文本来源。
ALL_SOURCE视图目前与DBA_SOURCE视图相同,且没有像oracle那样进行权限验证。
USER_SOURCE描述当前用户所拥有的存储对象的文本来源。此视图不显示OWNER列。
Table K.135. ALL_SOURCE
列名 |
描述 |
---|---|
OWNER |
对象的所有者 |
NAME |
对象的名称 |
TYPE |
对象类型:FUNCTION,PACKAGE,PACKAGE BODY,PROCEDURE,TRIGGER |
LINE |
此行源代码的行号 |
TEXT |
存储对象的文本来源 |
DBA_PROCEDURES列出所有函数和过程,以及相关属性。
ALL_PROCEDURES视图目前与DBA_PROCEDURES视图相同,且没有像oracle那样进行权限验证。
USER_PROCEDURES列出当前用户拥有的所有函数和过程,以及相关属性。它不包含OWNER列。
这些视图指示函数是否为管道化函数、并行启用或聚合函数。如果函数是管道化函数或聚合函数,则还会确定相关的实现类型(如果有)。
Table K.136. ALL_PROCEDURES
列名 |
描述 |
---|---|
OWNER |
过程的所有者 |
OBJECT_NAME |
对象名称:顶层函数、过程或包名称 |
OBJECT_ID |
对象的对象编号 |
OBJECT_TYPE |
对象类型的名称 |
AGGREGATE |
指示过程是否为聚合函数(YES)还是不是(NO) |
PARALLEL |
指示过程或函数是否启用并行(YES)还是不启用(NO) |
DETERMINISTIC |
如果过程/函数被声明为确定性的,则为YES;否则为NO |
DBA_TRIGGERS描述数据库中的所有触发器。
ALL_TRIGGERS视图目前与DBA_TRIGGERS视图相同,且没有像oracle那样进行权限验证。
USER_TRIGGERS描述当前用户拥有的触发器。
Table K.137. ALL_TRIGGERS
列名 |
描述 |
---|---|
OWNER |
触发器的所有者 |
TRIGGER_NAME |
触发器名称 |
TRIGGER_TYPE |
触发器触发的时间:BEFORE STATEMENT,BEFORE EACH ROW,AFTER STATEMENT,AFTER EACH ROW,INSTEAD OF EACH ROW |
TRIGGERING_EVENT |
触发触发器的DML |
TABLE_OWNER |
定义触发器的表的所有者 |
BASE_OBJECT_TYPE |
定义触发器的基础对象:TABLE,VIEW |
TABLE_NAME |
指示定义触发器的表或视图名称 |
REFERENCING_NAMES |
在触发器内部用于引用OLD和NEW列值的名称 |
WHEN_CLAUSE |
必须为TRUE才能执行TRIGGER_BODY |
STATUS |
指示触发器是否启用(ENABLED)或禁用(DISABLED);禁用的触发器将不会触发 |
ACTION_TYPE |
触发器主体的操作类型:'PL/SQL' |
TRIGGER_BODY |
触发器触发时执行的语句 |
BEFORE_STATEMENT |
指示触发器是否有BEFORE STATEMENT部分(YES)或没有(NO) |
BEFORE_ROW |
指示触发器是否有BEFORE EACH ROW部分(YES)或没有(NO) |
AFTER_ROW |
指示触发器是否有AFTER EACH ROW部分(YES)或没有(NO) |
AFTER_STATEMENT |
指示触发器是否有AFTER STATEMENT部分(YES)或没有(NO) |
INSTEAD_OF_ROW |
指示触发器是否有INSTEAD OF部分(YES)或没有(NO) |
DBA_TRIGGER_COLS描述数据库中所有触发器中列的使用情况。
ALL_TRIGGER_COLS视图目前与DBA_TRIGGER_COLS视图相同,且没有像oracle那样进行权限验证。
USER_TRIGGER_COLS描述当前用户拥有的触发器中列的使用情况,以及当前用户所拥有的表上的触发器中列的使用情况。
Table K.138. ALL_TRIGGER_COLS
列名 |
描述 |
---|---|
TRIGGER_OWNER |
触发器的所有者 |
TRIGGER_NAME |
触发器的名称 |
TABLE_OWNER |
定义触发器的表的所有者 |
TABLE_NAME |
定义触发器的表的名称 |
COLUMN_NAME |
在触发器中使用的列的名称 |
DBA_TYPES描述数据库中的所有对象类型。
ALL_TYPES视图目前与DBA_TYPES视图相同,且没有像oracle那样进行权限验证。
USER_TYPES描述当前用户所拥有的对象类型。此视图不显示OWNER列。
Table K.139. ALL_TYPES
列名 |
描述 |
---|---|
OWNER |
类型的所有者 |
TYPE_NAME |
类型名称 |
TYPE_OID |
类型的对象标识符(OID) |
TYPECODE |
类型的类型码(Typecode) |
PREDEFINED |
指示该类型是否为预定义类型(YES)或不是(NO) |
DBA_CONSTRAINTS描述了数据库中所有约束的定义。
ALL_CONSTRAINTS视图目前与DBA_CONSTRAINTS视图相同,并且不像 Oracle 那样进行权限验证。
USER_CONSTRAINTS描述当前用户模式中表上的约束定义。
Table K.140. ALL_CONSTRAINTS
字段 |
描述 |
---|---|
OWNER |
约束定义的所有者 |
CONSTRAINT_NAME |
约束定义的名称 |
CONSTRAINT_TYPE |
约束定义的类型 c - 表上的 Check 约束 p - 主键 u - 唯一键 f - 涉及 REF 列的约束 t - 触发器约束 t - 排它性约束 |
TABLE_NAME |
与约束定义关联的表(或视图)的名称 |
SEARCH_CONDITION |
Check 约束的搜索条件文本 |
R_OWNER |
引用约束中所涉及的表的所有者 |
DELETE_RULE |
引用约束的删除规则:'NO ACTION'、'RESTRICT'、'CASCADE'、'SET NULL'、'SET DEFAULT' |
STATUS |
约束的执行状态:'ENABLED'、'DISABLED' |
DEFERRABLE |
指示约束是否可延迟(DEFERRABLE)或不可延迟(NOT DEFERRABLE) |
DEFERRED |
指示约束是否最初被延迟(DEFERRED)或不是(IMMEDIATE) |
VALIDATED |
约束是否已验证?目前,仅对外键和 CHECK 约束可以为 false |
INDEX_OWNER |
拥有该索引的用户名称 |
INDEX_NAME |
索引的名称(仅对唯一、主键、外键或排它性约束显示) |
INVALID |
指示约束是否无效(INVALID)或不是(NULL) |
DBA_CONS_COLUMNS描述了数据库中在约束中指定的所有列。
ALL_CONS_COLUMNS视图目前与DBA_CONS_COLUMNS视图相同,并且不像 Oracle 那样进行权限验证。
USER_CONS_COLUMNS描述了当前用户拥有并在约束中指定的列。
Oracle支持所有列类型。
Table K.141. ALL_CONS_COLUMNS
字段 |
描述 |
---|---|
OWNER |
约束定义的所有者 |
CONSTRAINT_NAME |
约束定义的名称 |
TABLE_NAME |
约束定义所在的表名称 |
COLUMN_NAME |
约束定义中指定的列或对象类型列的属性名称 |
POSITION |
列或属性在对象定义中的原始位置 |
DBA_VIEWS描述了数据库中的所有视图。
ALL_VIEWS视图目前与DBA_VIEWS视图相同,并且不像 Oracle 那样进行权限验证。
USER_VIEWS描述当前用户拥有的视图。该视图不显示OWNER列。
Table K.142. ALL_VIEWS
字段 |
描述 |
---|---|
OWNER |
视图的所有者 |
VIEW_NAME |
视图的名称 |
TEXT_LENGTH |
视图文本的长度 |
TEXT |
视图文本 |
DBA_ALL_TABLES描述了数据库中的所有对象表和关系表。
ALL_ALL_TABLES视图目前与DBA_ALL_TABLES视图相同,并且不像 Oracle 那样进行权限验证。
USER_ALL_TABLES描述当前用户拥有的对象表和关系表。该视图不显示OWNER列。
[DBA/ALL/USER]_TABLES视图不显示OBJECT_ID_TYPE、TABLE_TYPE_OWNER和TABLE_TYPE列。
[DBA/ALL/USER]_TABLES有RESULT_CACHE列,但[DBA/ALL/USER]_ALL_TABLES没有。
TABS与USER_TABLES相同。
Table K.143. ALL_ALL_TABLES
字段 |
描述 |
---|---|
OWNER |
表的所有者 |
TABLE_NAME |
表的名称 |
TABLESPACE_NAME |
表所在表空间的名称。 |
LOGGING |
表示表的更改是否被记录日志。 |
NUM_ROWS |
表中的行数。 |
BLOCKS |
表中已使用的块数。 |
AVG_ROW_LEN |
平均行长度,包括行开销。 |
LAST_ANALYZED |
表最近分析日期。 |
PARTITIONED |
表示表是否被分区(YES)或未被分区(NO)。 |
TEMPORARY |
表示表是否为临时表(Y)或非临时表(N)。 |
ROW_MOVEMENT |
如果表被分区,表示行移动是否启用(ENABLED)或禁用(DISABLED)。 总是为“ENABLE”。 |
DBA_TAB_STATISTICS 显示数据库中所有表的优化器统计信息。
ALL_TAB_STATISTICS 视图目前与 DBA_TAB_STATISTICS 视图相同,而且不像 Oracle 那样进行权限验证。
USER_TAB_STATISTICS 显示当前用户拥有的表的优化器统计信息。此视图不显示 OWNER 列。
[DBA/ALL/USER]_TABLES 视图不显示 OBJECT_ID_TYPE、TABLE_TYPE_OWNER 和 TABLE_TYPE 列。
除了下表中列出的字段外,其余字段都只会返回默认值,无实际含义。
Table K.144. ALL_TAB_STATISTICS
列名 |
描述 |
---|---|
OWNER |
对象的所有者。 |
TABLE_NAME |
表名。 |
TABLESPACE_NAME |
表所在表空间的名称。 |
PARTITION_NAME |
分区名称。 |
PARTITION_POSITION |
分区在表中的位置。 |
OBJECT_TYPE |
对象类型:TABLE、PARTITION、SUBPARTITION。 |
NUM_ROWS |
对象中的行数。 |
BLOCKS |
对象中已使用的块数。 |
AVG_ROW_LEN |
平均行长度,包括行开销。 |
LAST_ANALYZED |
表最近分析日期。 |
DBA_TAB_COMMENTS 显示数据库中所有表和视图的注释。
ALL_TAB_COMMENTS 视图目前与 DBA_TAB_COMMENTS 视图相同,而且不像 Oracle 那样进行权限验证。
USER_TAB_COMMENTS 显示当前用户拥有的表和视图的注释。此视图不显示 OWNER 列。
Table K.145. ALL_TAB_COMMENTS
列名 |
描述 |
---|---|
OWNER |
对象的所有者。 |
TABLE_NAME |
对象名称。 |
TABLE_TYPE |
对象类型。 |
COMMENTS |
对象注释。 |
DBA_COL_COMMENTS 显示数据库中所有表和视图列的注释。
ALL_COL_COMMENTS 视图目前与 DBA_COL_COMMENTS 视图相同,且不像 Oracle 一样进行权限验证。
USER_COL_COMMENTS显示当前用户拥有的表和视图的列的注释。该视图不显示OWNER列。
Table K.146. ALL_COL_COMMENTS
列名 |
描述 |
---|---|
OWNER |
对象的所有者 |
TABLE_NAME |
对象的名称 |
COLUMN_NAME |
列的名称 |
COMMENTS |
列的名称 |
DBA_TAB_MODIFICATIONS 描述数据库中所有表的此类信息。
ALL_TAB_MODIFICATIONS 视图目前与 DBA_TAB_MODIFICATIONS 视图相同,且不像 Oracle 一样进行权限验证。
USER_TAB_MODIFICATIONS 描述当前用户拥有的表的此类信息。此视图不会显示 TABLE_OWNER 列。
Table K.147. ALL_TAB_MODIFICATIONS
列名 |
描述 |
---|---|
TABLE_OWNER |
被修改表的所有者 |
TABLE_NAME |
被修改表的名称 |
INSERTS |
最近一次收集统计信息以来插入的近似数量 |
UPDATES |
最近一次收集统计信息以来更新的近似数量 |
DELETES |
最近一次收集统计信息以来删除的近似数量 |
TIMESTAMP |
指示表上一次被修改的时间 |
DBA_INDEXES 描述数据库中的所有索引。
ALL_INDEXES视图当前与DBA_INDEXES视图相同,且不像oracle那样进行权限验证。
USER_INDEXES描述当前用户拥有的索引。该视图不显示OWNER列。
IND与USER_INDEXES相同。
Table K.148. ALL_INDEXES
列 |
描述 |
---|---|
OWNER |
索引的所有者 |
INDEX_NAME |
索引的名称 |
INDEX_TYPE |
索引的类型,始终为NORMAL |
TABLE_OWNER |
索引对象的所有者 |
TABLE_NAME |
索引对象的名称 |
TABLE_TYPE |
索引对象的类型:TABLE, VIEW, INDEX, SEQUENCE |
UNIQUENESS |
指示索引是否唯一(UNIQUE)或非唯一(NONUNIQUE) |
TABLESPACE_NAME |
包含该索引的表空间名称 |
LOGGING |
指示索引更改是否记录:'YES', 'NO' |
DISTINCT_KEYS |
索引值的不同数量 |
STATUS |
指示非分区索引是否有效(VALID)或无用(UNUSABLE) |
NUM_ROWS |
索引中的行数 |
LAST_ANALYZED |
此索引最近分析的日期 |
PARTITIONED |
指示索引是否已分区(YES)或未分区(NO) |
TEMPORARY |
指示索引是否在临时表上(Y)或不在(N) |
DBA_INDEX_USAGE 显示每个索引的累计统计信息。
ALL_INDEX_USAGE 视图与 DBA_INDEX_USAGE 视图相同(该视图在 Oracle 中不存在)。
USER_INDEX_USAGE 描述当前用户拥有的每个索引的累计统计信息(该视图在 Oracle 中不存在)。此视图不显示 OWNER 列。
Table K.149. DBA_INDEX_USAGE
列名 |
描述 |
---|---|
OBJECT_ID |
索引的对象 ID |
NAME |
索引名称 |
OWNER |
索引所有者 |
TOTAL_ACCESS_COUNT |
索引被访问的总次数 |
TOTAL_ROWS_RETURNED |
索引返回的总行数 |
DBA_IND_COLUMNS 描述数据库中所有表的索引列。
ALL_IND_COLUMNS 视图目前与 DBA_IND_COLUMNS 视图相同,而且与 Oracle 一样,不进行权限验证。
USER_IND_COLUMNS 描述当前用户拥有的索引列以及当前用户拥有的表上的索引列。此视图不显示 INDEX_OWNER 或 TABLE_OWNER 列。
Table K.150. ALL_IND_COLUMNS
列名 |
描述 |
---|---|
INDEX_OWNER |
索引所有者 |
INDEX_NAME |
索引名称 |
TABLE_OWNER |
表的所有者 |
TABLE_NAME |
表名称 |
COLUMN_NAME |
列名或对象类型列属性 |
COLUMN_POSITION |
列或属性在索引中的位置 |
COLUMN_LENGTH |
列的索引长度, 对于number/numeric 类型,长度总是22 |
CHAR_LENGTH |
列的最大代码点长度 |
DESCEND |
指示列是否按降序(DESC)或升序(ASC)排序 |
DBA_IND_EXPRESSIONS 描述数据库中所有基于函数的索引的表达式。
ALL_IND_EXPRESSIONS视图目前与DBA_IND_COLUMNS视图相同,且与Oracle一样不进行权限验证。
USER_IND_EXPRESSIONS描述当前用户拥有的表上基于函数的索引的表达式。该视图不显示INDEX_OWNER或TABLE_OWNER列。
Table K.151. ALL_IND_EXPRESSIONS
列名 |
描述 |
---|---|
INDEX_OWNER |
索引所属者 |
INDEX_NAME |
索引名称 |
TABLE_OWNER |
表所属者 |
TABLE_NAME |
表名称 |
COLUMN_EXPRESSION |
定义列的基于函数的索引表达式 |
COLUMN_POSITION |
列或属性在索引中的位置 |
DBA_IND_STATISTICS显示数据库中所有索引的优化器统计信息。
ALL_IND_STATISTICS视图目前与DBA_IND_STATISTICS视图相同,且与Oracle一样不进行权限验证。
USER_IND_STATISTICS显示当前用户拥有的表上索引的优化器统计信息。该视图不显示OWNER列。
Table K.152. ALL_IND_STATISTICS
列名 |
描述 |
---|---|
OWNER |
索引所属者 |
INDEX_NAME |
索引名称 |
TABLE_OWNER |
索引对象所属者 |
TABLE_NAME |
索引对象名称 |
PARTITION_NAME |
定义列的基于函数的索引表达式 |
PARTITION_POSITION |
列或属性在索引中的位置 |
OBJECT_TYPE |
对象类型:INDEX,PARTITION 现在始终为“INDEX”,因为该视图不会获取分区信息 |
DISTINCT_KEYS |
索引中不同键的数量 |
NUM_ROWS |
索引中的行数 |
LAST_ANALYZED |
最近一次分析索引的日期 |
DBA_USERS描述数据库中的所有用户,并包含比ALL_USERS更多的列。
ALL_USERS 列出数据库中的所有用户(USERNAME,USER_ID,CREATED),但不像 Oracle 那样进行权限验证。
USER_USERS 描述当前用户,并包含比 ALL_USERS 更多的列。
Table K.153. DBA_USERS
列名 |
描述 |
---|---|
USERNAME |
用户名称 |
USER_ID |
用户ID号 |
PASSWORD |
此列已被弃用,建议使用 AUTHENTICATION_TYPE 列。 |
ACCOUNT_STATUS |
账户状态,始终为“NORMAL”。 |
EXPIRY_DATE |
账户过期日期 |
Table K.154. ALL_USERS
列名 |
描述 |
---|---|
USERNAME |
用户名称 |
USER_ID |
用户ID号 |
描述数据库中所有角色。
Table K.155. DBA_ROLES
列名 |
描述 |
---|---|
ROLE |
角色名称 |
PASSWORD_REQUIRED |
此列已被弃用,建议使用 AUTHENTICATION_TYPE 列,始终为“NO”。 |
AUTHENTICATION_TYPE |
指示角色的身份验证机制,始终为“NONE”。 NONE - CREATE ROLE role1; |
COMMON |
指示给定角色是否为公共角色。始终为“YES”,在 Oracle 11g 中不存在。 |
DBA_ROLE_PRIVS 描述了授予数据库中所有用户和角色的角色。
USER_ROLE_PRIVS 描述当前用户被授予的角色。
Table K.156. DBA_ROLE_PRIVS
列名 |
描述 |
---|---|
GRANTEE |
授予的用户或角色名称 |
GRANTED_ROLE |
授予的角色名称 |
ADMIN_OPTION |
指示是否使用 ADMIN OPTION 进行了授权(YES),还是没有(NO)。 |
DEFAULT_ROLE |
指示角色是否被指定为用户的默认角色(YES),还是没有(NO)。 始终为“NO”。 |
COMMON |
指示授权方式。 始终为“YES”,在 Oracle 11g 中不存在。 |
包含组件产品的版本和状态信息。
Table K.157. PRODUCT_COMPONENT_VERSION
列名 |
描述 |
---|---|
PRODUCT |
产品名称 |
VERSION |
版本号 |
STATUS |
发布状态 |
PLAN_TABLE 是自动创建的全局临时表,用于保存所有用户的 EXPLAIN PLAN 语句的输出结果。
由于 LightDB 不支持,因此此视图为空,以保证兼容性。
描述数据库文件。
Table K.158. DBA_DATA_FILES
列名 |
描述 |
---|---|
FILE_NAME |
数据库文件名称 |
FILE_ID |
数据库文件的文件标识号 |
TABLESPACE_NAME |
数据库文件所属的表空间名称 |
BYTES |
文件的大小(字节) |
BLOCKS |
文件的大小(Oracle 块) |
STATUS |
文件状态:AVAILABLE 或 INVALID。 始终为“AVAILABLE”。 |
RELATIVE_FNO |
相对文件编号 |
AUTOEXTENSIBLE |
自动扩展指示器 始终为“YES”。 |
INCREMENT_BY |
作为自动扩展增量使用的 Oracle 块数 |
ONLINE_STATUS |
文件的在线状态 始终为“ONLINE”。 |
从 lt_cron 获取信息。
DBA_JOBS 描述数据库中的所有作业。
USER_JOBS 描述当前用户拥有的作业。
ALL_JOBS 与 USER_JOBS 相同。
Table K.159. DBA_JOBS
列名 |
描述 |
---|---|
JOB |
作业的标识符 |
LOG_USER |
提交作业时的登录用户 |
PRIV_USER |
默认权限适用于此作业的用户 |
SCHEMA_USER |
用于解析作业的默认模式 始终为'CRON' |
LAST_DATE |
此作业上一次成功执行的日期 |
LAST_SEC |
与 LAST_DATE 相同。这是上一次成功执行开始的时间。 采用 'HH24:MI:SS' 格式。 |
THIS_DATE |
此作业开始执行的日期(如果未执行则通常为空)。 |
THIS_SEC |
与 THIS_DATE 相同。这是上一次成功执行开始的时间。 采用 'HH24:MI:SS' 格式。 |
TOTAL_TIME |
系统在上一次执行中为此作业花费的总挂钟时间 它与 Oracle 不同。在 Oracle 中,它表示自此作业首次执行以来系统在此作业上花费的总挂钟时间(以秒为单位),并且此值是累积的。 |
BROKEN |
Y:不尝试运行此作业,N:尝试运行此作业 始终为“N”。 |
INTERVAL |
该字符串使用标准的 cron 语法,参考 lt_cron。 与 Oracle 不同。 |
WHAT |
LightDB 命令 与 Oracle 不同。 |
从 lt_cron 获取信息。
列出当前在实例中运行的所有作业。
Table K.160. DBA_JOBS_RUNNING
列名 |
描述 |
---|---|
SID |
执行该作业的进程的标识符 |
JOB |
作业的标识符。该作业当前正在执行 |
LAST_DATE |
该作业上次成功执行的日期 |
LAST_SEC |
和LAST_DATE相同。这是上次成功执行开始的时间 格式为'HH24:MI:SS' |
THIS_DATE |
该作业开始执行的日期(如果未执行,则通常为空) |
THIS_SEC |
和THIS_DATE相同。这是上次成功执行开始的时间 格式为'HH24:MI:SS' |
DBA_MVIEWS描述了数据库中的所有物化视图。
ALL_MVIEWS视图当前与DBA_MVIEWS视图相同,且不像oracle一样进行权限验证。
USER_MVIEWS描述了当前用户拥有的所有物化视图。
Table K.161. ALL_MVIEWS
列名 |
描述 |
---|---|
OWNER |
创建该物化视图的模式 |
MVIEW_NAME |
物化视图的名称 |
CONTAINER_NAME |
保存物化视图数据的容器的名称。通常与MVIEW_NAME相同。 |
QUERY |
定义物化视图的查询语句 |
QUERY_LEN |
定义查询的长度(以字节为单位) |
UPDATABLE |
指示物化视图是否可更新(Y)或不可更新(N) 始终为'N' |
REFRESH_MODE |
物化视图的刷新模式 始终为'DEMAND',这意味着当调用适当的刷新过程时,数据库会刷新此物化视图。 |
REFRESH_METHOD |
用于刷新物化视图的默认方法 始终为'COMPLETE' |
BUILD_MODE |
指示物化视图在创建期间如何填充 始终为'IMMEDIATE' |
不支持此视图,因此可以将其用作空视图以实现兼容性。
DBA_MVIEW_LOGS描述了数据库中的所有物化视图日志。
ALL_MVIEW_LOGS描述了当前用户可以访问的所有物化视图日志。
USER_MVIEW_LOGS描述了当前用户拥有的所有物化视图日志。
DBA_MVIEW_COMMENTS显示数据库中物化视图的注释。
目前ALL_MVIEW_COMMENTS视图与DBA_MVIEW_COMMENTS视图相同,且像Oracle那样没有进行权限验证。
USER_MVIEW_COMMENTS显示当前用户拥有的物化视图的注释。此视图不显示OWNER列。
Table K.162. ALL_MVIEW_COMMENTS
列名 |
描述 |
---|---|
OWNER |
物化视图的所有者 |
MVIEW_NAME |
物化视图的名称 |
COMMENTS |
物化视图的注释 |
DBA_TABLESPACES描述数据库中的所有表空间。
USER_TABLESPACES描述当前用户可以访问的表空间。该视图不显示PLUGGED_IN列。
Table K.163. DBA_TABLESPACES
列 |
描述 |
---|---|
TABLESPACE_NAME |
表空间名称 |
BLOCK_SIZE |
表空间块大小(以字节为单位) |
STATUS |
表空间状态 始终为 'ONLINE' |
CONTENTS |
表空间内容 始终为 'PERMANENT' |
NLS_DATABASE_PARAMETERS 列出数据库的永久 NLS 参数。
NLS_INSTANCE_PARAMETERS 列出实例的 NLS 参数。
NLS_SESSION_PARAMETERS 列出用户会话的 NLS 参数。
Table K.164. NLS_DATABASE_PARAMETERS
列 |
描述 |
---|---|
PARAMETER |
参数名称 |
VALUE |
参数值 |
DBA_SEGMENTS 描述数据库中所有段分配的存储空间。
USER_SEGMENTS 描述当前用户对象所拥有的段分配的存储空间。该视图不会显示 OWNER、HEADER_FILE、HEADER_BLOCK 或 RELATIVE_FNO 列。
Table K.165. DBA_SEGMENTS
列 |
描述 |
---|---|
OWNER |
段所有者的用户名 |
SEGMENT_NAME |
段名称(如果有) |
PARTITION_NAME |
对象分区名称(非分区对象设为 NULL) |
SEGMENT_TYPE |
段类型:'TABLE'、'TABLE PARTITION'、'TABLE SUBPARTITION'、'INDEX'、'INDEX PARTITION'、'INDEX SUBPARTITION' |
TABLESPACE_NAME |
包含该段的表空间名称 |
HEADER_FILE |
包含该段的表空间名称 |
BYTES |
段的大小(以字节为单位) |
BLOCKS |
段的大小(以 LightDB 块为单位) |
DBA_PART_TABLES 显示数据库中所有分区表的对象级分区信息。
ALL_PART_TABLES 视图目前与 DBA_PART_TABLES 视图相同,并且不像 Oracle 那样进行权限验证。
USER_PART_TABLES 显示当前用户拥有的分区表的对象级分区信息。该视图不会显示 OWNER 列。
支持的字段如下所示。不支持的字段将填入 NULL。
Table K.166. ALL_PART_TABLES
列 |
描述 |
---|---|
OWNER |
分区表的所有者 |
TABLE_NAME |
分区表的名称 |
PARTITIONING_TYPE |
分区方法的类型:RANGE、HASH、LIST |
SUBPARTITIONING_TYPE |
组合分区方法的类型:RANGE、HASH、LIST |
PARTITION_COUNT |
表中的分区数 |
PARTITIONING_KEY_COUNT |
分区键中的列数 |
SUBPARTITIONING_KEY_COUNT |
对于组合分区表,子分区键中的列数。 |
DEF_TABLESPACE_NAME |
添加分区时要使用的默认表空间 |
DEF_LOGGING |
添加分区时要使用的默认 LOGGING 属性 |
DBA_TAB_PARTITIONS 显示数据库中所有分区的分区级分区信息、分区存储参数和分区统计信息。
目前ALL_TAB_PARTITIONS视图与DBA_TAB_PARTITIONS视图相同,与Oracle不同的是没有进行权限验证。
USER_TAB_PARTITIONS显示当前用户拥有的所有分区对象的分区信息,该视图不显示TABLE_OWNER列。
通过ADD/CREATE/MODIFY创建分区时,分区名与传入的名字相同,Interval分区自动加前缀 “ap”, 哈希分区自动添加前缀”p“。
Table K.167. ALL_TAB_PARTITIONS
列名 |
描述 |
---|---|
TABLE_OWNER |
表所有者 |
TABLE_NAME |
表名 |
COMPOSITE |
表示表是否为组合分区表(是:YES;否:NO) |
PARTITION_NAME |
分区名称 |
SUBPARTITION_COUNT |
如果这是一个组合分区表,则为该分区中的子分区数。 |
PARTITION_POSITION |
分区在表中的位置。 |
TABLESPACE_NAME |
包含该分区的表空间名称 |
LOGGING |
表示表格更改是否被记录 |
NUM_ROWS |
分区中的行数 |
BLOCKS |
分区中已使用数据块的数量 |
LAST_ANALYZED |
此分区最近一次分析的日期 |
DBA_TAB_SUBPARTITIONS显示数据库中所有子分区的子分区名称、所属表格和分区的名称、存储属性以及统计信息。
ALL_TAB_SUBPARTITIONS视图目前与DBA_TAB_SUBPARTITIONS视图相同,并且与Oracle一样不进行权限验证。
USER_TAB_SUBPARTITIONS显示当前用户拥有的所有分区对象的子分区信息。此视图不显示TABLE_OWNER列。
添加子分区时,实际的子分区的名字与传入的分区名相同,创建表同时创建子分区时,子分区会自动添加分区名前缀,当创建一个未指定分区名的哈希分区时,分区名加前缀p。
Table K.168. ALL_TAB_SUBPARTITIONS
列名 |
描述 |
---|---|
TABLE_OWNER |
表格所有者 |
TABLE_NAME |
表格名称 |
PARTITION_NAME |
分区名称 |
SUBPARTITION_NAME |
子分区名称 |
PARTITION_POSITION |
分区在表格中的位置 |
SUBPARTITION_POSITION |
子分区在分区中的位置 |
TABLESPACE_NAME |
包含该分区的表空间名称 |
LOGGING |
表格更改是否被记录 |
NUM_ROWS |
子分区中的行数 |
BLOCKS |
子分区中的块数 |
LAST_ANALYZED |
此表格最近一次分析的日期 |
DBA_PART_KEY_COLUMNS描述了数据库中所有分区对象的分区键列。
ALL_PART_KEY_COLUMNS视图目前与DBA_PART_KEY_COLUMNS视图相同,并且与Oracle一样不进行权限验证。
USER_PART_KEY_COLUMNS描述了当前用户拥有的分区对象的分区键列。此视图不显示OWNER列。
Table K.169. ALL_PART_KEY_COLUMNS
列名 |
描述 |
---|---|
OWNER |
分区表或索引的所有者 |
NAME |
分区表或索引的名称 |
OBJECT_TYPE |
对象类型:TABLE,INDEX |
COLUMN_NAME |
列的名称 |
COLUMN_POSITION |
列在分区键中的位置 |
DBA_SUBPART_KEY_COLUMNS显示了数据库中所有子分区的复合分区表(以及复合分区表上的本地索引)的子分区键列。
ALL_SUBPART_KEY_COLUMNS视图目前与DBA_SUBPART_KEY_COLUMNS视图相同,并且与Oracle一样不进行权限验证。
USER_SUBPART_KEY_COLUMNS显示了当前用户拥有的所有分区对象的子分区的此信息。此视图不显示OWNER列。
Table K.170. ALL_SUBPART_KEY_COLUMNS
列名 |
描述 |
---|---|
OWNER |
分区表或索引的所有者 |
NAME |
分区表或索引的名称 |
OBJECT_TYPE |
对象类型:TABLE, INDEX |
COLUMN_NAME |
列名 |
COLUMN_POSITION |
列在子分区键中的位置 |
DBA_IND_PARTITIONS描述数据库中的所有索引分区。
ALL_IND_PARTITIONS视图目前与DBA_IND_PARTITIONS视图相同,且像Oracle一样不进行权限验证。
USER_IND_PARTITIONS描述当前用户拥有的索引分区。此视图不显示INDEX_OWNER列。
Table K.171. ALL_IND_PARTITIONS
列名 |
描述 |
---|---|
INDEX_OWNER |
索引的所有者 |
INDEX_NAME |
索引的名称 |
COMPOSITE |
指示分区是否属于复合分区表上的本地索引(YES)或不属于(NO) |
PARTITION_NAME |
分区的名称 |
SUBPARTITION_COUNT |
如果是复合分区表上的本地索引,则为该分区中子分区的数量 |
PARTITION_POSITION |
分区在索引中的位置 |
TABLESPACE_NAME |
包含该分区的表空间名称 |
LOGGING |
指示是否将对索引的更改记录到日志中 |
NUM_ROWS |
返回的行数 |
LAST_ANALYZED |
此分区最近分析的日期 |
DBA_PART_INDEXES显示数据库中所有分区索引的对象级分区信息。
ALL_PART_INDEXES视图目前与DBA_PART_INDEXES视图相同,且像Oracle一样不进行权限验证。
USER_PART_INDEXES显示当前用户拥有的分区索引的对象级分区信息。此视图不显示OWNER列。
Table K.172. ALL_PART_INDEXES
列名 |
描述 |
---|---|
OWNER |
分区索引的所有者 |
INDEX_NAME |
分区索引的名称 |
TABLE_NAME |
分区表的名称 |
PARTITIONING_TYPE |
分区方法的类型:RANGE,HASH,LIST |
SUBPARTITIONING_TYPE |
复合分区方法的类型:RANGE,HASH,LIST |
PARTITION_COUNT |
索引中的分区数 |
PARTITIONING_KEY_COUNT |
分区键中的列数 |
SUBPARTITIONING_KEY_COUNT |
对于复合分区表,子分区键中的列数 |
LOCALITY |
指示分区索引是本地(LOCAL)还是全局(GLOBAL),始终为“LOCAL” |
ALIGNMENT |
指示分区索引是前缀(PREFIXED)还是非前缀(NON_PREFIXED) |
DEF_TABLESPACE_NAME |
对于本地索引,在添加或拆分表分区时要使用的默认表空间 |
DEF_LOGGING |
对于本地索引,在添加表分区时要使用的默认LOGGING属性 |
COL 描述了当前用户拥有的表和视图的列。此视图不显示OWNER列。
Table K.173. COL
Column |
Description |
---|---|
TNAME |
表、视图的名称 |
COLNO |
列的创建顺序号 |
CNAME |
列名 |
COLTYPE |
列的数据类型 |
WIDTH |
列的长度(字符类型单位为字符数;其他类型为字节数,对于number/numeric 类型,长度总是22)) |
SCALE |
小数点右侧的数字位数 |
PRECISION |
NUMBER数据类型的小数精度;FLOAT数据类型的二进制精度;其他数据类型的值为NULL |
NULLS |
指示列是否允许为空。如果列有NOT NULL约束或列是主键的一部分,则值为 'NOT NULL' |
DEFAULTVAL |
列的默认值 |