K.44. orafce

K.44.1. 与 Oracle 数据库兼容的特性
K.44.2. 使用orafce的注意事项
K.44.3. 数据类型
K.44.4. 伪列
K.44.5. 查询
K.44.6. SQL 函数参考
K.44.7. 包参考
K.44.8. 事务行为
K.44.9. 系统视图参考

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

K.44.1. 与 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` 数据类型有一致的功能


varcharchar 之间,varchar2nvarchar2 的优先级配置, 创建 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

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

安全

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;
  

K.44.2. 使用orafce的注意事项

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命令”。

K.44.3. 数据类型

支持以下数据类型:

  • VARCHAR2

  • NVARCHAR2

  • DATE

  • RAW

  • PLS_INTEGER

  • BINARY_FLOAT

  • BINARY_DOUBLE

  • XMLType

  • LONG

K.44.3.1. VARCHAR2

语法

指定VARCHAR2类型如下。

Table K.90. VARCHAR2语法

数据类型语法

说明

VARCHAR2(len [byte|char])

变长字符串,最多可包含len个字符。 对于len,请指定大于0的整数。 如果省略len,则字符串可以是任意长度。 自23.1版本以来,LightDB实现了此语法,以兼容Oracle的varchar2类型。 在len后面的关键字bytechar是可选的,仅与Oracle语法兼容, 内部实现与只有len而没有bytechar关键字的实现相同。


通用规则

  • 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=#
   

K.44.3.2. NVARCHAR2

语法

指定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类型。

K.44.3.3. 日期

语法

指定DATE类型如下。

Table K.92. 日期语法

数据类型语法

解释

DATE

存储日期和时间


通用规则

  • DATE是一种日期/时间数据类型。

  • 日期和时间存储在DATE中。时区不会被存储。

注意

如果在DDL语句(如表定义)中使用orafce的DATE类型,请在执行DDL语句之前始终设置search_path。 即使在定义之后更改了search_path,数据类型也将是LightDB的DATE类型。

信息

orafce的DATE类型等同于LightDB的TIMESTAMP类型。 因此,可以使用参数数据类型为TIMESTAMP的现有LightDB函数。

K.44.3.4. RAW

语法

指定 RAW 类型如下。

Table K.93. RAW 语法

RAW 类型语法

解释

RAW(len)

存储可变长度的二进制数据。外部表示为十六进制。 len 只是为了与 Oracle 兼容,没有实际作用。 二进制数据可以是任意长度。


通用规则

  • RAW 是一个可变长度的十六进制数据类型。

  • 十六进制字符串长度可变。指定的值将被存储为二进制数据。此数据类型的上限约为 1GB。

K.44.3.5. PLS_INTEGER

语法

指定 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。

K.44.3.6. BINARY_FLOAT

语法

指定 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)
   

K.44.3.7. BINARY_DOUBLE

语法

指定 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)
   

K.44.3.8. XMLType

语法

按如下方式指定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)
    
         

K.44.4. 伪列

本章引入 LightDB 已经支持的 Oracle 伪列。

  • ORA_ROWSCN

K.44.4.1. 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;
   

K.44.5. 查询

支持以下查询:

  • DUAL 表

DUAL 表是系统提供的虚拟表。 在执行 SQL 时不需要访问基表时使用,例如执行测试以获取结果表达式(如函数和运算符)。

示例

在以下示例中,返回当前系统日期。

   SELECT  CURRENT_DATE  "date" FROM DUAL;
       date
   ------------
    2013-05-14
   (1 row)
  

K.44.6. SQL 函数参考

K.44.6.1. 数学函数

支持以下数学函数:

  • BIN_TO_NUM

  • BITAND

  • BITOR

  • BITXOR

  • COSH

  • MOD

  • REMAINDER

  • ROUND_TIES_TO_EVEN

  • SINH

  • TANH

K.44.6.1.1. BIN_TO_NUM

描述

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)
    
K.44.6.1.2. BITAND

描述

执行按位 AND 操作。

语法

     BITAND(int1 integers, int2 integers) returns bigint
    

通用规则

  • BITAND 对两个整数的每一位执行 AND 操作,并返回结果。

  • 指定整数类型的值。

  • 返回值的数据类型为 BIGINT。

示例

在以下示例中,返回数字字面值 5 和 3 的 AND 操作结果。

    SELECT BITAND(5,3) FROM DUAL;
     bitand
    -------
          1
    (1 row)
    
K.44.6.1.3. BITOR

描述

执行按位 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)
    
K.44.6.1.4. BITXOR

描述

执行按位异或操作。

语法

     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
    
K.44.6.1.5. COSH

描述

计算一个数字的双曲余弦。

语法

     COSH(num numeric) returns double precision
    

通用规则

  • COSH 返回指定数字的双曲余弦值。

  • 数字必须是数值数据类型。

  • 返回值的数据类型是 DOUBLE PRECISION。

示例

在以下示例中,返回数字字面值 2.236 的双曲余弦值。

    SELECT COSH(2.236) FROM DUAL;
          cosh
    -----------------
    4.7313591000247
    (1 row)
    
K.44.6.1.6. MOD

描述

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
    
K.44.6.1.7. REMAINDER

描述

返回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)
    
K.44.6.1.8. ROUND_TIES_TO_EVEN

描述

该函数将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)
    
K.44.6.1.9. SINH

描述

计算一个数字的双曲正弦。

语法

     SINH(num numeric) returns double precision
    

通用规则

  • SINH函数返回指定数字的双曲正弦。

  • 数字必须是数字数据类型。

  • 返回值的数据类型是DOUBLE PRECISION。

示例

在以下示例中,返回数字1.414的双曲正弦。

    SELECT SINH(1.414) FROM DUAL;
          sinh
    -----------------
    1.93460168824956
    (1 row)
    
K.44.6.1.10. TANH

描述

计算一个数字的双曲正切。

语法

     TANH(num numeric) returns double precision
    

通用规则

  • TANH函数返回指定数字的双曲正切。

  • 数字必须是数字数据类型。

  • 返回值的数据类型是DOUBLE PRECISION。

示例

在以下示例中,返回数字3的双曲正切。

    SELECT TANH(3) FROM DUAL;
          tanh
    -----------------
    0.995054753686731
    (1 row)
    
K.44.6.1.11. CEIL

描述

计算大于等于一个数的最小整数,当输入参数是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)
    

K.44.6.2. 字符串函数

支持以下字符串函数:

  • 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

K.44.6.2.1. BTRIM

描述

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

语法

     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)
    
K.44.6.2.2. INSTR

描述

返回字符串中子字符串的位置。

语法

     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。

  • 对于 startPosoccurrences,请指定 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)
    
K.44.6.2.3. INSTRB

描述

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)
    
K.44.6.2.4. LENGTH

描述

返回字符串中字符的数量。

语法

     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)
    
K.44.6.2.5. LENGTHB

描述

返回字符串的字节数。

语法

     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)
    
K.44.6.2.6. LPAD

描述

使用一系列的字符填充一个字符串,使其达到指定的长度。

语法

     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)
    
K.44.6.2.7. LTRIM

描述

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

语法

     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)
    
K.44.6.2.8. NLSSORT

描述

返回表示区域设置(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)
    
K.44.6.2.9. REGEXP_COUNT

描述

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

语法

     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)
    
K.44.6.2.10. REGEXP_INSTR

描述

返回在字符串中找到模式匹配的开始或结束位置。

语法

     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是一个正整数,表示应该搜索stringpattern的第几个出现次数。默认值为1,表示在string中搜索第一个出现的pattern

  • return_opt允许您指定与出现次数相关的返回内容:

    • 当return_opt = 0时,返回第一次出现的第一个字符的位置。这是默认值。

    • 当return_opt = 1时,返回出现后面一个字符的位置。

  • flags是一个字符表达式,它允许您改变函数的默认匹配行为。有关详细信息,请参阅REGEXP_COUNT。

  • 对于带有捕获组的patterngroup是一个正整数,表示应该返回pattern中的哪个捕获组。捕获组可以嵌套,它们按其在pattern中出现左括号的顺序进行编号。 如果group为零,则返回与模式匹配的整个子字符串的位置。如果group大于pattern中的捕获组数量,则函数返回零。 空的group值返回NULLgroup的默认值为零。

注意

如果使用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)
    
K.44.6.2.11. REGEXP_LIKE

描述

在查询的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)
    
K.44.6.2.12. REGEXP_SUBSTR

描述

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

语法

     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值返回NULLgroup的默认值为零。

注意

如果使用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)
    
K.44.6.2.13. REGEXP_REPLACE

描述

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

语法

     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 是一个正整数,表示应搜索和替换 stringpattern 的哪个出现次数。默认值为 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)
    
K.44.6.2.14. REPLACE

描述

返回将每个 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)
    
K.44.6.2.15. RPAD

描述

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

语法

     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)
    
K.44.6.2.16. RTRIM

描述

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

语法

     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)
    
K.44.6.2.17. SOUNDEX

描述

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)
    
K.44.6.2.18. SUBSTR

描述

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

语法

     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。

  • 对于startPoslen,请指定整数或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)
    
K.44.6.2.19. SUBSTRB

描述

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

语法

     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,则返回空字符串。

  • 对于startPoslen,请指定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)
    
K.44.6.2.20. CONCAT

描述

拼接两个字符串

语法

     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)
    
K.44.6.2.21. UPPER

描述

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)
    

K.44.6.3. 日期/时间函数

支持以下日期/时间函数:

  • ADD_MONTHS

  • DBTIMEZONE

  • LAST_DAY

  • MONTHS_BETWEEN

  • NEXT_DAY

  • ROUND

  • SESSIONTIMEZONE

  • SYSDATE

  • TRUNC

  • TZ_OFFSET

注意

如果日期/时间函数中只显示了DATE类型,则这些函数可在orafce和LightDB中使用。

K.44.6.3.1. ADD_MONTHS

描述

对日期添加月份。

语法

     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)
    
K.44.6.3.2. DBTIMEZONE

描述

返回数据库时区的值。

语法

     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)
    
K.44.6.3.3. LAST_DAY

描述

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

语法

     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)
    
K.44.6.3.4. MONTHS_BETWEEN

描述

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

语法

     MONTHS_BETWEEN(date1 DATE, date2 DATE) returns NUMERIC
     MONTHS_BETWEEN(date1 TIMESTAMP WITH TIME ZONE, date2 TIMESTAMP WITH TIME ZONE) returns NUMERIC
    

通用规则

  • MONTHS_BETWEEN返回date1date2之间月份的差异。

  • 对于date1date2,请指定DATE或TIMESTAMPTZ类型。

  • 如果date2date1早,返回值将为负数。

  • 如果两个日期是同一天,或者这两个日期都是它们所属月份的最后一天,则返回一个整数。 如果这两个日期的天数不同,则将一个月视为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)
    
K.44.6.3.5. NEXT_DAY

描述

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

语法

     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)
    
K.44.6.3.6. ROUND 函数

描述

对日期进行四舍五入。

语法

     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)
    
K.44.6.3.7. SESSIONTIMEZONE

描述

返回会话的时区。

语法

     SESSIONTIMEZONE() returns text
    

通用规则

  • SESSIONTIMEZONE 返回会话之间的时区值。

  • 返回值的数据类型为TEXT。

注意

  • 如果使用SESSIONTIMEZONE,需要提前将search_path指定为"oracle"。

  • SESSIONTIMEZONE返回的值将成为"TimeZone"服务器参数中设置的值。

参见

有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。

示例

在下面的示例中,返回会话的时区。

    SELECT SESSIONTIMEZONE() FROM DUAL;
     sessiontimezone
    -----------------
     Japan
    (1 row)
    
K.44.6.3.8. SYSDATE

描述

返回系统日期。

语法

     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)
    
K.44.6.3.9. TRUNC

描述

截取日期部分。

语法

     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)
    
K.44.6.3.10. TZ_OFFSET

描述

返回时区偏移量。

语法

     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)
    

K.44.6.4. 数据类型格式化函数

支持以下数据类型格式化函数:

  • 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

K.44.6.4.1. CONVERT

描述

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)
    
K.44.6.4.2. NUMTOYMINTERVAL

描述

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)
    
K.44.6.4.3. TO_BLOB(raw)

描述

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)
    
K.44.6.4.4. TO_CHAR

描述

将一个值转换为字符串。

语法

     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)
    
K.44.6.4.5. TO_DATE

描述

根据指定的格式将字符串转换为日期。

语法

     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)
    
K.44.6.4.6. TO_MULTI_BYTE

描述

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

语法

     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”。

K.44.6.4.7. TO_NUMBER

描述

根据指定的格式将值转换为数字。

语法

     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)
    
K.44.6.4.8. TO_SINGLE_BYTE

描述

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

语法

     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)
    
K.44.6.4.9. ASCIISTR

描述

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)
    
K.44.6.4.10. ASCII

描述

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)
    
K.44.6.4.11. SQLCODE_TO_SQLSTATE

描述

将整数错误代码转换为长度为5的字符串错误代码。

语法

     SQLCODE_TO_SQLSTATE(code INTEGER) returns TEXT
    

通用规则

  • 只能转换0和715827882之间的整数错误代码。

  • 返回值的数据类型为TEXT。

示例

在以下示例中,转换错误码2。

     select SQLCODE_TO_SQLSTATE(2);
      sqlcode_to_sqlstate
     ---------------------
      20000
     (1 row)
    
K.44.6.4.12. TO_CLOB

描述

将字符字符串或数值转换为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)
          
K.44.6.4.13. RAWTOHEX

描述

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)
    
K.44.6.4.14. ROWIDTOCHAR

描述

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)
    

K.44.6.5. 条件表达式

支持以下用于比较的函数:

  • DECODE

  • LNNVL

  • NANVL

  • NVL

  • NVL2

K.44.6.5.1. DECODE

描述

比较值,如果它们匹配,则返回相应的值。

语法

     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可以转换的数据类型组合(摘要)

  其他结果值或默认值
  数值类型字符类型日期/时间类型
结果值(任何)数值类型YNN
字符类型NYN
日期/时间类型NNS(*1)

Y:可以转换

S:可转换一些数据类型

N:无法转换

*1:可转换日期/时间类型的数据类型如下所示:

Table K.102.  DECODE可转换的结果值和默认值日期/时间数据类型

  其他结果值或默认值
  DATETIME WITHOUT TIME ZONETIMESTAMP WITHOUT TIME ZONETIMESTAMP WITH TIME ZONE
结果值(任何)DATEYNYY
TIME WITHOUT TIME ZONENYNN
TIMESTAMP WITHOUT TIME ZONEYNYY
TIMESTAMP WITH TIME ZONEYNYY

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)
    
K.44.6.5.2. LNNVL

描述

确定指定条件的值是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)
    
K.44.6.5.3. NANVL函数

描述

当值不是数字(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)时返回替代值。 替代值可以是数字或可转换为数字的字符串。

  • 对于exprsubstitute,请指定数字数据类型。 如果exprsubstitute具有不同的数据类型, 它们将转换为具有更大长度或精度的数据类型,并返回该数据类型。

  • 对于substitute,您还可以指定表示数字值的字符串。

  • 如果为替代值指定了字符串,则返回值使用的数据类型与expr的数据类型相同。

示例

在以下示例中,如果表t1中的col1的值是NaN值,则返回“0”。

     SELECT col1, NANVL(col3,0) FROM t1;
      col1 | nanvl
     ------+-------
      2001 |     0
     (1 row)
    
K.44.6.5.4. NVL函数

描述

当值为NULL时返回替代值。

语法

     NVL(expr1 anyelement, expr2 anyelement) return anyelement
    

通用规则

  • NVL函数在指定的值为NULL时返回替代值。 当expr1为NULL时,返回expr2。 当expr1不为NULL时返回expr1

  • 请为expr1expr2指定相同的数据类型。 然而,如果在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)
    
K.44.6.5.5. NVL2函数

描述

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

语法

     NVL2(expr anyelement, substitute1 anyelement, substitute2 anyelement) return anyelement
    

通用规则

  • NVL2函数根据指定的值是否为NULL返回替代值。 当expr为NULL时,返回substitute2。 当它不为NULL时,返回substitute1

  • 请为exprsubstitute1substitute2指定相同的数据类型。 然而,如果在substitute1substitute2中指定了文字,而且数据类型也可以由 expr转换,则可以指定不同的数据类型。在这种情况下,substitute1substitute2将根据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)
    

K.44.6.6. 聚合函数

支持以下聚合函数:

  • ANY_VALUE

  • BIT_AND_AGG

  • BIT_OR_AGG

  • BIT_XOR_AGG

  • KURTOSIS_POP

  • KURTOSIS_SAMP

  • LISTAGG

  • MEDIAN

  • SKEWNESS_POP

  • SKEWNESS_SAMP

  • WY_CONCAT

K.44.6.6.1. ANY_VALUE

描述

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)
    
K.44.6.6.2. BIT_AND_AGG

描述

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)
    
K.44.6.6.3. BIT_OR_AGG

描述

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)
    
K.44.6.6.4. BIT_XOR_AGG

描述

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)
    
K.44.6.6.5. KURTOSIS_POP

描述

总体峰度函数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)
    
K.44.6.6.6. KURTOSIS_SAMP

描述

样本峰度(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)
    
K.44.6.6.7. LISTAGG

描述

返回一个由字符串值组成的连接的、带分隔符的列表。

语法

     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)

    
K.44.6.6.8. MEDIAN

描述

计算一组数字的中位数。

语法

     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)
    
K.44.6.6.9. SKEWNESS_POP(总体偏度)

描述

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)
    
K.44.6.6.10. SKEWNESS_SAMP(样本偏度)

描述

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)
    
K.44.6.6.11. WY_CONCAT

描述

返回一个由字符串值组成的连接的、带逗号分隔符的列表。

语法

     WY_CONCAT(strExpr TEXT) returns CLOB
    

总则

  • WY_CONCAT连接和分隔一组字符串值,并返回结果。

  • 返回值的数据类型为CLOB。

示例

在下面的示例中,返回由表t1中列col2的值组成的、以“,”为分隔符的结果。

     SELECT WY_CONCAT(col2) FROM t1;
           wy_concat
     -------------------
      AAAAA,BBBBB,CCCCC
     (1 row)
    

K.44.6.7. 返回内部信息的函数

支持以下返回内部信息的函数:

  • DUMP

  • NLS_CHARSET_ID

  • NLS_CHARSET_NAME

  • SYS_CONTEXT

  • USERENV

K.44.6.7.1. DUMP

描述

返回一个值的内部信息。

语法

     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)
    
K.44.6.7.2. NLS_CHARSET_ID

描述

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)
    
K.44.6.7.3. NLS_CHARSET_NAME

描述

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)
    
K.44.6.7.4. SYS_CONTEXT

描述

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

语法

     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)
    
K.44.6.7.5. USERENV

描述

返回有关当前会话的信息

语法

     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)
    

K.44.6.8. 日期时间操作符

orafce支持以下日期类型的日期时间操作符。

Table K.104. 日期时间操作符

操作示例结果
+DATE'2016/01/01' + 102016-01-11 00:00:00
-DATE'2016/03/20' - 352016-02-14 00:00:00
-DATE'2016/09/01' - DATE'2015/12/31'245

Note

如果使用orafce的DATE类型的日期时间操作符,则需要事先指定“oracle”作为search_path。

参见

有关如何编辑search_path的信息,请参阅“使用orafce的注意事项”。

K.44.6.9. 其他函数

以下函数用于其他目的:

  • EMPTY_CLOB

  • EMPTY_BLOB

  • ORA_HASH

  • VSIZE

  • DEPS_SAVE_AND_DROP_DEPENDENCIES/DEPS_RESTORE_DEPENDENCIES

  • PLVSTR.IS_PREFIX

  • PLVDATE.ISLEAPYEAR

  • TIMESTAMP_TO_SCN

K.44.6.9.1. EMPTY_CLOB

描述

返回一个空的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)
    
K.44.6.9.2. EMPTY_BLOB

描述

返回一个空的 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)
    
K.44.6.9.3. ORA_HASH

描述

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)
    
K.44.6.9.4. VSIZE

描述

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)
    
K.44.6.9.5. DEPS_SAVE_AND_DROP_DEPENDENCIES/DEPS_RESTORE_DEPENDENCIES

描述

这些函数用于修改具有视图依赖关系的表。 递归备份所有依赖视图,然后修改基表,最后重新创建所有备份视图。

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;
    
K.44.6.9.6. PLVSTR.IS_PREFIX

描述

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)
    
K.44.6.9.7. PLVDATE.ISLEAPYEAR

描述

判断某个年份是否是闰年

语法

     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
    
K.44.6.9.8. TIMESTAMP_TO_SCN

描述

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

    

K.44.7. 包参考

“包”是由模式组合在一起的一组功能,具有单一的功能,并通过从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语句,并使用包名称限定功能名称。请参考每个包功能的解释,以获取有关调用格式的信息。

K.44.7.1. DBMS_ALERT

概述

DBMS_ALERT包可将警报从一个PL/pgSQL会话发送到多个其他PL/pgSQL会话。

当进行1:N处理时,可以使用此包,例如在同时将警报从给定的PL/pgSQL会话通知到另一个PL/pgSQL会话时。

Table K.105. DBMS_ALERT功能

特性描述
REGISTER注册指定的警报。
REMOVE删除指定的警报。
REMOVEALL从会话中删除所有警报。
SIGNAL通知警报。
WAITANY等待会话注册的任何警报的通知。
WAITONE等待会话注册的特定警报的通知。

语法

K.44.7.1.1. 功能说明

本节将说明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);
    
K.44.7.1.2. 使用示例

下面是 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();
    

K.44.7.2. DBMS_ASSERT

概述

在 PL/pgSQL 中执行输入值属性的验证。

Table K.106. DBMS_ASSERT 特性

特性描述
ENQUOTE_LITERAL返回用单引号括起来的指定字符串。
ENQUOTE_NAME返回用双引号括起来的指定字符串。
NOOP按原样返回指定的字符串。
OBJECT_NAME验证指定的字符串是否为已定义的标识符。
QUALIFIED_SQL_NAME验证指定的字符串是否以适当的格式作为标识符。
SCHEMA_NAME验证指定的字符串是否为已定义的模式。
SIMPLE_SQL_NAME验证指定的字符串是否以适当的格式作为单个标识符。

语法

K.44.7.2.1. 特性描述

本节介绍了 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');
    
K.44.7.2.2. 用法示例

下面是 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();
    

K.44.7.3. DBMS_DATAPUMP

概述

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

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);
   
K.44.7.3.1. 功能描述

本节解释了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);
    
K.44.7.3.2. 使用示例

下面是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;
/
    

K.44.7.4. DBMS_LOB

概述

一些与 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)
    

特性

K.44.7.4.1. 描述

本节介绍了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;
/
    
K.44.7.4.2. 使用示例

下面展示了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();
    

K.44.7.5. DBMS_OUTPUT

概述

从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从消息缓冲区检索多行。

语法

K.44.7.5.1. 描述

本节详细说明了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);
    
K.44.7.5.2. 使用示例

下面是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();
    

K.44.7.6. DBMS_PIPE

概述

在执行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 类型接收一个消息。

语法

K.44.7.6.1. 特点描述

本节将解释 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返回的值

返回值数据类型
9NUMERIC类型
11TEXT类型
12DATE类型
13TIMESTAMP类型
23BYTEA类型
24RECORD类型
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();
    
K.44.7.6.2. 使用示例

下面是使用 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();
    

K.44.7.7. DBMS_RANDOM

概述

生成在PL/pgSQL中的随机数。

Table K.113. DBMS_RANDOM功能

功能描述
INITIALIZE初始化生成随机数。
NORMAL返回正态分布的随机数。
RANDOM生成随机数。
SEED重置种子值。
STRING生成一个随机字符串。
TERMINATE终止随机数生成。
VALUE生成一个介于0和1之间的随机十进制数,或介于指定值之间的随机十进制数。

语法

K.44.7.7.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生成并返回指定范围内的随机数。

  • 对于minmax, 请指定数字数据类型。将生成介于最小值和最大值之间(包括最小值和最大值)的随机数。

  • 如果省略了最小值和最大值,则将生成介于0和1之间的随机十进制数。

  • 返回值的数据类型为DOUBLE PRECISION。

示例

     DECLARE
         d_RunDbl   DOUBLE PRECISION;
     BEGIN
         d_RunDbl := DBMS_RANDOM.VALUE();
    
K.44.7.7.2. 使用示例

下面是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();
    

K.44.7.8. DBMS_UTILITY

概述

提供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)
   
K.44.7.8.1. 功能描述

本节介绍了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
     $$;
    
K.44.7.8.2. 使用示例

下面是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;
/
    

K.44.7.9. DBMS_JOB

概述

在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)
   
K.44.7.9.1. 功能描述

本节解释了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');
    
K.44.7.9.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;
/
    

K.44.7.10. DBMS_LOCK

概述

提供锁管理服务的接口。

Table K.118. DBMS_LOCK功能

功能描述
sleep将一个会话置于休眠状态,等待特定时间。

语法

     SLEEP(pi_seconds FLOAT8)
   
K.44.7.10.1. 功能描述

本节解释了dbms_job的每个功能。

SLEEP

  • 此过程将暂停会话一段指定的时间。

  • 暂停会话的时间以秒为单位。

示例

dbms_lock.sleep(0.1);
    

K.44.7.11. DBMS_METADATA

概述

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

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
   
K.44.7.11.1. 功能描述

本节介绍了 dbms_job 的每个功能。

GET_DDL

  • 允许您获取对象的元数据。

示例

select dbms_metadata.get_ddl('constraint', 'key1_check') from dual;
    

K.44.7.12. DBMS_OBFUSCATION_TOOLKIT

概述

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

Table K.120. DBMS_OBFUSCATION_TOOLKIT 功能特性

功能描述
md5生成数据的 MD5 哈希值。

语法

     MD5(input_string TEXT) RETURNS RAW
   
K.44.7.12.1. 功能描述

本节介绍 dbms_job 的每个功能。

MD5

  • 生成数据的 MD5 哈希值。

示例

select dbms_obfuscation_toolkit.md5(input_string => '测试')::text from dual;
    

K.44.7.13. DBMS_SNAPSHOT

概述

启用您刷新快照(MVIEW)。

Table K.121. DBMS_SNAPSHOT 功能特性

功能描述
refresh刷新快照列表。

语法

     REFRESH(list TEXT,method TEXT default 'C')
   
K.44.7.13.1. 功能描述

本节介绍 dbms_job 的每个功能。

REFRESH

  • 此过程刷新快照(MVIEW)列表。

示例

select dbms_snapshot.refresh('mv_test_dbms_snapshot,mv_test_dbms_snapshot1') from dual;
    

K.44.7.14. DBMS_SQL

概述

在存储过程或匿名块中提供了一种执行动态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);
   
K.44.7.14.1. 功能描述

本节介绍 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);
    
K.44.7.14.2. 使用案例

以下是使用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;
/
    

K.44.7.15. DBMS_STATS

概述

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

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
     )
   
K.44.7.15.1. 功能描述

本节介绍 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;
/
    

K.44.7.16. UTL_FILE

概述

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
   
K.44.7.16.1. 注册和删除目录

注册目录

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';
    
K.44.7.16.2. 描述

本节介绍 UTL_FILE 的每个功能。

FCLOSE

  • FCLOSE 用于关闭打开的文件。

  • 指定一个打开的文件句柄。

示例

     UTL_FILE.FCLOSE(f);
    

FCLOSE_ALL

  • FCLOSE_ALL 关闭会话中所有打开的文件。

  • 使用 FCLOSE_ALL 关闭的文件将无法再进行读写操作。

示例

     PERFORM UTL_FILE.FCLOSE_ALL();
    

FCOPY

  • FCOPY 可以复制整个文件或其连续部分。如果没有指定 startLineendLine,则会复制整个文件。

  • 指定源文件的目录位置。

  • 指定源文件。

  • 指定创建目标文件的目录。

  • 指定目标文件的名称。

  • 指定开始复制的行号。请指定大于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');
    
K.44.7.16.3. 使用示例

在使用 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表中删除该目录的信息。 确保在删除之前该目录的信息不再被其他作业使用。

参考"注册和删除目录"以获取有关如何删除该目录的信息。

K.44.7.17. UTL_RAW

概述

提供用于操作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
   
K.44.7.17.1. 功能描述

本节介绍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;
    

K.44.7.18. UTL_URL

概述

有两个函数提供对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
   
K.44.7.18.1. 特性描述

本节介绍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;
    

K.44.7.19. UTL_ENCODE

概述

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

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
   
K.44.7.19.1. 特性描述

本节介绍 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;
    

K.44.8. 事务行为

大多数事务行为都是完全相同的,但以下内容不同。

K.44.8.1. 处理语句失败。

    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表没有任何记录。

K.44.8.2. 带子查询的DML

情况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相同,但其他版本则不同。

K.44.9. 系统视图参考

这些视图基于Oracle 11g,但一些视图包含新版本的一些字段。

视图在Oracle和sys模式下创建。

为了与Oracle兼容,以下视图具有与Oracle中相应视图相同的字段,但对于那些无法获取或难以获取其字段值的字段返回NULL值。

支持的字段如下所示。某些字段的含义与Oracle不同。

K.44.9.1. [DBA/ALL/USER]_SEQUENCES

  • 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

写入磁盘的最后一个序列号。


K.44.9.2. [DBA/ALL/USER]_SYNONYMS

  • LightDB尚不支持SYNONYMS,因此这些视图目前为空。

K.44.9.3. [DBA/ALL/USER]_TAB_COLS, COLS, [DBA/ALL/USER]_TAB_COLUMNS

  • 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)


K.44.9.4. [DBA/ALL/USER]_TAB_COL_STATISTICS

  • 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

列的平均长度(字节为单位)


K.44.9.5. [DBA/ALL/USER]_OBJECTS, OBJ

  • 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)


K.44.9.6. [DBA/ALL/USER]_CATALOG

  • DBA_CATALOG列出数据库中的所有表、视图和序列(不包括聚簇和同义词)。

  • ALL_CATALOG视图目前与DBA_CATALOG视图相同,且不像Oracle那样进行权限验证。

  • USER_OCATALOG 显示当前用户模式中的表、视图和序列。

  • Oracle 视图中的所有列都得到支持。

Table K.132. ALL_CATALOG

列名

描述

OWNER

表、视图或序列的拥有者

TABLE_NAME

表、视图或序列的名称

TABLE_TYPE

表、视图或序列的类型


K.44.9.7. DICTIONARY, DICT

  • DICTIONARY/DICT 包含数据字典表和视图的描述。

Table K.133. DICTIONARY

Column

Description

TABLE_NAME

对象的名称

COMMENTS

对象的文本注释


K.44.9.8. [DBA/ALL/USER]_DEPENDENCIES

  • 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))


K.44.9.9. [DBA/ALL/USER]_SOURCE

  • 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

存储对象的文本来源


K.44.9.10. [DBA/ALL/USER]_PROCEDURES

  • 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


K.44.9.11. [DBA/ALL/USER]_TRIGGERS

  • 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)


K.44.9.12. [DBA/ALL/USER]_TRIGGER_COLS

  • 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

在触发器中使用的列的名称


K.44.9.13. [DBA/ALL/USER]_TYPES

  • 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)


K.44.9.14. [DBA/ALL/USER]_CONSTRAINTS

  • 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)


K.44.9.15. [DBA/ALL/USER]_CONS_COLUMNS

  • 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

列或属性在对象定义中的原始位置


K.44.9.16. [DBA/ALL/USER]_VIEWS

  • DBA_VIEWS描述了数据库中的所有视图。

  • ALL_VIEWS视图目前与DBA_VIEWS视图相同,并且不像 Oracle 那样进行权限验证。

  • USER_VIEWS描述当前用户拥有的视图。该视图不显示OWNER列。

Table K.142. ALL_VIEWS

字段

描述

OWNER

视图的所有者

VIEW_NAME

视图的名称

TEXT_LENGTH

视图文本的长度

TEXT

视图文本


K.44.9.17. [DBA/ALL/USER]_TABLES, [DBA/ALL/USER]_ALL_TABLES, TAB

  • 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”。


K.44.9.18. [DBA/ALL/USER]_TAB_STATISTICS

  • 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

表最近分析日期。


K.44.9.19. [DBA/ALL/USER]_TAB_COMMENTS

  • 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

对象注释。


K.44.9.20. [DBA/ALL/USER]_COL_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

列的名称


K.44.9.21. [DBA/ALL/USER]_TAB_MODIFICATIONS

  • 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

指示表上一次被修改的时间


K.44.9.22. [DBA/ALL/USER]_INDEXES, IND

  • 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)


K.44.9.23. [DBA/ALL/USER]_INDEX_USAGE

  • 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

索引返回的总行数


K.44.9.24. [DBA/ALL/USER]_IND_COLUMNS

  • 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)排序


K.44.9.25. [DBA/ALL/USER]_IND_EXPRESSIONS

  • 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

列或属性在索引中的位置


K.44.9.26. [DBA/ALL/USER]_IND_STATISTICS

  • 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

最近一次分析索引的日期


K.44.9.27. [DBA/ALL/USER]_USERS

  • 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号


K.44.9.28. DBA_ROLES

  • 描述数据库中所有角色。

Table K.155. DBA_ROLES

列名

描述

ROLE

角色名称

PASSWORD_REQUIRED

此列已被弃用,建议使用 AUTHENTICATION_TYPE 列,始终为“NO”。

AUTHENTICATION_TYPE

指示角色的身份验证机制,始终为“NONE”。

NONE - CREATE ROLE role1;

COMMON

指示给定角色是否为公共角色。始终为“YES”,在 Oracle 11g 中不存在。


K.44.9.29. [DBA/USER]_ROLE_PRIVS

  • 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 中不存在。


K.44.9.30. PRODUCT_COMPONENT_VERSION

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

Table K.157. PRODUCT_COMPONENT_VERSION

列名

描述

PRODUCT

产品名称

VERSION

版本号

STATUS

发布状态


K.44.9.31. PLAN_TABLE

  • PLAN_TABLE 是自动创建的全局临时表,用于保存所有用户的 EXPLAIN PLAN 语句的输出结果。

  • 由于 LightDB 不支持,因此此视图为空,以保证兼容性。

K.44.9.32. DBA_DATA_FILES

  • 描述数据库文件。

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”。


K.44.9.33. [DBA/ALL/USER]_JOBS

  • 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 不同。


K.44.9.34. DBA_JOBS_RUNNING

  • 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'


K.44.9.35. [DBA/ALL/USER]_MVIEWS

  • 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'


K.44.9.36. [DBA/ALL/USER]_MVIEW_LOGS

  • 不支持此视图,因此可以将其用作空视图以实现兼容性。

  • DBA_MVIEW_LOGS描述了数据库中的所有物化视图日志。

  • ALL_MVIEW_LOGS描述了当前用户可以访问的所有物化视图日志。

  • USER_MVIEW_LOGS描述了当前用户拥有的所有物化视图日志。

K.44.9.37. [DBA/ALL/USER]_MVIEW_COMMENTS

  • DBA_MVIEW_COMMENTS显示数据库中物化视图的注释。

  • 目前ALL_MVIEW_COMMENTS视图与DBA_MVIEW_COMMENTS视图相同,且像Oracle那样没有进行权限验证。

  • USER_MVIEW_COMMENTS显示当前用户拥有的物化视图的注释。此视图不显示OWNER列。

Table K.162. ALL_MVIEW_COMMENTS

列名

描述

OWNER

物化视图的所有者

MVIEW_NAME

物化视图的名称

COMMENTS

物化视图的注释


K.44.9.38. [DBA/USER]_TABLESPACES

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

  • USER_TABLESPACES描述当前用户可以访问的表空间。该视图不显示PLUGGED_IN列。

Table K.163. DBA_TABLESPACES

描述

TABLESPACE_NAME

表空间名称

BLOCK_SIZE

表空间块大小(以字节为单位)

STATUS

表空间状态

始终为 'ONLINE'

CONTENTS

表空间内容

始终为 'PERMANENT'


K.44.9.39. NLS_[DATABASE/INSTANCE/SESSION]_PARAMETERS

  • NLS_DATABASE_PARAMETERS 列出数据库的永久 NLS 参数。

  • NLS_INSTANCE_PARAMETERS 列出实例的 NLS 参数。

  • NLS_SESSION_PARAMETERS 列出用户会话的 NLS 参数。

Table K.164. NLS_DATABASE_PARAMETERS

描述

PARAMETER

参数名称

VALUE

参数值


K.44.9.40. [DBA/USER]_SEGMENTS

  • 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 块为单位)


K.44.9.41. [DBA/USER/ALL]_PART_TABLES

  • 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 属性


K.44.9.42. [DBA/USER/ALL]_TAB_PARTITIONS

  • 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

此分区最近一次分析的日期


K.44.9.43. [DBA/USER/ALL]_TAB_SUBPARTITIONS

  • 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

此表格最近一次分析的日期


K.44.9.44. [DBA/USER/ALL]_PART_KEY_COLUMNS

  • 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

列在分区键中的位置


K.44.9.45. [DBA/USER/ALL]_SUBPART_KEY_COLUMNS

  • 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

列在子分区键中的位置


K.44.9.46. [DBA/USER/ALL]_IND_PARTITIONS

  • 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

此分区最近分析的日期


K.44.9.47. [DBA/USER/ALL]_PART_INDEXES

  • 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属性


K.44.9.48. COL

  • 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

列的默认值


English|中文