华为云用户手册

  • 注意事项 只有数据库的所有者或者被授予了数据库ALTER权限的用户才能执行ALTER DATABASE命令,系统管理员默认拥有此权限。针对所要修改属性的不同,对其还有以下权限约束: 修改数据库名称,必须拥有CREATEDB权限。 修改数据库所有者,当前用户必须是该database的所有者或者系统管理员,必须拥有CREATEDB权限,且该用户是新所有者角色的成员。 修改数据库默认表空间,该用户必须拥有新表空间的CREATE权限。这个语句会从物理上将一个数据库原来缺省表空间上的表和索引移至新的表空间。注意不在缺省表空间的表和索引不受此影响。 不能重命名当前使用的数据库,如果需要重新命名,须连接至其他数据库上。
  • 语法格式 修改数据库的最大连接数。 12 ALTER DATABASE database_name [ [ WITH ] CONNECTION LIMIT connlimit ]; 修改数据库名称。 12 ALTER DATABASE database_name RENAME TO new_name; 修改数据库所属者。 12 ALTER DATABASE database_name OWNER TO new_owner;
  • 参数说明 database_name 需要修改属性的数据库名称。 取值范围:字符串,要符合标识符的命名规范。 connlimit 数据库可以接收的最大并发连接数(管理员用户连接除外)。 取值范围:整数,建议填写1~50的整数。-1(缺省)表示没有限制。 new_name 数据库的新名称。 取值范围:字符串,要符合标识符的命名规范。 new_owner 数据库的新所有者。 取值范围:字符串,有效的用户名。 new_tablespace 数据库新的默认表空间,该表空间为数据库中已经存在的表空间。默认的表空间为pg_default。 取值范围:字符串,有效的表空间名。 configuration_parameter value 把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。 当前版本不支持设置数据库级别参数。 取值范围:字符串 DEFAULT OFF RESET FROM CURRENT 根据当前会话连接的数据库设置该参数的值。 RESET configuration_parameter 重置指定的数据库会话参数值。 当前版本不支持重置数据库级别参数。 RESET ALL 重置全部的数据库会话参数值。 当前版本不支持重置数据库级别参数。 修改数据库默认表空间,会将旧表空间中的所有表和索引转移到新表空间中,该操作不会影响其他非默认表空间中的表和索引。 修改的数据库会话参数值,将在下一次会话中生效。 执行完参数设置后,需要手动执行CLEAN CONNECTION清理旧连接,否则可能存在集群节点间参数值不一致。
  • 示例 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637 --创建表customer_demographics_t1。postgres=# CREATE TABLE customer_demographics_t1( CD_DEMO_SK INTEGER NOT NULL, CD_GENDER CHAR(1) , CD_MARITAL_STATUS CHAR(1) , CD_EDUCATION_STATUS CHAR(20) , CD_PURCHASE_ESTIMATE INTEGER , CD_CREDIT_RATING CHAR(10) , CD_DEP_COUNT INTEGER , CD_DEP_EMPLOYED_COUNT INTEGER , CD_DEP_COLLEGE_COUNT INTEGER)WITH (ORIENTATION = COLUMN,COMPRESSION=MIDDLE)DISTRIBUTE BY HASH (CD_DEMO_SK);--插入记录。postgres=# INSERT INTO customer_demographics_t1 VALUES(1920801,'M', 'U', 'DOCTOR DEGREE', 200, 'GOOD', 1, 0,0);--开启事务。postgres=# START TRANSACTION;--更新字段值。postgres=# UPDATE customer_demographics_t1 SET cd_education_status= 'Unknown';--终止事务,上面所执行的更新会被撤销掉。postgres=# ABORT; --查询数据。postgres=# SELECT * FROM customer_demographics_t1 WHERE cd_demo_sk = 1920801;cd_demo_sk | cd_gender | cd_marital_status | cd_education_status | cd_purchase_estimate | cd_credit_rating | cd_dep_count | cd_dep_employed_count | cd_dep_college_count ------------+-----------+-------------------+----------------------+----------------------+------------------+--------------+-----------------------+---------------------- 1920801 | M | U | DOCTOR DEGREE | 200 | GOOD | 1 | 0 | 0(1 row)--删除表。postgres=# DROP TABLE customer_demographics_t1;
  • 语法格式 ALTER AUDIT POLICY [ IF EXISTS ] policy_name { ADD | REMOVE } { [ privilege_audit_clause ] [ access_audit_clause ] };ALTER AUDIT POLICY [ IF EXISTS ] policy_name MODIFY ( filter_group_clause );ALTER AUDIT POLICY [ IF EXISTS ] policy_name DROP FILTER; ALTER AUDIT POLICY [ IF EXISTS ] policy_name COMMENTS policy_comments;ALTER AUDIT POLICY [ IF EXISTS ] policy_name { ENABLE | DISABLE }; privilege_audit_clause: 1 PRIVILEGES { DDL | ALL } access_audit_clause: ACCESS { DML | ALL }
  • 参数说明 policy_name 审计策略名称,需要唯一,不可重复; 取值范围:字符串,要符合标识符的命名规范。 DDL 指的是针对数据库执行如下操作时进行审计,目前支持:CREATE、ALTER、DROP、ANALYZE、COMMENT、GRANT、REVOKE、SET、SHOW、LOGIN_ANY、LOGIN_FAILURE、LOGIN_SUCCESS、LOGOUT。 ALL 指的是上述DDL支持的所有对数据库的操作。 DML 指的是针对数据库执行如下操作时进行审计,目前支持:SELECT、COPY、DEALLOCATE、DELETE、EXECUTE、INSERT、PREPARE、REINDEX、TRUNCATE、UPDATE。 FILTER_TYPE 指定审计策略的过滤信息,过滤类型包括:IP、ROLES、APP。 filter_value 指具体过滤信息内容。 policy_comments 用于记录策略相关的描述信息。 ENABLE|DISABLE 可以打开或关闭统一审计策略。若不指定ENABLE|DISABLE,语句默认为ENABLE。
  • 示例 1 2 3 4 5 6 7 8 91011121314151617181920 -- 创建一个资源池,其控制组指定为"DefaultClass"组下属的"High" Timeshare Workload控制组。postgres=# CREATE RESOURCE POOL pool1 WITH (CONTROL_GROUP="High");-- 创建一个负载组,关联已创建的资源池。postgres=# CREATE WORKLOAD GROUP wg_hr1 USING RESOURCE POOL pool1;--创建一个默认应用映射组,关联默认的负载组。postgres=# CREATE APP WORKLOAD GROUP MAPPING app_wg_map1;-- 更新一个应用映射组关联的负载组名称。postgres=# ALTER APP WORKLOAD GROUP MAPPING app_wg_map1 WITH(WORKLOAD_GPNAME=wg_hr1);--删除应用映射组。postgres=# DROP APP WORKLOAD GROUP MAPPING app_wg_map1;--删除负载组。postgres=# DROP WORKLOAD GROUP wg_hr1;--删除资源池。postgres=# DROP RESOURCE POOL pool1;
  • PG_REPLICATION_SLOTS PG_REPLICATION_SLOTS视图查看复制节点的信息。 表1 PG_REPLICATION_SLOTS字段 名称 类型 描述 slot_name text 复制节点的名称。 plugin text 逻辑复制槽对应的输出插件名。 slot_type text 复制节点的类型。 datoid oid 复制节点的数据库OID。 database name 复制节点的数据库名称。 active Boolean 复制节点是否为激活状态。 t(true):表示是。 f(false):表示不是。 xmin xid 复制节点事务标识。 catalog_xmin xid 逻辑复制槽对应的最早解码事务标识。 restart_lsn text 复制节点的Xlog文件信息。 dummy_standby Boolean 复制节点是否为假备。 t(true):表示是。 f(false):表示不是。 父主题: 系统视图
  • DBE_SQL_UTIL.show_sql_patch show_sql_patch是用于显示给定patch_name对应的SQL PATCH的接口函数,返回运行结果。 限制仅初始用户、sysadmin、opradmin、monadmin用户有权限调用。 表1 DBE_SQL_UTIL.show_sql_patch入参和返回值列表 参数 类型 描述 patch_name IN name PATCH名称。 unique_sql_id OUT bigint 查询全局唯一ID。 enabled OUT bool PATCH是否生效。 abort OUT bool 是否是AbortHint。 hint_str OUT text Hint文本。 父主题: DBE_SQL_UTIL Schema
  • 获取驱动包 根据不同版本的实例,下载不同版本的发布包,如表1所示。 表1 驱动包下载列表 版本 下载地址 3.x 驱动包 驱动包校验包 2.x 驱动包 驱动包校验包 为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的校验包对软件包进行校验,校验方法如下: 上传软件包和软件包校验包到虚拟机(Linux操作系统)的同一目录下。 执行如下命令,校验软件包完整性。 cat GaussDB_driver.zip.sha256 | sha256sum --check 如果回显OK,则校验通过。 GaussDB_driver.zip: OK
  • ai_watchdog_monitor_status 表1 ai_watchdog_monitor_status参数说明 参数 类型 描述 metric_name text metric指标名称: tps:TPS。 tps_hourly:每小时的TPS均值。 shared_used_mem:共享内存使用量(MB)。 dynamic_used_shrctx:共享内存上下文使用量(MB)。 other_used_mem:其他内存使用量(MB)。 process_used_mem:系统常驻内存使用量(MB)。 dynamic_used_mem:动态内存使用量(MB)。 malloc_failures:每个采集间隔内的内存分配失败次数。 D_state_rate:D状态线程比例。 R_state_rate:R状态线程比例。 S_state_rate:S状态线程比例。 db_state:数据库的状态(68表示D、82表示R、83表示S)。 cpu_usage:CPU使用率,上限100。 disk_io:两个采集间隔内的磁盘I/O延迟。 network_io:两个采集间隔内的网络I/O延迟。 threadpool_usage:线程池使用率。 threadpool_hang_rate:线程池group处于hang状态的比例。 max_length int 采集队列长队。 current_length int 当前采集到的样本数。 collection_interval int 采集间隔,单位秒。 latest_value int 上次采集到的值,没采集到为null。 last_report timestamp 上次采集时刻。 父主题: AI Watchdog
  • 语法 RAISE有以下五种语法格式: 图1 raise_format::= 图2 raise_condition::= 图3 raise_sqlstate::= 图4 raise_option::= 图5 raise::= 参数说明: level选项用于指定错误级别,有DEBUG,LOG,INFO,NOTICE,WARNING以及EXCEPTION(默认值)。EXCEPTION抛出一个正常终止当前事务的异常,其他的仅产生不同异常级别的信息。特殊级别的错误信息是否报告到客户端、写到服务器日志由log_min_messages和client_min_messages这两个GUC参数控制。 format:格式字符串,指定要报告的错误消息文本。格式字符串后可跟表达式,用于向消息文本中插入。在格式字符串中,%由format后面跟着的参数的值替换,%%用于打印出%。例如: --v_job_id 将替换字符串中的 %:RAISE NOTICE 'Calling cs_create_job(%)',v_job_id; option = expression:向错误报告中添加另外的信息。关键字option可以是MESSAGE、DETAIL、HINT以及ERRCODE,并且每一个expression可以是任意的字符串。 MESSAGE,指定错误消息文本,这个选项不能用于在USING前包含一个格式字符串的RAISE语句中。 DETAIL,说明错误的详细信息。 HINT,用于打印出提示信息。 ERRCODE,向报告中指定错误码(SQLSTATE)。可以使用条件名称或者直接用五位字符的SQLSTATE错误码。 condition_name:错误码对应的条件名。 sqlstate:错误码。 如果在RAISE EXCEPTION命令中既没有指定条件名也没有指定SQLSTATE,默认用RAISE EXCEPTION (P0001)。如果没有指定消息文本,默认用条件名或者SQLSTATE作为消息文本。 当由SQLSTATE指定了错误码,则不局限于已定义的错误码,可以选择任意包含五个数字或者大写的ASCII字母的错误码,而不是00000。建议避免使用以三个0结尾的错误码,因为这种错误码是类别码,会被整个种类捕获。 兼容O模式下,SQLCODE等于SQLSTATE。 图5所示的语法不接任何参数。这种形式仅用于一个BEGIN块中的EXCEPTION语句,它使得错误重新被处理。
  • PKG_UTIL PKG_UTIL支持的所有接口请参见表1: 表1 PKG_UTIL 接口名称 描述 PKG_UTIL.LOB_GET_LENGTH 获取lob的长度。 PKG_UTIL.LOB_READ 读取lob对象的一部分。 PKG_UTIL.LOB_WRITE 将源对象按照指定格式写入到目标对象。 PKG_UTIL.LOB_APPEND 将lob源对象追加到目标lob对象。 PKG_UTIL.LOB_COMPARE 根据指定长度比较两个lob对象。 PKG_UTIL.LOB_MATCH 返回一个字符串在LOB中第N次出现的位置。 PKG_UTIL.LOB_RESET 将lob的指定位置重置为指定字符。 PKG_UTIL.LOB_GET_LENGTH 该函数获取并返回指定的LOB类型对象的长度。 PKG_UTIL.LOB_READ_HUGE 根据指定的长度及起始位置偏移读取LOB内容的一部分,并返回读取到的LOB和长度。 PKG_UTIL.LOB_WRITEAPPEND_HUGE 该函数将源blob/clob对象读取指定长度内容,并追加到目标blob/clob对象, 并返回目标对象。 PKG_UTIL.LOB_APPEND_HUGE 该函数将源blob/clob对象追加到目标blob/clob对象, 并返回目标对象。 PKG_UTIL.READ_BFILE_TO_BLOB 该函数将源BFILE文件读取成目标BLOB对象, 并返回目标对象。 PKG_UTIL.LOB_COPY_HUGE 该函数将源blob/clob对象,从指定偏移读取指定长度内容,写入到目标blob/clob对象的指定偏移位置, 并返回目标对象。 PKG_UTIL.BLOB_RESET 该函数将BLOB中一段数据set为value值,返回处理后的BLOB以及实际处理的长度。 PKG_UTIL.CLOB_RESET 该函数将一段数据set为空格,返回处理后的CLOB以及实际处理的长度。 PKG_UTIL.LOADBLOBFROMFILE 将源BFILE对象,从指定偏移读取指定长度内容,写入到目标BLOB对象的指定偏移位置, 并返回目标对象,读取位置,写入位置。 PKG_UTIL.LOADCLOBFROMFILE 将源BFILE对象,从指定偏移读取指定长度内容,写入到目标CLOB对象的指定偏移位置, 并返回目标对象,读取位置,写入位置。 PKG_UTIL.LOB_CONVERTTOBLOB_HUGE 将src_clob从指定偏移位置读取指定长度内容转成BLOB,并写入dest_lob的指定位置,amout为要转换的长度。 PKG_UTIL.LOB_CONVERTTOCLOB_HUGE 将src_clob从指定偏移位置读取指定长度内容转成CLOB,并写入dest_lob的指定位置,amout为要转换的长度。 PKG_UTIL.BFILE_GET_LENGTH 该函数获取并返回指定的BFILE文件的长度。 PKG_UTIL.BFILE_OPEN 该函数打开BFILE文件,返回文件描述符。 PKG_UTIL.BFILE_CLOSE 该函数关闭打开的BFILE文件。 PKG_UTIL.LOB_WRITE_HUGE 将源对象从起始位置读取len长度内容,写入目标LOB对象的指定偏移位置,覆盖该位置原本内容, 并返回目标LOB对象。 PKG_UTIL.IO_PRINT 将字符串打印输出。 PKG_UTIL.RAW_GET_LENGTH 获取raw的长度。 PKG_UTIL.RAW_CAST_FROM_VARCHAR2 将varchar2转化为raw。 PKG_UTIL.RAW_CAST_FROM_BINARY_INTEGER 将binary integer转化为raw。 PKG_UTIL.RAW_CAST_TO_BINARY_INTEGER 将raw转化为binary integer。 PKG_UTIL.SET_RANDOM_SEED 设置随机种子。 PKG_UTIL.RANDOM_GET_VALUE 返回随机值。 PKG_UTIL.FILE_SET_DIRNAME 设置当前操作的目录。 PKG_UTIL.FILE_OPEN 根据指定文件名和设置的目录打开一个文件。 PKG_UTIL.FILE_SET_MAX_LINE_SIZE 设置写入文件一行的最大长度。 PKG_UTIL.FILE_IS_CLOSE 检测一个文件句柄是否关闭。 PKG_UTIL.FILE_READ 从一个打开的文件句柄中读取指定长度的数据。 PKG_UTIL.FILE_READLINE 从一个打开的文件句柄中读取一行数据。 PKG_UTIL.FILE_WRITE 将BUFFER中的数据写入到文件中。 PKG_UTIL.FILE_WRITELINE 将buffer写入文件,并追加换行符。 PKG_UTIL.FILE_NEWLINE 新起一行。 PKG_UTIL.FILE_READ_RAW 从一个打开的文件句柄中读取指定长度的二进制数据。 PKG_UTIL.FILE_WRITE_RAW 将二进制数据写入到文件中。 PKG_UTIL.FILE_FLUSH 将一个文件句柄中的数据写入到物理文件中。 PKG_UTIL.FILE_CLOSE 关闭一个打开的文件句柄。 PKG_UTIL.FILE_REMOVE 删除一个物理文件,操作需要有对应权限。 PKG_UTIL.FILE_RENAME 对于磁盘上的文件进行重命名,类似Unix的mv。 PKG_UTIL.FILE_SIZE 返回文件大小。 PKG_UTIL.FILE_BLOCK_SIZE 返回文件含有的块数量。 PKG_UTIL.FILE_EXISTS 判断文件是否存在。 PKG_UTIL.FILE_GETPOS 返回文件的偏移量,单位字节。 PKG_UTIL.FILE_SEEK 设置文件位置为指定偏移。 PKG_UTIL.FILE_CLOSE_ALL 关闭一个会话中打开的所有文件句柄。 PKG_UTIL.EXCEPTION_REPORT_ERROR 抛出一个异常。 PKG_UTIL.LOB_GET_LENGTH 该函数LOB_GET_LENGTH获取输入数据的长度。 PKG_UTIL.LOB_GET_LENGTH函数原型为: 123456789 PKG_UTIL.LOB_GET_LENGTH(lob IN CLOB)RETURN INTEGER;PKG_UTIL.LOB_GET_LENGTH(lob IN BLOB)RETURN INTEGER; 表2 PKG_UTIL.LOB_GET_LENGTH接口参数说明 参数 类型 入参/出参 是否可以为空 描述 lob clob/blob IN 否 待获取长度的对象。 PKG_UTIL.LOB_READ 该函数LOB_READ读取一个对象,并返回指定部分。 PKG_UTIL.LOB_READ函数原型为: 1234567 PKG_UTIL.LOB_READ(lob IN anyelement,len IN int,start IN int,mode IN int)RETURN ANYELEMENT 表3 PKG_UTIL.LOB_READ接口参数说明 参数 类型 入参/出参 是否可以为空 描述 lob clob/blob IN 否 clob或者blob类型数据。 len int IN 否 返回结果长度。 start int IN 否 相较于第一个字符的偏移量。 mode int IN 否 判断读取操作的类型, 0 :read; 1 : trim; 2 : substr。 PKG_UTIL.LOB_WRITE 该函数LOB_WRITE将源对象按照指定的参数写入目标对象,并返回目标对象。 PKG_UTIL.LOB_WRITE函数原型为: 1 2 3 4 5 6 7 8 91011121314 PKG_UTIL.LOB_WRITE(dest_lob INOUT blob,src_lob IN rawlen IN int,start_pos IN bigint)RETURN BLOB;PKG_UTIL.LOB_WRITE(dest_lob INOUT clob,src_lob IN varchar2len IN int,start_pos IN bigint)RETURN CLOB; 表4 PKG_UTIL.LOB_WRITE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 dest_lob clob/blob INOUT 否 写入的目标对象。 src_lob clob/blob IN 否 被写入的源对象。 len int IN 否 源对象的写入长度。 start_pos bigint IN 否 目标对象的写入起始位置。 PKG_UTIL.LOB_APPEND 该函数LOB_APPEND将源blob/clob对象追加到目标blob/clob对象, 并返回目标对象。 PKG_UTIL.LOB_APPEND函数原型为: 1 2 3 4 5 6 7 8 910111213 PKG_UTIL.LOB_APPEND(dest_lob INOUT blob,src_lob IN blob,len IN int default NULL)RETURN BLOB;PKG_UTIL.LOB_APPEND(dest_lob INOUT clob,src_lob IN clob,len IN int default NULL)RETURN CLOB; 表5 PKG_UTIL.LOB_APPEND接口参数说明 参数 类型 入参/出参 是否可以为空 描述 dest_lob blob/clob INOUT 否 写入的目标blob/clob对象。 src_lob blob/clob IN 否 被写入的源blob/clob对象。 len int IN 是 src中读取并append到dest上的长度,默认null,将src全部append上去。 PKG_UTIL.LOB_COMPARE 该函数LOB_COMPARE按照指定的起始位置、个数比较对象是否相同,lob1大则返回1,lob2大返回-1,相等返回0。 PKG_UTIL.LOB_COMPARE函数原型为: 12345678 PKG_UTIL.LOB_COMPARE(lob1 IN anyelement,lob2 IN anyelement,len IN int default 1073741771,start_pos1 IN int default 1,start_pos2 IN int default 1)RETURN INTEGER; 表6 PKG_UTIL.LOB_COMPARE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 lob1 clob/blob IN 否 待比较的字符串。 lob2 clob/blob IN 否 待比较的字符串。 len int IN 否 比较的长度。 start_pos1 int IN 否 lob1起始偏移量。 start_pos2 int IN 否 lob2起始偏移量。 PKG_UTIL.LOB_MATCH 该函数LOB_MATCH返回pattern出现在lob对象中第match_nth次的位置。 PKG_UTIL.LOB_MATCH函数原型为: 1234567 PKG_UTIL.LOB_MATCH(lob IN anyelement,pattern IN anyelement,start IN int,match_nth IN int default 1)RETURN INTEGER; 表7 PKG_UTIL.LOB_MATCH接口参数说明 参数 类型 入参/出参 是否可以为空 描述 lob clob/blob IN 否 待比较的字符串。 pattern clob/blob IN 否 待匹配的pattern。 start int IN 否 lob的起始比较位置。 match_nth int IN 否 第几次匹配到。 PKG_UTIL.LOB_RESET 该函数LOB_RESET清除一段数据为字符value。 PKG_UTIL.LOB_RESET函数原型为: 1234567 PKG_UTIL.LOB_RESET(lob IN blob,len IN int,start IN int,value IN int default 0)RETURN record; 表8 PKG_UTIL.LOB_RESET接口参数说明 参数 类型 入参/出参 是否可以为空 描述 lob blob IN 否 待重置的字符串。 len int IN 否 重置的长度。 start int IN 否 重置的起始位置。 value int IN 是 设置的字符。默认值‘0’。 PKG_UTIL.LOB_GET_LENGTH 该函数获取并返回指定的LOB类型对象的长度。 PKG_UTIL.LOB_GET_LENGTH函数原型为: 1234567 PKG_UTIL.LOB_GET_LENGTH( lob IN blob)RETURN BIGINT;PKG_UTIL.LOB_GET_LENGTH( lob IN clob)RETURN BIGINT; 表9 PKG_UTIL.LOB_GET_LENGTH接口参数说明 参数 类型 入参/出参 是否可以为空 描述 lob BLOB/CLOB IN 否 指定的LOB类型对象。 PKG_UTIL.LOB_READ_HUGE 根据指定的长度及起始位置偏移读取LOB内容的一部分,并返回读取到的LOB和长度。 PKG_UTIL.LOB_READ_HUGE函数原型为: 1 2 3 4 5 6 7 8 91011121314151617181920 PKG_UTIL.LOB_READ_HUGE( lob IN CLOB, len IN BIGINT, start_pos IN BIGINT, mode IN INTEGER)RETURN RECORD;PKG_UTIL.LOB_READ_HUGE( lob IN BLOB, len IN BIGINT, start_pos IN BIGINT, mode IN INTEGER)RETURN RECORD;PKG_UTIL.LOB_READ_HUGE( fd IN INTEGER, len IN BIGINT, start_pos IN BIGINT, mode IN INTEGER)RETURN RECORD; 表10 PKG_UTIL.LOB_READ_HUGE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 lob/fd BLOB/CLOB/INTEGER IN 否 指定的LOB类型对象/BFILE文件的文件描述符。 len BIGINT IN 否 读取长度。 start_pos BIGINT IN 否 读取起始偏移位置。 mode INTEGER IN 否 read模式(0代表read、1代表trim、2代表substr)。 PKG_UTIL.LOB_WRITEAPPEND_HUGE 该函数LOB_WRITEAPPEND_HUGE将源blob/clob对象读取指定长度内容,并追加到目标blob/clob对象, 并返回目标对象。 PKG_UTIL.LOB_WRITEAPPEND_HUGE函数原型为: 1 2 3 4 5 6 7 8 91011 PKG_UTIL.LOB_WRITEAPPEND_HUGE( dest_lob INOUT CLOB, len IN INTEGER, src_lob IN VARCHAR2)RETURN CLOB;PKG_UTIL.LOB_WRITEAPPEND_HUGE( dest_lob INOUT BLOB, len IN INTEGER, src_lob IN RAW)RETURN BLOB; 表11 PKG_UTIL.LOB_WRITEAPPEND_HUGE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 dest_lob BLOB/CLOB INOUT 否 写入的目标BLOB/CLOB对象。 len INTEGER IN 是 写入源对象的长度,为NULL则默认写入源对象全部。 src_lob VARCHAR2/RAW IN 否 被写入的源BLOB/CLOB对象。 PKG_UTIL.LOB_APPEND_HUGE 该函数LOB_APPEND_HUGE将源blob/clob对象追加到目标blob/clob对象, 并返回目标对象。 PKG_UTIL.LOB_APPEND_HUGE函数原型为: 1234 PKG_UTIL.LOB_APPEND_HUGE( dest_lob INOUT BLOB, src_lob IN BLOB)RETURN BLOB; 1234 PKG_UTIL.LOB_APPEND_HUGE( dest_lob INOUT CLOB, src_lob IN CLOB)RETURN CLOB; 表12 PKG_UTIL.LOB_APPEND_HUGE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 dest_lob BLOB/CLOB INOUT 否 写入的目标BLOB/CLOB对象。 src_lob BLOB/CLOB IN 否 被写入的源BLOB/CLOB对象。 PKG_UTIL.READ_BFILE_TO_BLOB 该函数READ_BFILE_TO_BLOB将源BFILE文件读取成目标BLOB对象, 并返回目标对象。 PKG_UTIL.READ_BFILE_TO_BLOB函数原型为: 123 PKG_UTIL.READ_BFILE_TO_BLOB( fd IN INTEGER)RETURN BLOB; 表13 PKG_UTIL.READ_BFILE_TO_BLOB接口参数说明 参数 类型 入参/出参 是否可以为空 描述 fd BFILE IN 否 读取的源BFILE文件。 PKG_UTIL.LOB_COPY_HUGE 该函数LOB_COPY_HUGE将源blob/clob对象,从指定偏移读取指定长度内容,写入到目标blob/clob对象的指定偏移位置, 并返回目标对象。 PKG_UTIL.LOB_COPY_HUGE函数原型为: 1 2 3 4 5 6 7 8 9101112131415 PKG_UTIL.LOB_COPY_HUGE( lob_obj INOUT BLOB, source_obj IN BLOB, amount IN BIGINT, dest_offset IN BIGINT DEFAULT 1, src_offset IN BIGINT DEFAULT 1 )RETURN BLOB;PKG_UTIL.LOB_COPY_HUGE( lob_obj INOUT CLOB, source_obj IN CLOB, amount IN BIGINT, dest_offset IN BIGINT DEFAULT 1, src_offset IN BIGINT DEFAULT 1 )RETURN CLOB; 表14 PKG_UTIL.LOB_COPY_HUGE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 lob_obj BLOB/CLOB INOUT 否 目标BLOB/CLOB对象。 source_obj BLOB/CLOB IN 否 源BLOB/CLOB对象。 amount BIGINT IN 否 拷贝的长度(BLOB以字节为单位,CLOB以字符为单位)。 dest_offset BIGINT IN 否 目标LOB的载入偏移位置。 src_offset BIGINT IN 否 源LOB的读取偏移位置。 PKG_UTIL.BLOB_RESET 该函数将BLOB中一段数据set为value值,返回处理后的BLOB以及实际处理的长度。 PKG_UTIL.BLOB_RESET函数原型为: 123456 PKG_UTIL.BLOB_RESET( lob INOUT BLOB, len INOUT BIGINT, start_pos IN BIGINT DEFAULT 1, value IN INTEGER DEFAULT 0)RETURN RECORD; 表15 PKG_UTIL.BLOB_RESET接口参数说明 参数 类型 入参/出参 是否可以为空 描述 lob BLOB INOUT 否 待重置的LOB。 len INTEGER INOUT 否 重置的长度,单位字节。 start INTEGER IN 否 重置的起始位置。 value INTEGER IN 是 设置的字符。默认值‘0’。 PKG_UTIL.CLOB_RESET 该函数将一段数据set为空格。 PKG_UTIL.CLOB_RESET函数原型为: 12345 PKG_UTIL.CLOB_RESET( lob INOUT CLOB, len INOUT BIGINT, start_pos IN BIGINT DEFAULT 1)RETURN RECORD; 表16 PKG_UTIL.CLOB_RESET接口参数说明 参数 类型 入参/出参 是否可以为空 描述 lob CLOB INOUT 否 待重置的LOB。 len INTEGER INOUT 否 重置的长度,单位字符。 start INTEGER IN 否 重置的起始位置,默认为1。 PKG_UTIL.LOADBLOBFROMFILE 该函数LOADBLOBFROMFILE将源BFILE对象,从指定偏移读取指定长度内容,写入到目标BLOB对象的指定偏移位置, 并返回目标对象,读取位置,写入位置。 PKG_UTIL.LOADBLOBFROMFILE函数原型为: 1234567 PKG_UTIL.LOADBLOBFROMFILE( dest_lob INOUT BLOB, fd IN INTEGER, amount IN BIGINT, dest_offset INOUT BIGINT, file_offset INOUT BIGINT)RETURN RECORD; 表17 PKG_UTIL.LOADBLOBFROMFILE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 dest_lob BLOB INOUT 否 IN参数为目标BLOB对象,OUT参数为写入后的目标BLOB对象。 fd INTEGER IN 否 源BFILE对象的文件描述符。 amount BIGINT IN 否 拷贝的长度(BLOB以字节为单位,CLOB以字符为单位)。 dest_offset BIGINT INOUT 否 IN参数为目标LOB的写入偏移位置,OUT参数为实际写入位置。 src_offset BIGINT INOUT 否 IN参数为源BFILE的读取偏移位置,OUT参数为实际读取位置。 PKG_UTIL.LOADCLOBFROMFILE 该函数LOADCLOBFROMFILE将源BFILE对象,从指定偏移读取指定长度内容,写入到目标CLOB对象的指定偏移位置, 并返回目标对象,读取位置,写入位置。 PKG_UTIL.LOADCLOBFROMFILE函数原型为: 1234567 PKG_UTIL.LOADCLOBFROMFILE( dest_lob INOUT CLOB, fd IN INTEGER, amount IN BIGINT, dest_offset INOUT BIGINT, file_offset INOUT BIGINT)RETURN RECORD; 表18 PKG_UTIL.LOADCLOBFROMFILE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 dest_lob CLOB INOUT 否 IN参数为目标CLOB对象,OUT参数为写入后的目标CLOB对象。 fd INTEGER IN 否 源BFILE对象的文件描述符。 amount BIGINT IN 否 拷贝的长度(CLOB以字符为单位)。 dest_offset BIGINT INOUT 否 IN参数为目标LOB的写入偏移位置,OUT参数为实际写入位置。 src_offset BIGINT INOUT 否 IN参数为源BFILE的读取偏移位置,OUT参数为实际读取位置。 PKG_UTIL.LOB_CONVERTTOBLOB_HUGE 将src_clob从指定偏移位置读取指定长度内容转成BLOB,并写入dest_lob的指定位置,amout为要转换的长度。 PKG_UTIL.LOB_CONVERTTOBLOB_HUGE函数原型为: 1234567 PKG_UTIL.LOB_CONVERTTOBLOB_HUGE( dest_lob INOUT BLOB, src_clob IN CLOB, amount IN BIGINT, dest_offset INOUT BIGINT, src_offset INOUT BIGINT))RETURN RECORD; 表19 PKG_UTIL.LOB_CONVERTTOBLOB_HUGE接口参数说明 参数 描述 dest_lob 目标lob。 src_clob 要转换的clob。 amount 转换的长度,字符为单位。 dest_offset IN参数为目标lob的写入起始位置,OUT参数为实际的写入位置。 src_offset IN参数为源clob的读取起始位置,OUT参数为实际的读取起始位置。 PKG_UTIL.LOB_CONVERTTOCLOB_HUGE 将src_clob从指定偏移位置读取指定长度内容转成CLOB,并写入dest_lob的指定位置,amout为要转换的长度。 PKG_UTIL.LOB_CONVERTTOCLOB_HUGE函数原型为: 1234567 PKG_UTIL.LOB_CONVERTTOCLOB_HUGE( dest_lob INOUT CLOB, src_blob IN BLOB, amount IN BIGINT, dest_offset INOUT BIGINT, src_offset INOUT BIGINT))RETURN RECORD; 表20 PKG_UTIL.LOB_CONVERTTOCLOB_HUGE接口参数说明 参数 描述 dest_lob 目标lob。 src_blob 要转换的blob。 amount 转换的长度,字节为单位。 dest_offset IN参数为目标lob的写入起始位置,OUT参数为实际的写入位置。 src_offset IN参数为源clob的读取起始位置,OUT参数为实际的读取起始位置。 PKG_UTIL.BFILE_GET_LENGTH 该函数获取并返回指定的BFILE文件的长度。 PKG_UTIL.BFILE_GET_LENGTH函数原型为: 123 PKG_UTIL.BFILE_GET_LENGTH( fd INTEGER)RETURN BIGINT; 表21 PKG_UTIL.LOB_GET_LENGTH接口参数说明 参数 类型 入参/出参 是否可以为空 描述 fd INTEGER IN 否 指定的BFILE文件的文件描述符。 PKG_UTIL.BFILE_OPEN 该函数打开BFILE文件,返回文件描述符。 PKG_UTIL.BFILE_OPEN函数原型为: 1234 PKG_UTIL.BFILE_OPEN( file_name TEXT, open_mode TEXT)RETURN INTEGER; 表22 PKG_UTIL.BFILE_OPEN接口参数说明 参数 类型 入参/出参 是否可以为空 描述 file_name TEXT IN 否 指定的BFILE文件的文件name。 open_mode TEXT IN 否 打开方式(只支持‘r’,read功能) PKG_UTIL.BFILE_CLOSE 该函数关闭打开的BFILE文件。 PKG_UTIL.BFILE_CLOSE函数原型为: 123 PKG_UTIL.BFILE_CLOSE( fd INTEGER)RETURN bool; 表23 PKG_UTIL.BFILE_CLOSE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 fd INTEGER IN 否 指定的BFILE文件的文件描述符。 PKG_UTIL.LOB_WRITE_HUGE 将源对象从起始位置读取len长度内容,写入目标LOB对象的指定偏移位置,覆盖该位置原本内容, 并返回目标LOB对象。 PKG_UTIL.LOB_WRITE_HUGE函数原型为: 1 2 3 4 5 6 7 8 910111213 PKG_UTIL.LOB_WRITE_HUGE( dest_lob INOUT BLOB, len IN INTEGER, start_pos IN BIGINT, src_lob IN RAW)RETURN BLOB;PKG_UTIL.LOB_WRITE_HUGE( dest_lob INOUT CLOB, len IN INTEGER, start_pos IN BIGINT, src_lob IN VARCHAR2)RETURN CLOB; 表24 PKG_UTIL.LOB_WRITE_HUGE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 dest_lob BLOB/CLOB INOUT 否 IN参数为待写入的目标LOB,OUT参数为写入内容后的LOB。 len INTEGER IN 否 待写入的长度(BLOB以字节为单位,CLOB以字符为单位)。 start_pos BIGINT IN 否 在dest_lob中写入的偏移位置。 src_lob RAW/VARCHAR2 IN 否 源LOB对象。 PKG_UTIL.IO_PRINT 该函数IO_PRINT将一段字符串打印输出。 PKG_UTIL.IO_PRINT函数原型为: 12345 PKG_UTIL.IO_PRINT(format IN text,is_one_line IN boolean)RETURN void; 表25 PKG_UTIL.IO_PRINT接口参数说明 参数 类型 入参/出参 是否可以为空 描述 format text IN 否 待打印输出的字符串。 is_one_line boolean IN 否 是否输出为一行。 PKG_UTIL.RAW_GET_LENGTH 该函数RAW_GET_LENGTH获取raw的长度。 PKG_UTIL.RAW_GET_LENGTH函数原型为: 1234 PKG_UTIL.RAW_GET_LENGTH(value IN raw)RETURN integer; 表26 PKG_UTIL.RAW_GET_LENGTH接口参数说明 参数 类型 入参/出参 是否可以为空 描述 raw raw IN 否 待获取长度的对象。 PKG_UTIL.RAW_CAST_FROM_VARCHAR2 该函数RAW_CAST_FROM_VARCHAR2将varchar2转化为raw。 PKG_UTIL.RAW_CAST_FROM_VARCHAR2函数原型为: 1234 PKG_UTIL.RAW_CAST_FROM_VARCHAR2(str IN varchar2)RETURN raw; 表27 PKG_UTIL.RAW_CAST_FROM_VARCHAR2接口参数说明 参数 类型 入参/出参 是否可以为空 描述 str varchar2 IN 否 需要转化的源数据。 PKG_UTIL.RANDOM_SET_SEED 该函数RANDOM_SET_SEED设置随机数种子。 PKG_UTIL.RANDOM_SET_SEED函数原型为: 1234 PKG_UTIL.RANDOM_SET_SEED(seed IN int)RETURN integer; 表28 PKG_UTIL.RANDOM_SET_SEED接口参数说明 参数 类型 入参/出参 是否可以为空 描述 seed int IN 否 随机数种子。 PKG_UTIL.RANDOM_GET_VALUE 该函数RANDOM_GET_VALUE返回0~1区间的一个随机数,其有效数字为15位。 PKG_UTIL.RANDOM_GET_VALUE函数原型为: 123 PKG_UTIL.RANDOM_GET_VALUE()RETURN numeric; PKG_UTIL.FILE_SET_DIRNAME 设置当前操作的目录,基本上所有涉及单个目录的操作,都需要调用此方法先设置操作的目录。 PKG_UTIL.FILE_SET_DIRNAME函数原型为: 1234 PKG_UTIL.FILE_SET_DIRNAME(dir IN text)RETURN bool 表29 PKG_UTIL.FILE_SET_DIRNAME接口参数说明 参数 描述 dirname 文件的目录位置,这个字符串是一个目录对象名。 说明: 文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误, 下面的涉及location作为参数的函数也是同样的情况。 PKG_UTIL.FILE_OPEN 该函数用来打开一个文件,最多可以同时打开50个文件。并且该函数返回INTEGER类型的一个句柄。 PKG_UTIL.FILE_OPEN函数原型为: 123 PKG_UTIL.FILE_OPEN(file_name IN text, open_mode IN integer) 表30 PKG_UTIL.FILE_OPEN接口参数说明 参数 描述 file_name 文件名,包含扩展(文件类型),不包括路径名。如果文件名中包含路径,在OPEN中会被忽略,在Unix系统中,文件名不能以/.结尾。 open_mode 指定文件的打开模式,包含r:read text,w: write text和a: append text。 说明: 对于写操作,会检测文件类型,如果写入elf文件,将会报错并退出。 PKG_UTIL.FILE_SET_MAX_LINE_SIZE 设置写入文件一行的最大长度。 PKG_UTIL.FILE_SET_MAX_LINE_SIZE函数原型为: 123 PKG_UTIL.FILE_SET_MAX_LINE_SIZE(max_line_size in integer)RETURN BOOL 表31 PKG_UTIL.FILE_SET_MAX_LINE_SIZE接口参数说明 参数 描述 max_line_size 每行最大字符数,包含换行符(最小值是1,最大值是32767)。如果没有指定,会指定一个默认值1024。 PKG_UTIL.FILE_IS_CLOSE 检测一个文件句柄是否关闭。 PKG_UTIL.FILE_IS_CLOSE函数原型为: 1234 PKG_UTIL.FILE_IS_CLOSE(file in integer)RETURN BOOL 表32 PKG_UTIL.FILE_IS_CLOSE接口参数说明 参数 描述 file 一个打开的文件句柄。 PKG_UTIL.FILE_READ 根据指定的长度从一个打开的文件句柄中读取出数据。 PKG_UTIL.FILE_READ函数原型为: 1234 PKG_UTIL.FILE_READ(file IN integer,buffer OUT text,len IN bigint default 1024) 表33 PKG_UTIL.FILE_READ接口参数说明 参数 描述 file 通过调用OPEN打开的文件句柄,文件必须以读的模式打开,否则会抛出INVALID_OPERATION的异常。 buffer 用于接收数据的BUFFER。 len 从文件中读取的字节数。 PKG_UTIL.FILE_READLINE 根据指定的长度从一个打开的文件句柄中读取出一行数据。 PKG_UTIL.FILE_READLINE函数原型为: 1234 PKG_UTIL.FILE_READLINE(file IN integer,buffer OUT text,len IN integer default NULL) 表34 PKG_UTIL.FILE_READLINE接口参数说明 参数 描述 file 通过调用OPEN打开的文件句柄,文件必须以读的模式打开,否则会抛出INVALID_OPERATION的异常。 buffer 用于接收数据的BUFFER。 len 从文件中读取的字节数,默认是NULL。如果是默认NULL,会使用max_line_size来指定大小。 PKG_UTIL.FILE_WRITE 将BUFFER中指定的数据写入到文件中。 PKG_UTIL.FILE_WRITE函数原型为: 12345 PKG_UTIL.FILE_WRITE(file in integer,buffer in text)RETURN BOOL 表35 PKG_UTIL.FILE_WRITE接口参数说明 参数 描述 file 一个打开的文件句柄。 buffer 要写入文件的文本数据,BUFFER的最大值是32767个字节。如果没有指定值,默认是1024个字节,没有刷新到文件之前,一系列的PUT操作的BUFFER总和不能超过32767个字节。 说明: 对于写操作,会检测文件类型,如果写入elf文件,将会报错并退出。 PKG_UTIL.FILE_NEWLINE 向一个打开的文件中写入一个行终结符。行终结符和平台相关。 PKG_UTIL.FILE_NEWLINE函数原型为: 1234 PKG_UTIL.FILE_NEWLINE(file in integer)RETURN BOOL 表36 PKG_UTIL.FILE_NEWLINE接口参数说明 参数 描述 file 一个打开的文件句柄。 PKG_UTIL.FILE_WRITELINE 向一个打开的文件中写入一行。 PKG_UTIL.FILE_WRITELINE函数原型为: 12345 PKG_UTIL.FILE_WRITELINE(file in integer,buffer in text)RETURN BOOL 表37 PKG_UTIL.FILE_WRITELINE接口参数说明 参数 描述 file 一个打开的文件句柄。 buffer 要写入的内容 PKG_UTIL.FILE_READ_RAW 从一个打开的文件句柄中读取指定长度的二进制数据,返回读取的二进制数据,返回类型为raw。 PKG_UTIL.FILE_READ_RAW函数原型为: 12345 PKG_UTIL.FILE_READ_RAW(file in integer,length in integer default NULL)RETURN raw 表38 PKG_UTIL.FILE_READ_RAW接口参数说明 参数 描述 file 一个打开的文件句柄。 length 要读取的长度,默认为NULL。默认情况下读取文件中所有数据,最大为1G。 PKG_UTIL.FILE_WRITE_RAW 向一个打开的文件中写入传入二进制对象RAW。插入成功返回true。 PKG_UTIL.FILE_WRITE_RAW函数原型为: 12345 PKG_UTIL.FILE_WRITE_RAW(file in integer,r in raw)RETURN BOOL 表39 PKG_UTIL.FILE_WRITE_RAW接口参数说明 参数 描述 file 一个打开的文件句柄。 r 准备传入文件的数据 说明: 对于写操作,会检测文件类型,如果写入elf文件,将会报错并退出。 PKG_UTIL.FILE_FLUSH 一个文件句柄中的数据要写入到物理文件中,缓冲区中的数据必须要有一个行终结符。当文件必须在打开时读取,刷新非常有用。例如,调试信息可以刷新到文件中,以便立即读取。 PKG_UTIL.FILE_FLUSH函数原型为: 1234 PKG_UTIL.FILE_FLUSH(file in integer)RETURN VOID 表40 PKG_UTIL.FILE_FLUSH接口参数说明 参数 描述 file 一个打开的文件句柄。 PKG_UTIL.FILE_CLOSE 关闭一个打开的文件句柄。 PKG_UTIL.FILE_CLOSE函数原型为: 1234 PKG_UTIL.FILE_CLOSE(file in integer)RETURN BOOL 表41 PKG_UTIL.FILE_CLOSE接口参数说明 参数 描述 file 一个打开的文件句柄。 PKG_UTIL.FILE_REMOVE 删除一个磁盘文件,操作的时候需要有充分的权限。 PKG_UTIL.FILE_REMOVE函数原型为: 1234 PKG_UTIL.FILE_REMOVE(file_name in text)RETURN VOID 表42 PKG_UTIL.FILE_REMOVE接口参数说明 参数 描述 filen_ame 要删除的文件名 PKG_UTIL.FILE_RENAME 对于磁盘上的文件进行重命名,类似Unix的mv。 PKG_UTIL.FILE_RENAME函数原型为: 123456 PKG_UTIL.FILE_RENAME(src_dir in text, src_file_name in text, dest_dir in text, dest_file_name in text, overwrite boolean default false) 表43 PKG_UTIL.FILE_RENAME接口参数说明 参数 描述 src_dir 源文件目录(大小写敏感)。 说明: 文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。 在打开guc参数safe_data_path时,用户只能通过高级包操作safe_data_path指定文件路径下的文件。 src_file_name 源文件名。 dest_dir 目标文件目录(大小写敏感)。 说明: 文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。 在打开guc参数safe_data_path时,用户只能通过高级包操作safe_data_path指定文件路径下的文件。 dest_file_name 目标文件名。 overwrite 默认是false,如果目的目录下存在一个同名的文件,不会进行重写。 PKG_UTIL.FILE_SIZE 返回指定的文件大小。 PKG_UTIL.FILE_SIZE函数原型为: 123 bigint PKG_UTIL.FILE_SIZE(file_name in text)return bigint 表44 PKG_UTIL.FILE_SIZE接口参数说明 参数 描述 file_name 文件名 PKG_UTIL.FILE_BLOCK_SIZE 返回指定的文件含有的块数量。 PKG_UTIL.FILE_BLOCK_SIZE函数原型为: 123 bigint PKG_UTIL.FILE_BLOCK_SIZE(file_name in text)return bigint 表45 PKG_UTIL.FILE_BLOCK_SIZE接口参数说明 参数 描述 file_name 文件名 PKG_UTIL.FILE_EXISTS 判断指定的文件是否存在。 PKG_UTIL.FILE_EXISTS函数原型为: 1234 PKG_UTIL.FILE_EXISTS(file_name in text)RETURN BOOL 表46 PKG_UTIL.FILE_EXISTS接口参数说明 参数 描述 file_name 文件名 PKG_UTIL.FILE_GETPOS 返回文件的偏移量,单位字节。 PKG_UTIL.FILE_GETPOS函数原型为: 1234 PKG_UTIL.FILE_GETPOS(file in integer )RETURN BIGINT 表47 PKG_UTIL.FILE_GETPOS接口参数说明 参数 描述 file 一个打开的文件句柄。 PKG_UTIL.FILE_SEEK 根据用户指定的字节数向前或者向后调整文件指针的位置。 PKG_UTIL.FILE_SEEK函数原型为: 12345 void PKG_UTIL.FILE_SEEK(file in integer,start in bigint)RETURN VOID 表48 PKG_UTIL.FILE_SEEK接口参数说明 参数 描述 file 一个打开的文件句柄。 start 文件偏移,字节。 PKG_UTIL.FILE_CLOSE_ALL 关闭一个会话中打开的所有的文件句柄。 PKG_UTIL.FILE_CLOSE_ALL函数原型为: PKG_UTIL.FILE_CLOSE_ALL()RETURN VOID↵ 表49 PKG_UTIL.FILE_CLOSE_ALL接口参数说明 参数 描述 无 无 PKG_UTIL.EXCEPTION_REPORT_ERROR 抛出一个异常。 PKG_UTIL.EXCEPTION_REPORT_ERROR函数原型为: 123456 PKG_UTIL.EXCEPTION_REPORT_ERROR(code integer,log text,flag boolean DEFAULT false)RETURN INTEGER 表50 PKG_UTIL.EXCEPTION_REPORT_ERROR接口参数说明 参数 描述 code 抛异常所打印的错误码。 log 抛异常所打印的日志提示信息。 flag 保留字段,默认为false。 PKG_UTIL.app_read_client_info 读取client_info信息 PKG_UTIL.app_read_client_info函数原型为: 123 PKG_UTIL.app_read_client_info(OUT buffer text)return text 表51 PKG_UTIL.app_read_client_info接口参数说明 参数 描述 buffer 返回的client_info信息 PKG_UTIL.app_set_client_info 设置client_info信息 PKG_UTIL.app_set_client_info函数原型为: 123 PKG_UTIL.app_set_client_info(str text) 表52 PKG_UTIL.app_set_client_info接口参数说明 参数 描述 str 要设置的client_info信息 PKG_UTIL.lob_converttoblob 将clob转成blob,amout为要转换的长度 PKG_UTIL.lob_converttoblob函数原型为: 1234567 PKG_UTIL.lob_converttoblob(dest_lob blob, src_clob clob, amount integer, dest_offset integer, src_offset integer)return raw 表53 PKG_UTIL.lob_converttoblob接口参数说明 参数 描述 dest_lob 目标lob src_clob 要转换的clob amount 转换的长度 dest_offset 目标lob的起始位置 src_offset 源clob的起始位置 PKG_UTIL.lob_converttoclob 将blob转成clob,amout为要转换的长度 PKG_UTIL.lob_converttoclob函数原型为: 1234567 PKG_UTIL.lob_converttoclob(dest_lob clob, src_blob blob, amount integer, dest_offset integer, src_offset integer)return text 表54 PKG_UTIL.lob_converttoclob接口参数说明 参数 描述 dest_lob 目标lob src_blob 要转换的blob amount 转换的长度 dest_offset 目标lob的起始位置 src_offset 源clob的起始位置 PKG_UTIL.lob_texttoraw 将text转成raw PKG_UTIL.lob_texttoraw函数原型为: 1234 PKG_UTIL.lob_texttoraw(src_lob clob)RETURN raw 表55 PKG_UTIL.lob_texttoraw接口参数说明 参数 描述 src_lob 要转换的lob数据 PKG_UTIL.match_edit_distance_similarity 计算两个字符串的差别 PKG_UTIL.match_edit_distance_similarity函数原型为: 12345 PKG_UTIL.match_edit_distance_similarity(str1 text, str2 text)RETURN INTEGER 表56 PKG_UTIL.match_edit_distance_similarity接口参数说明 参数 描述 str1 第一个字符串 str2 第二个字符串 PKG_UTIL.raw_cast_to_varchar2 raw类型转成varchar2。 PKG_UTIL.raw_cast_to_varchar2函数原型为: 1234 PKG_UTIL.raw_cast_to_varchar2(str raw)RETURN varchar2 表57 PKG_UTIL.raw_cast_to_varchar2接口参数说明 参数 描述 str 十六进制字符串 PKG_UTIL.session_clear_context 清除session_context信息 PKG_UTIL.session_clear_context函数原型为: 123456 PKG_UTIL.session_clear_context(namespace text, client_identifier text, attribute text)RETURN INTEGER 表58 PKG_UTIL.session_clear_context接口参数说明 参数 描述 namespace 属性的命名空间 client_identifier client_identifier,一般与namespace即可,当为null时,默认修改所有namesapce attribute 要清除的属性值 PKG_UTIL.session_search_context 查找属性值 PKG_UTIL.session_clear_context函数原型为: 12345 PKG_UTIL.session_clear_context(namespace text, attribute text)RETURN INTEGER 表59 PKG_UTIL.session_clear_context接口参数说明 参数 描述 namespace 属性的命名空间 attribute 要清除的属性值 PKG_UTIL.session_set_context 设置属性值 PKG_UTIL.session_set_context函数原型为: 123456 PKG_UTIL.session_set_context(namespace text, attribute text,value text)RETURN INTEGER 表60 PKG_UTIL.session_set_context接口参数说明 参数 描述 namespace 属性的命名空间 attribute 要设置的属性 value 属性对应的值 PKG_UTIL.utility_get_time 打印unix时间戳。 PKG_UTIL.utility_get_time函数原型为: 12 PKG_UTIL.utility_get_time()RETURN bigint PKG_UTIL.utility_format_error_backtrace 查看存储过程的错误堆栈。 PKG_UTIL.utility_format_error_backtrace函数原型为: 12 PKG_UTIL.utility_format_error_backtrace()RETURN text PKG_UTIL.utility_format_error_stack 查看存储过程的报错信息。 PKG_UTIL.utility_format_error_stack函数原型为: 12 PKG_UTIL.utility_format_error_stack()RETURN text PKG_UTIL.utility_format_call_stack 查看存储过程调用堆栈。 PKG_UTIL.utility_format_call_stack函数原型为: 12 PKG_UTIL.utility_format_call_stack()RETURN text 父主题: 基础接口
  • 接口介绍 高级功能包DBE_FILE支持的所有接口请参见表 DBE_FILE。 表2 DBE_FILE 接口名称 描述 DBE_FILE.OPEN 根据指定的目录和文件名打开一个文件。 DBE_FILE.IS_CLOSE 检测一个文件句柄是否打开。 DBE_FILE.READ_LINE 根据指定的长度从一个打开的文件句柄中读取出一行数据。 DBE_FILE.WRITE 将BUFFER中指定的数据写入到文件中。 DBE_FILE.NEW_LINE 这个存储过程用于向一个打开的文件中写入一个或者多个行终结符。 DBE_FILE.WRITE_LINE 这个存储过程将BUFFER中的字符串写入到一个打开的文件中。 DBE_FILE.FORMAT_WRITE 这个存储过程是一个格式化的PUT存储过程,行为类似printf()。 DBE_FILE.GET_RAW 从一个打开的文件句柄中读取二进制数据。 DBE_FILE.PUT_RAW 向文件中写入传入的二进制数据。 DBE_FILE.FLUSH 将一个文件句柄中的数据写入到物理文件中。 DBE_FILE.CLOSE 关闭一个打开的文件句柄。 DBE_FILE.CLOSE_ALL 关闭一个会话中打开的所有的文件句柄。 DBE_FILE.REMOVE 这个存储过程删除一个磁盘文件,操作的时候需要有充分的权限。 DBE_FILE.RENAME 对于磁盘上的文件进行重命名,类似Unix的mv。 DBE_FILE.COPY 拷贝一个连续的区域内容到一个新创建的文件中,如果忽略了start_line和end_line会拷贝整个文件。 DBE_FILE.GET_ATTR 读取并返回磁盘文件的属性。 DBE_FILE.SEEK 根据用户指定的字节数向前或者向后调整文件指针的位置。 DBE_FILE.GET_POS 返回文件的偏移量,单位字节。 DBE_FILE.FOPEN_NCHAR 根据指定的目录和文件名打开一个文件。 DBE_FILE.WRITE_NCHAR 将数据写入到一个打开的文件。 DBE_FILE.WRITE_LINE_NCHA... 将数据写入到一个打开的文件,并自动追加一个行终结符。 DBE_FILE.FORMAT_WRITE_NC... 将格式化数据写入到一个打开的文件,允许格式化的DBE_FILE.WRITE_NCHAR接口。 DBE_FILE.READ_LINE_NCHAR 从一个打开的文件中读取一行指定长度的数据。 DBE_FILE.OPEN 该函数用来打开一个文件,可以指定最大行的大小,最多可以同时打开50个文件。并且该函数返回INTEGER类型的一个句柄。 DBE_FILE.OPEN函数原型为: 123456 DBE_FILE.OPEN (dir IN VARCHAR2,file_name IN VARCHAR2,open_mode IN VARCHAR2,max_line_size IN INTEGER DEFAULT 1024)RETURN INTEGER; 表3 DBE_FILE.OPEN接口参数说明 参数 描述 dir 文件的目录位置,这个字符串是一个目录对象名。 说明: 文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。 在打开guc参数safe_data_path时,用户只能通过高级包读写safe_data_path指定文件路径下的文件。 file_name 文件名,包含扩展(文件类型),不包括路径名。如果文件名中包含路径,在OPEN中会被忽略,在Unix系统中,文件名不能以/.结尾。 open_mode 指定文件的打开模式,包含: r:read text w:write text a:append text rb:read byte wb:write byte ab:append byte 说明: 对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。 max_line_size 每行最大字符数,包含换行符(最小值是1,最大值是32767)。如果没有指定,会指定一个默认值1024。 DBE_FILE.IS_CLOSE 该函数用于检测一个文件句柄来查看文件是否已经打开,返回一个布尔值,异常情况是INVALID_FILEHANDLE。 DBE_FILE.IS_CLOSE函数原型为: 123 DBE_FILE.IS_CLOSE (file IN INTEGER)RETURN BOOLEAN; 表4 DBE_FILE.IS_CLOSE接口参数说明 参数 描述 file IN INTEGER 传入一个要检测的文件句柄。 DBE_FILE.READ_LINE 该存储过程从一个打开的文件句柄中读取文本,并把读取的结果存放到BUFFER中。读取的时候会读取到行尾,不包含行终结符或者读取到文件末尾,或者达到了len参数指定的大小,读取的长度不能超过OPEN的时候指定的max_line_size。 DBE_FILE.READ_LINE函数原型为: 1234 DBE_FILE.READ_LINE (file IN INTEGER,buffer OUT VARCHAR2,len IN INTEGER DEFAULT NULL) 表5 DBE_FILE.READ_LINE接口参数说明 参数 描述 file 通过调用OPEN打开的文件句柄,文件必须以读的模式打开,否则会抛出INVALID_OPERATION的异常。 buffer 用于接收数据的BUFFER。 len 从文件中读取的字节数,默认是NULL。如果是默认NULL,会使用max_linesize来指定大小。 DBE_FILE.WRITE 该存储过程用于向文件中写入BUFFER中的数据,要写入的文件必须以写模式打开,这个操作不会写入行终结符。 DBE_FILE.WRITE函数原型为: 123 DBE_FILE.WRITE (file IN INTEGER,buffer IN TEXT); 表6 DBE_FILE.WRITE接口参数说明 参数 描述 file 该存储过程用于向文件中写入BUFFER中的数据,要写入的文件必须以写模式打开,这个操作不会写入行终结符。 buffer 要写入文件的文本数据,BUFFER的最大值是32767个字节。如果在open的时候没有指定值,默认是1024个字节,没有刷新到文件之前,一系列的WRITE操作的BUFFER总和不能超过32767个字节。 说明: 对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。 DBE_FILE.NEW_LINE 该存储过程用于向一个打开的文件中写入一个或者多个行终结符。这个存储过程是从WRITE函数中拆分出来的,因为行终结符和平台相关。 DBE_FILE.NEW_LINE函数原型为: 123 DBE_FILE.NEW_LINE (file IN INTEGER,line_nums IN INTEGER := 1); 表7 DBE_FILE.NEW_LINE接口参数说明 参数 描述 file 一个打开的文件句柄。 line_nums 写入到文件中的终结符的数量。 DBE_FILE.WRITE_LINE 该存储过程将BUFFER中的字符串写入到一个打开的文件中,文件必须以写模式打开。 DBE_FILE.WRITE_LINE函数原型为: 1234 DBE_FILE.WRITE_LINE(file IN INTEGER,buffer IN TEXT,flush IN BOOLEAN DEFAULT FALSE); 表8 DBE_FILE.WRITE_LINE接口参数说明 参数 描述 file 一个打开的文件句柄。 buffer 要写入文件的文本数据,BUFFER的最大值是32767个字节。如果在open的时候没有指定值,默认是1024个字节,没有刷新到文件之前,一系列的PUT操作的BUFFER总和不能超过32767个字节。 说明: 对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。 flush 在write后是否要刷到磁盘。 DBE_FILE.FORMAT_WRITE 该存储过程是一个格式化的PUT存储过程,行为类似printf()。 DBE_FILE.FORMAT_WRITE函数原型为: 123456 DBE_FILE.FORMAT_WRITE (file IN INTEGER,format IN VARCHAR2,arg1 IN VARCHAR2 DEFAULT NULL,. . .arg6 IN VARCHAR2 DEFAULT NULL]); 表9 DBE_FILE.FORMAT_WRITE接口参数说明 参数 描述 file 一个打开的文件句柄。 format 一个要进行格式化的字符串包含,文本和格式符\n和%s。 [arg1. . .arg6] 从1到6个可选的参数串,参数和格式化字符的位置是一一对应的,如果存在格式化字符而没有提供参数,会使用空串来替代%s。 DBE_FILE.GET_RAW 该函数用于从打开的文件描述符中读取二进制数据,从r中返回。 DBE_FILE.GET_RAW函数原型为: 1234 DBE_FILE.GET_RAW (file IN INTEGER,r OUT RAW,length IN INTEGER DEFAULT NULL); 表10 DBE_FILE.GET_RAW接口参数说明 参数 描述 file 一个打开的文件句柄。 r 输出的二进制数据 length 要读取文件的长度,默认值为NULL,读取文件中所有数据,最大长度为1G。 DBE_FILE.PUT_RAW 该函数用于向文件中写入二进制数据。 DBE_FILE.PUT_RAW函数原型为: 1234 DBE_FILE.PUT_RAW (file IN INTEGER,r IN RAW,flush IN BOOLEAN DEFAULT FALSE); 表11 DBE_FILE.PUT_RAW接口参数说明 参数 描述 file 一个打开的文件句柄。 r 输出的二进制数据 说明: 对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。 flush 是否flush到文件中,默认为false。 DBE_FILE.FLUSH 一个文件句柄中的数据要写入到物理文件中,缓冲区中的数据必须要有一个行终结符。当文件必须在打开时读取,刷新非常有用。例如,调试信息可以刷新到文件中,以便立即读取。 DBE_FILE.FLUSH函数原型为: 12 DBE_FILE.FLUSH (file IN INTEGER); 表12 DBE_FILE.FLUSH接口参数说明 参数 描述 file 一个打开的文件句柄。 DBE_FILE.CLOSE 该存储过程用于关闭一个打开的文件句柄,当调用这个存储过程的时候,如果还有等待写入的缓存的数据,可能会收到异常信息。 DBE_FILE.CLOSE函数原型为: 123 DBE_FILE.CLOSE (file IN INTEGER)RETURN INTEGER; 表13 DBE_FILE.CLOSE接口参数说明 参数 描述 file 一个打开的文件句柄。 DBE_FILE.CLOSE_ALL 该存储过程关闭一个会话中打开的所有的文件句柄,可用于紧急的清理操作。 DBE_FILE.CLOSE_ALL函数原型为: 1 DBE_FILE.CLOSE_ALL; 表14 DBE_FILE.CLOSE_ALL接口参数说明 参数 描述 无 无 DBE_FILE.REMOVE 该存储过程删除一个磁盘文件,操作的时候对目录和文件要有充分的权限。 DBE_FILE.REMOVE函数原型为: 123 DBE_FILE.REMOVE (dir IN VARCHAR2,file_name IN VARCHAR2); 表15 DBE_FILE.REMOVE接口参数说明 参数 描述 dir 文件所在的目录位置。 说明: 文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。 在打开guc参数safe_data_path时,用户只能通过高级包操作safe_data_path指定文件路径下的文件。 file_name 要删除的文件。 DBE_FILE.RENAME 对磁盘上的文件进行重命名,类似Unix的mv。 DBE_FILE.RENAME函数原型为: 123456 DBE_FILE.RENAME (src_dir IN VARCHAR2,src_file_name IN VARCHAR2,dest_dir IN VARCHAR2,dest_file_name IN VARCHAR2,overwrite IN BOOLEAN DEFAULT FALSE); 表16 DBE_FILE.RENAME接口参数说明 参数 描述 src_dir 原文件的目录位置(大小写敏感)。 说明: 文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。 在打开guc参数safe_data_path时,用户只能通过高级包操作safe_data_path指定文件路径下的文件。 src_file_name 要进行命名的原文件。 dest_dir 目的目录(大小写敏感)。 说明: 文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。 在打开guc参数safe_data_path时,用户只能通过高级包操作safe_data_path指定文件路径下的文件。 dest_file_name 新的文件名。 overwrite 默认是false,如果目的目录下存在一个同名的文件,不会进行重写。 DBE_FILE.COPY 该存储过程拷贝一个连续的区域内容到一个新创建的文件中,如果忽略了start_line和end_line会拷贝整个文件。 DBE_FILE.COPY函数原型为: 1234567 DBE_FILE.COPY (src_dir IN VARCHAR2,src_file_name IN VARCHAR2,dest_dir IN VARCHAR2,dest_file_name IN VARCHAR2,start_line IN INTEGER DEFAULT 1,end_line IN INTEGER DEFAULT NULL); 表17 DBE_FILE.COPY接口参数说明 参数 描述 src_dir 原文件所在的目录。 说明: 文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。 在打开guc参数safe_data_path时,用户只能通过高级包操作safe_data_path指定文件路径下的文件。 src_file_name 要拷贝的原文件。 dest_dir 目的文件所在的目录。 说明: 文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。 在打开guc参数safe_data_path时,用户只能通过高级包操作safe_data_path指定文件路径下的文件。 dest_file_name 要写入的目的文件。 说明: 对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。 start_line 拷贝开始的行号,默认是1。 end_line 拷贝结束的行号,默认是NULL,指定到文件尾。 DBE_FILE.GET_ATTR 该存储过程用于读取并返回磁盘文件的属性。 DBE_FILE.GET_ATTR函数原型为: 123456 DBE_FILE.GET_ATTR(location IN text,filename IN text,OUT fexists boolean,OUT file_length bigint,OUT block_size integer); 表18 DBE_FILE.GET_ATTR接口参数说明 参数 描述 location 文件所在的目录。 说明: 文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。 在打开guc参数safe_data_path时,用户只能通过高级包操作safe_data_path指定文件路径下的文件。 filename 要检测的文件名。 fexists 返回文件是否存在的值。 file_length 文件的字节长度,如果文件不存在返回NULL。 block_size 文件系统的块大小(单位字节),如果文件不存在返回NULL。 DBE_FILE.SEEK 该存储过程会根据用户指定的字节数向前或者向后调整文件指针的位置。 DBE_FILE.SEEK函数原型为: 1234 DBE_FILE.SEEK (file IN INTEGER,absolute_start IN BIGINT DEFAULT NULL,relative_start IN BIGINT DEFAULT NULL); 表19 DBE_FILE.SEEK接口参数说明 参数 描述 file 一个打开的文件句柄。 absolute_start 文件偏移的绝对位置,这个默认值为NULL。 relative_start 文件偏移的相对位置。如果这个值是正数,向前偏移;如果是负数,向后偏移;默认值为NULL。如果和absolute_start参数同时指定,以absolute_start参数为准。 DBE_FILE.GET_POS 函数返回文件的偏移量,单位字节。 DBE_FILE.FGETPOS函数原型为: 123 DBE_FILE.GET_POS (file IN INTEGER)RETURN BIGINT; 表20 DBE_FILE.GET_POS接口参数说明 参数 描述 file 一个打开的文件句柄。 DBE_FILE.FOPEN_NCHAR 函数DBE_FILE.FOPEN_NCHAR用来打开一个文件,可以指定最大行的大小,一个会话内最多可以同时打开50个文件。该函数返回一个DBE_FILE.FILE_TYPE类型的文件句柄。该函数以国家字符集模式打开文件以进行输入或输出。 DBE_FILE.FOPEN_NCHAR函数原型为: 123456 DBE_FILE.FOPEN_NCHAR( dir IN TEXT, file_name IN TEXT, open_mode IN TEXT, max_line_size IN INTEGER DEFAULT 1024)RETURN DBE_FILE.FILE_TYPE; 表21 DBE_FILE.FOPEN_NCHAR接口参数说明 参数 描述 dir 文件的目录位置,这个字符串是一个目录对象名。 说明: 文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。 在打开guc参数safe_data_path时,用户只能通过高级包读写safe_data_path指定文件路径下的文件。 file_name 文件名,包含扩展(文件类型),不包括路径名。如果文件名中包含路径,在FOPEN_NCHAR中会被忽略,在Unix系统中,文件名不能以/.结尾。 open_mode 指定文件的打开模式,包含: r:read text w:write text a:append text rb:read byte wb:write byte ab:append byte 说明: 对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。 max_line_size 每行最大字符数,包含换行符(最小值是1,最大值是32767)。如果没有指定,会指定一个默认值1024。 DBE_FILE.WRITE_NCHAR 函数DBE_FILE.WRITE_NCHAR用于向文件中写入buffer中的数据,文件必须以国家字符集模式和写模式打开,这个操作不会写入行终结符,返回值永远为TRUE。文本字符串将以UTF8字符集格式写入。 DBE_FILE.WRITE_NCHAR函数原型为: 1234 DBE_FILE.WRITE_NCHAR( file IN DBE_FILE.FILE_TYPE, buffer IN NVARCHAR2)RETURN VOID; 表22 DBE_FILE.WRITE接口参数说明 参数 描述 file 通过FOPEN_NCHAR打开的DBE_FILE.FILE_TYPE类型的对象,要写入的文件必须以写模式打开,这个操作不会写入行终结符。 buffer 写入文件的文本数据。每行的累计写入长度不能大于或等于FOPEN_NCHAR时指定或默认的max_line_size,否则会在刷新到文件时报错。 说明: 对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。 DBE_FILE.WRITE_LINE_NCHAR 函数DBE_FILE.WRITE_LINE_NCHAR用于向文件中写入buffer中的数据,文件必须以国家字符集模式和写模式打开,这个操作会自动追加行终结符,返回值永远为TRUE。文本字符串将以UTF8字符集格式写入。 DBE_FILE.WRITE_LINE_NCHAR函数原型为: 1234 DBE_FILE.WRITE_LINE_NCHAR( file IN DBE_FILE.FILE_TYPE, buffer IN NVARCHAR2)RETURN VOID; 表23 DBE_FILE.WRITE_LINE接口参数说明 参数 描述 file 通过FOPEN_NCHAR打开的DBE_FILE.FILE_TYPE类型的对象。 buffer 要写入文件的文本数据,每行的长度(包含换行符)不能大于FOPEN_NCHAR时指定或默认的max_line_size,否则会在刷新到文件时报错。 说明: 对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。 DBE_FILE.FORMAT_WRITE_NCHAR 函数DBE_FILE.FORMAT_WRITE_NCHAR将格式化数据写入到一个打开的文件,是允许格式化的DBE_FILE.WRITE_NCHAR接口,返回值永远为TRUE。 DBE_FILE.FORMAT_WRITE_NCHAR函数原型为: 1234567 DBE_FILE.FORMAT_WRITE_NCHAR( file IN DBE_FILE.FILE_TYPE, format IN NVARCHAR2, arg1 IN NVARCHAR2 DEFAULT NULL, . . . arg5 IN NVARCHAR2 DEFAULT NULL)RETURN VOID; 表24 DBE_FILE.FORMAT_WRITE_NCHAR接口参数说明 参数 描述 file 通过FOPEN_NCHAR打开的DBE_FILE.FILE_TYPE类型的对象。 format 格式化的字符串,包含文本和格式符\n和%s。 [arg1. . .arg5] 从1到5个可选的参数串,参数和格式化字符的位置是一一对应的,如果存在格式化字符而没有提供参数,会使用空串来替代%s。 DBE_FILE.READ_LINE_NCHAR 存储过程DBE_FILE.READ_LINE_NCHAR从一个打开的文件读取数据,并把读取的结果存放到buffer中。读取的时候会读取到行尾,但不包含行终结符,或者读取到文件末尾,或者读取到len参数指定的大小。读取的长度不能超过FOPEN_NCHAR的时候指定的max_line_size。 DBE_FILE.READ_LINE_NCHAR存储过程原型为: 1234 DBE_FILE.READ_LINE_NCHAR( file IN DBE_FILE.FILE_TYPE, buffer OUT NVARCHAR2, len IN INTEGER DEFAULT NULL); 表25 DBE_FILE.READ_LINE接口参数说明 参数 描述 file 通过FOPEN_NCHAR打开的DBE_FILE.FILE_TYPE类型的对象,文件必须以读模式打开,否则会抛出INVALID_OPERATION的异常。 buffer 接收数据的buffer。 len 从文件中读取的字节数,默认值为NULL。如果是NULL,会使用max_line_size来指定大小。
  • 注意事项 DBE_FILE要求以DBE_FILE.FOPEN打开的文件是以数据库字符集编码,如果打开的文件未按预期的字符集编码,在使用DBE_FILE.READ_LINE读取文件时,会发生编码校验错误;DBE_FILE要求以DBE_FILE.FOPEN_NCHAR打开的文件是以UTF-8字符集编码,如果打开的文件未按预期的字符集编码,在使用DBE_FILE.READ_LINE_NCHAR读取文件时,会发生编码校验错误。 当使用DBE_OUTPUT.PUT_LINE打印DBE_FILE.READ_LINE_NCHAR接口得到的结果时,需要确保UTF-8字符集编码能够转换成当前数据库字符集编码,满足上述条件后可以正常输出结果。DBE_OUTPUT.PRINT_LINE不支持该功能。 DBE_FILE要求客户端字符集编码与数据库字符集编码保持一致。 当数据库字符集编码为ASCII编码、客户端字符集编码为支持中文的编码,在客户端调用DBE_FILE.WRITE_NCHAR或DBE_FILE.WRITE_LINE_NCHAR写入中文相关内容时,无法保证写入的内容为UTF-8编码格式。可能会导致后续使用DBE_FILE.READ_LINE_NCHAR时报错。
  • 数据类型介绍 DBE_FILE.FILE_TYPE DBE_FILE.FILE_TYPE类型定义了DBE_FILE包中文件的表示方式,DBE_FILE.FILE_TYPE中的字段是DBE_FILE包的私有字段,请不要直接修改DBE_FILE.FILE_TYPE类型对象中字段的值。 12345 CREATE TYPE DBE_FILE.FILE_TYPE AS( id INTEGER, datatype INTEGER, byte_mode BOOLEAN); 表1 DBE_FILE.FILE_TYPE字段说明 参数 描述 id 文件句柄。 datatype 表明文件是CHAR文件还是NCHAR文件或者二进制文件,目前支持CHAR文件和NCHAR文件。CHAR文件返回1,NCHAR文件返回2。 byte_mode 表明文件是以二进制模式打开(TRUE)还是以文本模式打开(FALSE)。
  • Retry管理 Retry是数据库在SQL或存储过程(包含匿名块)执行失败时,在数据库内部进行重新执行的过程,以提高执行成功率和用户体验。数据库内部通过检查发生错误时的错误码及Retry相关配置,决定是否进行重试。 失败时回滚之前执行的语句,并重新执行存储过程进行Retry。 示例: 123456789 gaussdb=# CREATE OR REPLACE PROCEDURE retry_basic ( IN x INT) AS BEGIN INSERT INTO t1 (a) VALUES (x); INSERT INTO t1 (a) VALUES (x+1);END;/gaussdb=# CALL retry_basic(1); 父主题: 存储过程
  • 接口介绍 高级功能包DBE_APPLICATION_INFO支持的所有接口请参见表1。DBE_APPLICATION_INFO作用范围是当前session。 表1 DBE_APPLICATION_INFO 接口名称 描述 DBE_APPLICATION_INFO.SET_CLIENT_INFO 写入客户端信息 DBE_APPLICATION_INFO.READ_CLIENT_INFO 读取客户端信息 DBE_APPLICATION_INFO.SET_CLIENT_INFO 写入客户端信息。DBE_APPLICATION_INFO.SET_CLIENT_INFO函数原型为: 123 DBE_APPLICATION_INFO.SET_CLIENT_INFO( str text)returns void; 表2 DBE_APPLICATION_INFO.SET_CLIENT_INFO接口参数说明 参数 描述 str 写入的客户端信息 DBE_APPLICATION_INFO.READ_CLIENT_INFO 读取客户端信息DBE_APPLICATION_INFO.READ_CLIENT_INFO函数原型为: 12 DBE_APPLICATION_INFO.READ_CLIENT_INFO( OUT client_info text); 表3 DBE_APPLICATION_INFO.READ_CLIENT_INFO接口参数说明 参数 描述 client_info 客户端信息
  • 示例 123456 BEGIN select DBE_SESSION.set_context('test', 'gaussdb', 'one'); --设置名为test的context下属性为gaussdb的值为one select DBE_SESSION.search_context('test', 'gaussdb'); select DBE_SESSION.clear_context('test', 'test','gaussdb');END;/
  • 示例 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 --获取字符串的长度SELECT DBE_LOB.GET_LENGTH('12345678');DECLAREmyraw RAW(100);amount INTEGER :=2;buffer INTEGER :=1;beginDBE_LOB.READ('123456789012345',amount,buffer,myraw);dbe_output.print_line(myraw);end;/CREATE TABLE blob_Table (t1 blob) DISTRIBUTE BY REPLICATION;CREATE TABLE blob_Table_bak (t2 blob) DISTRIBUTE BY REPLICATION;INSERT INTO blob_Table VALUES('abcdef');INSERT INTO blob_Table_bak VALUES('22222');DECLAREstr varchar2(100) := 'abcdef';source raw(100);dest blob;copyto blob;amount int;PSV_SQL varchar2(100);PSV_SQL1 varchar2(100);a int :=1;len int;BEGINsource := dbe_raw.cast_from_varchar2_to_raw(str);amount := dbe_raw.get_length(source);PSV_SQL :='select * from blob_Table for update';PSV_SQL1 := 'select * from blob_Table_bak for update';EXECUTE IMMEDIATE PSV_SQL into dest;EXECUTE IMMEDIATE PSV_SQL1 into copyto;DBE_LOB.WRITE(dest, amount, 1, source);DBE_LOB.WRITE_APPEND(dest, amount, source);DBE_LOB.ERASE(dest, a, 1);DBE_OUTPUT.PRINT_LINE(a);DBE_LOB.COPY(copyto, dest, amount, 10, 1);perform DBE_LOB.CLOSE(dest);RETURN;END;/--删除表DROP TABLE blob_Table;DROP TABLE blob_Table_bak;
  • 接口介绍 高级功能包DBE_LOB支持的所有接口参见表1。 A数据库中空格的实际字节内容为00,GaussDB中空格对应字节内容为ASCII码值(32)。 分布式环境中,clob、blob以及bfile最大支持1GB。 表1 DBE_LOB 接口名称 描述 DBE_LOB.GET_LENGTH 获取并返回指定的LOB类型对象的长度(不支持大于2GB)。 DBE_LOB.LOB_GET_LENGTH 获取并返回指定的LOB类型对象/BFILE文件的长度。 DBE_LOB.OPEN 打开一个LOB类型对象返回一个LOB的描述符。 DBE_LOB.READ 根据指定的长度及起始位置偏移读取LOB内容的一部分到BUFFER缓冲区。 DBE_LOB.LOB_READ 根据指定的长度及起始位置偏移读取LOB内容的一部分到BUFFER缓冲区(支持bfile读取)。 DBE_LOB.WRITE 根据指定长度及起始位置偏移将BUFFER中内容写入到LOB中。 DBE_LOB.WRITE_APPEND 根据指定长度将BUFFER中内容写入到LOB的尾部。 DBE_LOB.LOB_WRITE_APPEND 根据指定长度将BUFFER中内容写入到LOB的尾部。 DBE_LOB.COPY 根据指定长度及起始位置偏移将LOB内容写入到另一个LOB中。 DBE_LOB.LOB_COPY 根据指定长度及起始位置偏移将LOB内容写入到另一个LOB中。 DBE_LOB.ERASE 根据指定长度及起始位置偏移删除LOB中的内容(不支持大于1GB)。 DBE_LOB.LOB_ERASE 根据指定长度及起始位置偏移删除LOB中的内容。 DBE_LOB.CLOSE 关闭已经打开的LOB描述符。 DBE_LOB.MATCH 返回一个字符串在LOB中第N次出现的位置。 DBE_LOB.COMPARE 比较两个LOB或者两个LOB的某一部分(支持bfile比较)。 DBE_LOB.SUBSTR 用于读取一个LOB的子串,返回读取到的子串。 DBE_LOB.LOB_SUBSTR 用于读取一个LOB的子串,返回读取到的子串。 DBE_LOB.STRIP 用于截断指定长度的LOB,执行完会将LOB的长度设置为参数指定的长度。 DBE_LOB.LOB_STRIP 用于截断指定长度的LOB,执行完会将LOB的长度设置为参数指定的长度。 DBE_LOB.CREATE_TEMPORARY 创建一个临时的BLOB或者CLOB对象。 DBE_LOB.APPEND 将源LOB的内容拼接到目的LOB中。 DBE_LOB.LOB_APPEND 将源LOB的内容拼接到目的LOB中。 DBE_LOB.FREETEMPORARY 删除一个临时的BLOB或者CLOB对象。 DBE_LOB.FILEOPEN 打开一个数据库BFILE文件,并返回文件描述符。 DBE_LOB.FILECLOSE 关闭由FILEOPEN打开的BFILE文件。 DBE_LOB.BFILEOPEN 打开一个数据库BFILE文件。 DBE_LOB.BFILECLOSE 关闭一个由BFILEOPEN打开的BFILE文件。 DBE_LOB.LOADFROMFILE 读取指定位置和长度的数据库BFILE文件到指定位置的BLOB对象中。 DBE_LOB.LOADFROMBFILE 读取指定位置和长度的数据库BFILE文件到指定位置的LOB中。 DBE_LOB.LOADBLOBFROMFILE 读取指定位置和长度的数据库外部文件到指定位置的BLOB中(不支持大于1GB)。 DBE_LOB.LOADBLOBFROMBFIL... 读取指定位置和长度的数据库BFILE文件到指定位置的BLOB中。 DBE_LOB.LOADCLOBFROMFILE 读取指定位置和长度的数据库外部文件到指定位置的CLOB中(不支持大于1GB)。 DBE_LOB.LOADCLOBFROMBFIL... 读取指定位置和长度的数据库BFILE文件到指定位置的CLOB中。 DBE_LOB.CONVERTTOBLOB 将CLOB类型文件转换为BLOB类型文件(不支持大于1GB)。 DBE_LOB.CONVERTTOCLOB 将BLOB类型文件转换为CLOB类型文件(不支持大于1GB)。 DBE_LOB.LOB_CONVERTTOBLO... 将CLOB类型文件转换为BLOB类型文件。 DBE_LOB.LOB_CONVERTTOCLO... 将BLOB类型文件转换为CLOB类型文件。 DBE_LOB.GETCHUNKSIZE 获取数据库中CHUNK结构中用于存储LOB数据的最大SIZE。 DBE_LOB.LOB_WRITE 将源对象从起始位置读取指定长度内容,写入目标LOB对象的指定偏移位置,覆盖该位置原本内容, 并返回目标LOB对象。 DBE_LOB.BFILENAME 根据目录和文件名构造返回DBE_LOB.BFILE对象。 DBE_LOB.GET_LENGTH 函数GET_LENGTH获取并返回指定的LOB类型对象的长度,最大支持2GB。 DBE_LOB.GET_LENGTH函数原型为: 1234567 DBE_LOB.GET_LENGTH ( blob_obj IN BLOB)RETURN INTEGER;DBE_LOB.GET_LENGTH ( clob_obj IN CLOB)RETURN INTEGER; 表2 DBE_LOB.GET_LENGTH接口参数说明 参数 描述 blob_obj/clob_obj 待获取长度的BLOB/CLOB类型对象。 DBE_LOB.LOB_GET_LENGTH 函数LOB_GET_LENGTH获取并返回指定的LOB类型对象/BFILE文件的长度,最大支持32TB。 DBE_LOB.LOB_GET_LENGTH函数原型为: 1 2 3 4 5 6 7 8 91011 DBE_LOB.LOB_GET_LENGTH ( blob_obj IN BLOB)RETURN BIGINT;DBE_LOB.LOB_GET_LENGTH ( clob_obj IN CLOB)RETURN BIGINT;DBE_LOB.LOB_GET_LENGTH ( bfile IN DBE_LOB.BFILE)RETURN BIGINT; 表3 DBE_LOB.LOB_GET_LENGTH接口参数说明 参数 描述 blob_obj/clob_obj/bfile 待获取长度的BLOB/CLOB/BFILE类型对象。 DBE_LOB.OPEN 存储过程打开一个LOB,并返回一个LOB描述符,该过程无实际意义,仅用于兼容。 DBE_LOB.OPEN函数原型为: 123456789 DBE_LOB.OPEN ( lob INOUT BLOB);DBE_LOB.OPEN ( lob INOUT CLOB);DBE_LOB.OPEN ( bfile INOUT DBE_LOB.BFILE, open_mode IN TEXT DEFAULT 'null'); 表4 DBE_LOB.OPEN接口参数说明 参数 描述 lob/bfile 被打开的BLOB或者CLOB对象或者和bfile文件。 DBE_LOB.READ 存储过程READ根据指定长度及起始位置偏移读取LOB内容的一部分到out_put缓冲区。 DBE_LOB.READ函数原型为: 1 2 3 4 5 6 7 8 91011 DBE_LOB.READ ( blob_obj IN BLOB, amount IN INTEGER, off_set IN INTEGER, out_put OUT RAW);DBE_LOB.READ ( clob_obj IN CLOB, amount IN INTEGER, off_set IN INTEGER, out_put OUT VARCHAR2); 表5 DBE_LOB.READ接口参数说明 参数 说明 blob_obj/clob_obj 待读入的BLOB/CLOB类型对象。 amount 读入长度。 off_set 指定从参数lob的哪个位置开始读取的偏移(即相对lob内容起始位置的字节数)。如果偏移量小于1或者大于lob长度,则报错。初始位置为1。 out_put 读取参数lob内容后存放的目标缓冲区。 DBE_LOB.LOB_READ 存储过程LOB_READ根据指定长度及起始位置偏移读取LOB/BFILE内容的一部分到out_put缓冲区。 DBE_LOB.LOB_READ函数原型为: 1 2 3 4 5 6 7 8 91011121314151617 DBE_LOB.LOB_READ( blob_obj IN BLOB, amount INOUT BIGINT, off_set IN BIGINT, out_put OUT RAW);DBE_LOB.LOB_READ( clob_obj IN CLOB, amount INOUT BIGINT, off_set IN BIGINT, out_put OUT VARCHAR2);DBE_LOB.LOB_READ( bfile IN DBE_LOB.BFILE, amount INOUT BIGINT, off_set IN BIGINT, out_put OUT RAW); 表6 DBE_LOB.LOB_READ接口参数说明 参数 说明 blob_obj/clob_obj/bfile 待读入的BLOB/CLOB/BFILE类型对象(支持大于1GB)。 amount IN参数为读入长度,OUT参数为实际读取的长度。 说明: 如果读入长度为小于等于0,超过32767,则报错。 off_set 指定从参数lob的哪个位置开始读取的偏移(即相对lob内容起始位置的字节数)。如果偏移量小于1或者大于lob长度,则报错。初始位置为1。 out_put 读取参数lob内容后存放的目标缓冲区。 DBE_LOB.WRITE 存储过程WRITE根据指定长度及起始位置将source中内容写入到LOB对象中。 DBE_LOB.WRITE函数原型为: 1 2 3 4 5 6 7 8 91011 DBE_LOB.WRITE ( blob_obj INOUT BLOB, amount IN INTEGER, off_set IN INTEGER, source IN RAW);DBE_LOB.WRITE ( clob_obj INOUT CLOB, amount IN INTEGER, off_set IN INTEGER, source IN VARCHAR2); 表7 DBE_LOB.WRITE接口参数说明 参数 说明 blob_obj/clob_obj 待写入的BLOB/CLOB类型对象。 amount 写入长度,最大支持32767字符。 说明: 如果写入长度小于1或写入长度大于待写入的内容长度,则报错。 off_set 指定从blob_obj/clob_obj的哪个位置开始写入的偏移(即相对LOB内容起始位置的字节数)。 说明: 如果偏移量小于1或者大于LOBMAXSIZE时,则报错。初始位置是1,最大值为LOB类型最大长度。 source 待写入的内容。 DBE_LOB.WRITE_APPEND 存储过程WRITE_APPEND根据指定长度将source_obj中内容写入到LOB的尾部。 DBE_LOB.WRITE_APPEND函数原型为: 123456789 DBE_LOB.WRITE_APPEND ( blob_obj INOUT BLOB, amount IN INTEGER, source_obj IN RAW);DBE_LOB.WRITE_APPEND ( clob_obj INOUT CLOB, amount IN INTEGER, source_obj IN VARCHAR2); 表8 DBE_LOB.WRITE_APPEND接口参数说明 参数 说明 blob_obj/clob_obj 待写入的指定BLOB/CLOB类型对象。 amount 写入长度,最大支持32767字符。 source_obj 待写入的内容。 DBE_LOB.LOB_WRITE_APPEND 存储过程LOB_WRITE_APPEND根据指定长度将source_obj中内容写入到LOB的尾部。 DBE_LOB.LOB_WRITE_APPEND函数原型为: 123456789 DBE_LOB.LOB_WRITE_APPEND( blob_obj INOUT BLOB, amount IN INTEGER, source_obj IN RAW);DBE_LOB.LOB_WRITE_APPEND ( clob_obj INOUT CLOB, amount IN INTEGER, source_obj IN VARCHAR2); 表9 DBE_LOB.LOB_WRITE_APPEND接口参数说明 参数 说明 blob_obj/clob_obj 待写入的指定BLOB/CLOB类型对象。 amount 写入长度,最大支持32767字符。 说明: 如果写入长度小于1或写入长度大于待写入的内容长度,则报错。 source_obj 待写入的内容。 DBE_LOB.COPY 存储过程COPY根据指定长度及起始位置偏移将LOB内容拷贝到另一个LOB中。 DBE_LOB.COPY函数原型为: 123456 DBE_LOB.COPY ( dest_lob INOUT BLOB, src_lob IN BLOB, len IN INTEGER, dest_start IN INTEGER DEFAULT 1, src_start IN INTEGER DEFAULT 1); 表10 DBE_LOB.COPY接口参数说明 参数 说明 dest_lob 待拷入的LOB类型对象。 src_lob 待拷出的LOB类型对象。 len 拷贝长度。 dest_start 指定从dest_lob内容的哪个位置开始拷入的偏移(即相对LOB内容起始位置的字节数)。 src_start 指定从src_lob内容的哪个位置开始拷出的偏移(即相对LOB内容起始位置的字节数)。 DBE_LOB.LOB_COPY 存储过程COPY根据指定长度及起始位置偏移将LOB内容拷贝到另一个LOB中。 DBE_LOB.LOB_COPY函数原型为: 1 2 3 4 5 6 7 8 910111213 DBE_LOB.LOB_COPY( blob_obj INOUT BLOB, source_obj IN BLOB, amount IN BIGINT, dest_offset IN BIGINT DEFAULT 1, src_offset IN BIGINT DEFAULT 1);DBE_LOB.LOB_COPY( clob_obj INOUT CLOB, source_obj IN CLOB, amount IN BIGINT, dest_offset IN BIGINT DEFAULT 1, src_offset IN BIGINT DEFAULT 1); 表11 DBE_LOB.LOB_COPY接口参数说明 参数 说明 blob_obj/clob_obj 待拷入的LOB类型对象。 source_obj 待拷出的LOB类型对象。 amount 拷贝长度。 说明: 如果拷入长度小于1或拷入长度大于LOBMAXSIZE,则报错。 dest_offset 指定从blob_obj/clob_obj内容的哪个位置开始拷入的偏移(即相对LOB内容起始位置的字节数/字符数)。 说明: 如果偏移量小于1或者大于LOBMAXSIZE,则报错。 src_offset 指定从source_obj内容的哪个位置开始拷出的偏移(即相对LOB内容起始位置的字节数/字符数)。 说明: 如果偏移量小于1则报错。 DBE_LOB.ERASE 存储过程ERASE根据指定长度及起始位置偏移删除blob_obj中的内容,blob_obj中删除部分的字节填充为0。 DBE_LOB.ERASE函数原型为: 1234 DBE_LOB.ERASE ( blob_obj INOUT BLOB, amount INOUT INTEGER, off_set IN INTEGER DEFAULT 1); 表12 DBE_LOB.ERASE接口参数说明 参数 说明 blob_obj IN参数为待删除内容的LOB类型对象,OUT参数为删除指定部分后的LOB类型对象,传空报错。 amount IN参数为待删除的长度(BLOB对象以字节为单位),OUT参数为实际删除的长度。 说明: 如果删除长度小于1或传空,则报错。 off_set 指定从LOB内容的哪个位置开始删除的偏移(即相对BLOB内容起始位置的字节数)。 说明: 如果偏移量小于1或偏移量传空,则报错。 DBE_LOB.LOB_ERASE 存储过程LOB_ERASE根据指定长度及起始位置偏移删除LOB中的内容,blob中删除部分的字节填充为0,clob中删除部分的字符填充为空格,支持LOB大于1GB,最大支持32TB。 DBE_LOB.LOB_ERASE函数原型为: 123456789 DBE_LOB.LOB_ERASE ( blob_obj INOUT BLOB, amount INOUT BIGINT, off_set IN BIGINT DEFAULT 1);DBE_LOB.LOB_ERASE ( clob_obj INOUT CLOB, amount INOUT BIGINT, off_set IN BIGINT DEFAULT 1); 表13 DBE_LOB.LOB_ERASE接口参数说明 参数 说明 blob_obj/clob_obj IN参数为待删除内容的LOB类型对象,OUT参数为删除指定部分后的LOB类型对象,传空报错。 amount IN参数为待删除的长度(BLOB对象以字节为单位,CLOB对象以字符为单位),OUT参数为实际删除的长度。 说明: 如果删除长度小于1或传空,则报错。 off_set 指定从LOB内容的哪个位置开始删除的偏移(即相对BLOB内容起始位置的字节数/相对CLOB内容起始位置的字符数)。 说明: 如果偏移量小于1或偏移量传空,则报错。 DBE_LOB.CLOSE 存储过程CLOSE关闭已经打开的LOB描述符。 DBE_LOB.CLOSE函数原型为: 12345678 DBE_LOB.CLOSE( lob IN BLOB);DBE_LOB.CLOSE ( lob IN CLOB);DBE_LOB.CLOSE ( file IN INTEGER); 表14 DBE_LOB.CLOSE接口参数说明 参数 说明 lob/file 待关闭的BLOB/CLOB/文件类型对象。 DBE_LOB.MATCH 该函数返回模式串在LOB或者BFILE文件中第N次出现的位置,如果输入的是一些无效值会返回NULL值。支持LOB或者BFILE文件大于1GB,最大支持32TB。 DBE_LOB.MATCH函数原型为: 1 2 3 4 5 6 7 8 91011121314151617181920 DBE_LOB.MATCH( blob_obj IN BLOB, blob_obj2 IN RAW, beg_index IN BIGINT DEFAULT 1, occur_index IN BIGINT DEFAULT 1)RETURN BIGINT;DBE_LOB.MATCH( clob_obj IN CLOB, clob_obj2 IN VARCHAR2, beg_index IN BIGINT DEFAULT 1, occur_index IN BIGINT DEFAULT 1)RETURN BIGINT;DBE_LOB.MATCH( bfile IN DBE_LOB.BFILE, blob_obj2 IN RAW, beg_index IN BIGINT DEFAULT 1, occur_index IN BIGINT DEFAULT 1)RETURN BIGINT; 表15 DBE_LOB.match接口参数说明 参数 说明 blob_obj/clob_obj/bfile 要查找的BLOB/CLOB描述符,或者BFILE文件(必须先通过DBE_LOB.BFILEOPEN打开),传空返回null。 blob_obj2/clob_obj2 要匹配的模式,对于BLOB/BFILE是由一组RAW类型的数据组成,对于CLOB是由一组VARCHAR2类型的数据组成,传空返回null。 beg_index 对于BLOB/BFILE是以字节为单位的绝对偏移量,对于CLOB是以字符为单位的偏移量,模式匹配的起始位置是1。 说明: 有效范围为1~LOBMAXSIZE,超过返回null。 occur_index 模式匹配的次数,最小值为1。 说明: 若大于模式串在lob中最大能匹配上的次数,则返回0,若不在范围1~LOBMAXSIZE,则返回null。 DBE_LOB.COMPARE 这个函数比较部分或者全部LOB或BFILE。 如果比较的结果相等返回0,否则返回非零的值。 如果第一个LOB比第二个小,返回-1;如果第一个LOB比第二个大,返回1。 如果len,start1,start2这几个参数有无效参数返回NULL,有效的偏移量范围是1~LOBMAXSIZE。 如果start_pos1,,start_pos2同时超过LOB/BFILE长度,则返回0。 DBE_LOB.COMPARE函数原型为: 1 2 3 4 5 6 7 8 91011121314151617181920212223 DBE_LOB.COMPARE ( lob1 IN BLOB, lob2 IN BLOB, len IN BIGINT DEFAULT 1073741312, start_pos1 IN BIGINT DEFAULT 1, start_pos2 IN BIGINT DEFAULT 1)RETURN INTEGER;DBE_LOB.COMPARE ( lob1 IN CLOB, lob2 IN CLOB, len IN BIGINT DEFAULT 1073741312, start_pos1 IN BIGINT DEFAULT 1, start_pos2 IN BIGINT DEFAULT 1)RETURN INTEGER;DBE_LOB.COMPARE ( file1 IN DBE_LOB.BFILE, file2 IN DBE_LOB.BFILE, len IN BIGINT DEFAULT 1073741312, start_pos1 IN BIGINT DEFAULT 1, start_pos2 IN BIGINT DEFAULT 1)RETURN INTEGER; 表16 DBE_LOB.COMPARE接口参数说明 参数 说明 lob1/file1 第一个要比较的BLOB/CLOB/BFILE类型对象(必须先通过DBE_LOB.BFILEOPEN打开)。 lob2/file2 第二个要比较的BLOB/CLOB/BFILE类型对象(必须先通过DBE_LOB.BFILEOPEN打开)。 len 要比较的字符数或者字节数,默认值为1073741312。 start_pos1 第一个LOB描述符的偏移量,初始位置是1,最大值为lob类型最大长度。 start_pos2 第二个LOB描述符的偏移量,初始位置是1,最大值为lob类型最大长度。 DBE_LOB.SUBSTR 该函数用于读取一个LOB或者BFILE的子串,返回读取的子串。 DBE_LOB.SUBSTR函数原型为: 1 2 3 4 5 6 7 8 91011 DBE_LOB.SUBSTR( lob_loc IN BLOB, amount IN INTEGER DEFAULT 32767, off_set IN INTEGER DEFAULT 1)RETURN RAW;DBE_LOB.SUBSTR( lob_loc IN CLOB, amount IN INTEGER DEFAULT 32767, off_set IN INTEGER DEFAULT 1)RETURN VARCHAR2; 表17 DBE_LOB.SUBSTR接口参数说明 参数 说明 lob_loc 将要读取子串的LOB描述符或BFILE文件,对于BLOB的返回值是读取的RAW类型,对于CLOB类型的返回值是VARCHAR2类型。 amount 要读取的字节数或者字符数量。 off_set 从开始位置偏移的字符数或者字节数量。 DBE_LOB.LOB_SUBSTR 该函数用于读取一个LOB或者BFILE的子串,返回读取的子串,支持LOB或者BFILE大于1GB,最大支持32TB。 DBE_LOB.LOB_SUBSTR函数原型为: 1 2 3 4 5 6 7 8 91011121314151617 DBE_LOB.LOB_SUBSTR( lob_loc IN BLOB, amount IN INTEGER DEFAULT 32767, off_set IN BIGINT DEFAULT 1)RETURN RAW;DBE_LOB.LOB_SUBSTR( lob_loc IN CLOB, amount IN INTEGER DEFAULT 32767, off_set IN BIGINT DEFAULT 1)RETURN VARCHAR2;DBE_LOB.LOB_SUBSTR( bfile IN DBE_LOB.BFILE, amount IN INTEGER DEFAULT 32767, off_set IN BIGINT DEFAULT 1)RETURN RAW; 表18 DBE_LOB.LOB_SUBSTR接口参数说明 参数 说明 lob_loc/bfile 将要读取子串的LOB描述符或BFILE文件(必须先通过DBE_LOB.BFILEOPEN打开),对于BLOB/BFILE类型的返回值是读取的RAW类型,对于CLOB类型的返回值是VARCHAR2类型。 amount 要读取的字节数或者字符数量。 说明: 范围为1~32767,超出返回null。 off_set 从开始位置偏移的字符数或者字节数量。 说明: 范围为1~LOBMAXSIZE,超出返回null。 DBE_LOB.STRIP 这个存储过程用于截断指定长度的LOB,执行完这个存储过程会将LOB的长度设置为newlen参数指定的长度。 DBE_LOB.STRIP函数原型为: 1234567 DBE_LOB.STRIP( lob_loc INOUT BLOB, newlen IN INTEGER);DBE_LOB.STRIP( lob_loc INOUT CLOB, newlen IN INTEGER); 表19 DBE_LOB.STRIP接口参数说明 参数 说明 lob_loc IN参数为待读入的指定LOB类型对象,OUT参数为截断后的对象,传空报错。 newlen 截断后LOB的新长度,对于BLOB是字节数,对于CLOB是字符数。 DBE_LOB.LOB_STRIP 这个存储过程用于截断指定长度的LOB,执行完这个存储过程会将LOB的长度设置为newlen参数指定的长度。支持LOB大于1GB,最大支持32TB。 DBE_LOB.LOB_STRIP函数原型为: 1234567 DBE_LOB.LOB_STRIP( lob_loc INOUT BLOB, newlen IN BIGINT);DBE_LOB.LOB_STRIP( lob_loc INOUT CLOB, newlen IN BIGINT); 表20 DBE_LOB.LOB_STRIP接口参数说明 参数 说明 lob_loc IN参数为待读入的指定LOB类型对象,OUT参数为截断后的对象,传空报错。 newlen 截断后LOB的新长度,对于BLOB是字节数,对于CLOB是字符数。 说明: 小于1返回null,大于lob的长度,报错。 DBE_LOB.CREATE_TEMPORARY 这个存储过程创建一个临时的BLOB或者CLOB,这个存储过程仅用于语法上的兼容,并无实际意义。 DBE_LOB.CREATE_TEMPORARY函数原型为: 123456789 DBE_LOB.CREATE_TEMPORARY ( lob_loc INOUT BLOB, cache IN BOOLEAN, dur IN INTEGER DEFAULT 10);DBE_LOB.CREATE_TEMPORARY ( lob_loc INOUT CLOB, cache IN BOOLEAN, dur IN INTEGER DEFAULT 10); 表21 DBE_LOB.CREATE_TEMPORARY接口参数说明 参数 说明 lob_loc LOB描述符。 cache 仅用于语法上的兼容。 dur 仅用于语法上的兼容。 DBE_LOB.APPEND 存储过程APPEND将source_obj拼接在目标lob之后。 DBE_LOB.APPEND函数原型为: 1234567 DBE_LOB.APPEND ( blob_obj INOUT BLOB, source_obj IN BLOB);DBE_LOB.APPEND ( clob_obj INOUT CLOB, source_obj IN CLOB); 表22 DBE_LOB.APPEND接口参数说明 参数 说明 blob_obj/clob_obj 要写入的BLOB/CLOB对象。 source_obj 读取的BLOB/CLOB对象。 DBE_LOB.LOB_APPEND 存储过程LOB_APPEND将source_obj拼接在目标lob之后。 DBE_LOB.LOB_APPEND函数原型为: 1234567 DBE_LOB.LOB_APPEND( blob_obj INOUT BLOB, source_obj IN BLOB);DBE_LOB.LOB_APPEND( clob_obj INOUT CLOB, source_obj IN CLOB); 表23 DBE_LOB.LOB_APPEND接口参数说明 参数 说明 blob_obj/clob_obj 要写入的BLOB/CLOB对象。 source_obj 读取的BLOB/CLOB对象。 DBE_LOB.FREETEMPORARY 存储过程用于释放由CREATE_TEMPORARY创建的LOB文件。 DBE_LOB.FREETEMPORARY函数原型为: 12345 DBE_LOB.FREETEMPORARY ( blob INOUT BLOB);DBE_LOB.FREETEMPORARY ( clob INOUT CLOB); 表24 DBE_LOB.FREETEMPORARY接口参数说明 参数 说明 blob/clob 要释放的BLOB/CLOB对象。 DBE_LOB.FILEOPEN 这个函数用于打开数据库外部BFILE类型文件,并返回这个文件对用的文件描述符(fd),一个会话最多支持打开10个BFILE文件。 BFILE类型定义为: 1234 DBE_LOB.BFILE ( directory TEXT, filename TEXT, fd INTEGER); DBE_LOB.FILEOPEN函数原型为: 1234 DBE_LOB.FILEOPEN ( bfile IN DBE_LOB.BFILE, open_mode IN TEXT)RETURN INTEGER; 表25 DBE_LOB.FILEOPEN接口参数说明 参数 说明 bfile 要打开的数据库外部文件(BFILE类型包含了文件路径和文件名、文件描述符(fd))。 说明: file变量中包含文件目录的位置directory,文件名filename。 文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。 在打开guc参数safe_data_path时,用户只能通过高级包读写safe_data_path指定文件路径下的文件。 文件名,包含扩展(文件类型),不包括路径名。如果文件名中包含路径,在OPEN中会被忽略,在Unix系统中,文件名不能以/.结尾。 open_mode 文件打开模式(r),其他模式报错。 DBE_LOB.FILECLOSE 这个函数用于关闭数据外部BFILE类型文件。 DBE_LOB.FILECLOSE函数原型为: 12 DBE_LOB.FILECLOSE ( file IN INTEGER); 表26 DBE_LOB.FILECLOSE接口参数说明 参数 说明 file 要关闭的数据库外部文件(由FILEOPEN返回的文件描述符)。 DBE_LOB.BFILEOPEN 这个存储过程用于打开数据库外部BFILE类型文件,一个会话最多支持打开10个BFILE文件。 DBE_LOB.BFILEOPEN原型为: 123 DBE_LOB.BFILEOPEN ( bfile INOUT DBE_LOB.BFILE, open_mode IN TEXT DEFAULT 'R'); 表27 DBE_LOB.BFILEOPEN接口参数说明 参数 说明 bfile INOUT参数为打开的数据库BFILE文件。 说明: bfile变量中包含文件目录的位置directory,文件名filename。 文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。 在打开guc参数safe_data_path时,用户只能通过高级包读写safe_data_path指定文件路径下的文件。 文件名,包含扩展(文件类型),不包括路径名。如果文件名中包含路径,在OPEN中会被忽略,在Unix系统中,文件名不能以/.结尾。 open_mode 只支持read模式(r),其他模式报错。 示例 1 2 3 4 5 6 7 8 910 --获取bfile文件的子串DECLAREbfile dbe_lob.bfile;BEGINbfile = DBE_LOB.BFILENAME(dir_name, file_name); --获取对应bfile文件对象DBE_LOB.bfileopen(bfile, 'r'); --打开bfile文件RAISE NOTICE 'res:%', DBE_LOB.lob_substr(bfile, 10, 1); --获取子串,并打印DBE_LOB.bfileclose(bfile);--关闭bfile文件END;/ DBE_LOB.BFILECLOSE 这个存储过程用于关闭数据库外部BFILE类型文件。 DBE_LOB.BFILECLOSE原型为: 12 DBE_LOB.BFILECLOSE ( bfile INOUT DBE_LOB.BFILE); 表28 DBE_LOB.BFILECLOSE接口参数说明 参数 说明 bfile INOUT参数为关闭的数据库BFILE文件。 DBE_LOB.LOADFROMFILE 这个函数用于将BFILE类型外部文件读取到BLOB文件中,并以RAW类型返回该对象。 DBE_LOB.LOADFROMFILE函数原型为: 1234567 DBE_LOB.LOADFROMFILE ( dest_lob IN BLOB, src_file IN INTEGER, amount IN INTEGER, dest_offset IN INTEGER, src_offset IN INTEGER)RETURN RAW; 表29 DBE_LOB.LOADFROMFILE接口参数说明 参数 说明 dest_lob 目标blob对象,bfile文件将读取到这个文件中的指定偏移位置。 src_bfile 需要读取的源BFILE文件。 amount 读取bfile文件内容的长度。 说明: 长度小于1或者大于32767则报错。 dest_offset blob对象的偏移长度。 说明: 偏移量小于1或者大于LOBMAXSIZE则报错。 src_offset bfile文件的偏移长度。 说明: 偏移量小于1或者大于LOBMAXSIZE则报错。 DBE_LOB.LOADFROMBFILE 这个存储过程用于将BFILE类型外部文件读取到LOB对象中。 DBE_LOB.LOADFROMBFILE函数原型为: 1 2 3 4 5 6 7 8 9101112131415 DBE_LOB.LOADFROMBFILE ( dest_lob INOUT BLOB, src_file IN DBE_LOB.BFILE, amount IN BIGINT, dest_offset IN BIGINT DEFAULT 1, src_offset IN BIGINT DEFAULT 1)RETURN BLOB;DBE_LOB.LOADFROMBFILE ( dest_lob INOUT CLOB, src_file IN DBE_LOB.BFILE, amount IN BIGINT, dest_offset IN BIGINT DEFAULT 1, src_offset IN BIGINT DEFAULT 1)RETURN CLOB; 表30 DBE_LOB.LOADFROMBFILE接口参数说明 参数 说明 dest_lob IN参数为目标LOB对象,BFILE文件(必须先通过DBE_LOB.BFILEOPEN打开)将读取到这个对象中,OUT参数为完成读取后返回的LOB对象,大小支持超过1GB,最大支持32TB。 src_file 需要读取的源BFILE文件,BFILE文件的大小支持超过1GB,最大支持32TB。 amount 读取BFILE文件内容和写入lob的长度。 说明: 长度小于1或者大于LOBMAXSIZE则报错。 dest_offset LOB对象的偏移长度 说明: 偏移量小于1或者大于LOBMAXSIZE则报错。 src_offset BFILE文件的偏移长度 说明: 偏移量小于1或者大于LOBMAXSIZE则报错。 amount + src_offset 大于 src_bfile的长度 + 1 则报错。 DBE_LOB.LOADBLOBFROMFILE 这个函数用于将BFILE类型外部文件读取到BLOB文件中,并以RAW类型返回该对象。 DBE_LOB.LOADBLOBFROMFILE函数原型为: 1234567 DBE_LOB.LOADBLOBFROMFILE ( dest_lob IN BLOB, src_file IN INTEGER, amount IN INTEGER, dest_offset IN INTEGER, src_offset IN INTEGER)RETURN RAW; 表31 DBE_LOB.LOADBLOBFROMFILE接口参数说明 参数 说明 dest_lob 目标BLOB对象,BFILE文件将读取到这个对象中。 src_file 需要读取的源BFILE文件。 amount BLOB对象的长度,超过这个阈值的文件将不会保存到BLOB中。 说明: 长度小于1或者大于32767则报错。 dest_offset BLOB对象的偏移长度。 说明: 偏移量小于1或者大于LOBMAXSIZE则报错。 src_offset BFILE文件的偏移长度。 说明: 偏移量小于1或者大于LOBMAXSIZE则报错。 DBE_LOB.LOADBLOBFROMBFILE 这个存储过程用于将BFILE类型外部文件读取到BLOB对象中。 DBE_LOB.LOADBLOBFROMBFILE函数原型为: 123456 DBE_LOB.LOADBLOBFROMFILE ( dest_lob INOUT BLOB, src_file IN DEB_LOB.BFILE, amount IN BIGINT, dest_offset INOUT BIGINT, src_offset INOUT BIGINT) 表32 DBE_LOB.LOADBLOBFROMBFILE接口参数说明 参数 说明 dest_lob IN参数为目标BLOB对象,BFILE文件(必须先通过DBE_LOB.BFILEOPEN打开)将读取到这个对象中,OUT参数为完成读取后返回的blob对象。大小支持超过1GB,最大支持32TB。 src_file 需要读取的源BFILE文件,BFILE文件的大小支持超过1GB,最大支持32TB。 amount BLOB对象的长度,超过这个阈值的文件将不会保存到BLOB中。 说明: 长度小于1或者大于LOBMAXSIZE则报错。 dest_offset BLOB对象的偏移长度。 说明: 偏移量小于1或者大于LOBMAXSIZE则报错。 src_offset BFILE文件的偏移长度。 说明: 偏移量小于1或者大于LOBMAXSIZE则报错。 amount + src_offset 大于 src_bfile的长度 + 1 则报错。 DBE_LOB.LOADCLOBFROMFILE 这个函数用于将BFILE类型外部文件读取到CLOB文件中,并以RAW类型返回该对象。 DBE_LOB.LOADCLOBFROMFILE函数原型为: 1234567 DBE_LOB.LOADCLOBFROMFILE ( dest_lob IN CLOB, src_file IN INTEGER, amount IN INTEGER, dest_offset IN INTEGER, src_offset IN INTEGER)RETURN raw; 表33 DBE_LOB.LOADCLOBFROMFILE接口参数说明 参数 说明 dest_lob 目标CLOB对象,BFILE文件将读取到这个文件中。 src_file 需要读取的源bfile文件。 amount CLOB对象的长度。 说明: 长度小于1或者32767则报错。 dest_offset CLOB对象的偏移长度。 说明: 偏移量小于1或者大于LOBMAXSIZE则报错。 src_offset BFILE文件的偏移长度。 说明: 偏移量小于1或者大于LOBMAXSIZE则报错。 DBE_LOB.LOADCLOBFROMBFILE 这个存储过程用于将BFILE类型外部文件读取到CLOB对象中。 DBE_LOB.LOADCLOBFROMBFILE函数原型为: 123456 DBE_LOB.LOADCLOBFROMBFILE ( dest_lob INOUT CLOB, src_file IN DEB_LOB.BFILE, amount IN BIGINT, dest_offset INOUT BIGINT, src_offset INOUT BIGINT) 表34 DBE_LOB.LOADCLOBFROMBFILE接口参数说明 参数 说明 dest_lob IN参数为目标CLOB对象,BFILE文件(必须先通过DBE_LOB.BFILEOPEN打开)将读取到这个对象中,OUT参数为完成读取后返回的CLOB对象。大小支持超过1GB,最大支持32TB。 src_file 需要读取的源BFILE文件。BFILE文件的大小支持超过1GB,最大支持32TB。 amount CLOB对象的长度,超过这个阈值的文件将不会保存到CLOB中。 说明: 长度小于1或者大于LOBMAXSIZE则报错。 dest_offset CLOB对象的偏移长度。 说明: 偏移量小于1或者大于LOBMAXSIZE则报错。 src_offset BFILE文件的偏移长度。 说明: 偏移量小于1或者大于LOBMAXSIZE则报错。 amount + src_offset 大于 src_bfile的长度 + 1 则报错。 DBE_LOB.CONVERTTOBLOB 这个函数将clob对象转换成blob对象,不支持大于1GB的场景。 DBE_LOB.CONVERTTOBLOB函数原型为: 1234567 DBE_LOB.CONVERTTOBLOB( dest_blob IN BLOB, src_clob IN CLOB, amount IN INTEGER DEFAULT 32767, dest_offset IN INTEGER DEFAULT 1, src_offset IN INTEGER DEFAULT 1)RETURN raw; 表35 DBE_LOB.CONVERTTOBLOB接口参数说明 参数 说明 dest_blob 目标blob对象,clob转换后的文件。 src_clob 需要读取的源clob对象。 amount clob对象的长度,超过这个阈值的文件将不会保存到blob中。长度小于1或者大于LOBMAXSIZE则报错。 dest_offset blob对象的偏移长度,dest_offset=1将从文件起始位置开始载入,以此类推。 src_offset clob对象的偏移长度,src_offset=1将从文件起始位置开始读取,以此类推。 DBE_LOB.LOB_CONVERTTOBLOB 这个函数将clob对象转换成blob对象,支持LOB大于1GB。 DBE_LOB.LOB_CONVERTTOBLOB函数原型为: 123456 DBE_LOB.LOB_CONVERTTOBLOB( dest_blob INOUT BLOB, src_clob IN CLOB, amount IN BIGINT, dest_offset INOUT BIGINT, src_offset INOUT BIGINT) 表36 DBE_LOB.LOB_CONVERTTOBLOB接口参数说明 参数 说明 dest_blob 目标blob对象,clob转换后的文件。 src_clob 需要读取的源clob对象。 amount clob对象的长度,超过这个阈值的文件将不会保存到blob中。长度小于1或者大于LOBMAXSIZE则报错。 dest_offset blob对象的偏移长度,dest_offset=1将从文件起始位置开始载入,以此类推。偏移量小于1或者大于LOBMAXSIZE则报错。 src_offset clob对象的偏移长度,src_offset=1将从文件起始位置开始读取,以此类推。偏移量小于1或者大于LOBMAXSIZE则报错。 DBE_LOB.CONVERTTOCLOB 这个函数将blob对象转换成clob对象,不支持大于1GB的场景。 DBE_LOB.CONVERTTOCLOB函数原型为: 1234567 DBE_LOB.CONVERTTOCLOB( dest_clob IN CLOB, src_blob IN BLOB, amount IN INTEGER DEFAULT 32767, dest_offset IN INTEGER DEFAULT 1, src_offset IN INTEGER DEFAULT 1)RETURN text; 表37 DBE_LOB.CONVERTTOCLOB接口参数说明 参数 说明 dest_clob 目标clob对象,blob转换后的文件。 src_blob 需要读取的源blob对象。 amount blob对象的长度,超过这个阈值的文件将不会保存到clob中。 dest_offset clob对象的偏移长度,dest_offset=1将从文件起始位置开始载入,以此类推。 src_offset blob对象的偏移长度,src_offset=1将从文件起始位置开始读取,以此类推。 DBE_LOB.LOB_CONVERTTOCLOB 这个函数将blob对象转换成clob对象,支持LOB大于1G。 DBE_LOB.LOB_CONVERTTOCLOB函数原型为: 123456 DBE_LOB.LOB_CONVERTTOCLOB( dest_clob INOUT CLOB, src_blob IN BLOB, amount IN BIGINT, dest_offset INOUT BIGINT, src_offset INOUT BIGINT) 表38 DBE_LOB.LOB_CONVERTTOCLOB接口参数说明 参数 说明 dest_clob 目标clob对象,blob转换后的文件。 src_blob 需要读取的源blob对象。 amount blob对象的长度,超过这个阈值的文件将不会保存到clob中。 dest_offset clob对象的偏移长度,dest_offset=1将从文件起始位置开始载入,以此类推。偏移量小于1或者大于LOBMAXSIZE则报错。 src_offset blob对象的偏移长度,src_offset=1将从文件起始位置开始读取,以此类推。偏移量小于1或者大于LOBMAXSIZE则报错。 DBE_LOB.GETCHUNKSIZE 在数据库存储LOB数据时,内部使用toast存储,本函数返回TOAST_MAX_CHUNK_SIZE。 DBE_LOB.GETCHUNKSIZE的函数原型为: 1234567 DBE_LOB.GETCHUNKSIZE( lob_loc IN CLOB)RETURN INTEGERDBE_LOB.GETCHUNKSIZE( lob_loc IN BLOB)RETURN INTEGER 表39 DBE_LOB.GETCHUNKSIZE接口参数说明 参数 说明 lob_loc 目标CLOB/BLOB对象。 DBE_LOB.LOB_WRITE 将源对象从起始位置读取指定长度内容,写入目标LOB对象的指定偏移位置,覆盖该位置原本内容, 并返回目标LOB对象。 DBE_LOB.LOB_WRITE函数原型为: 1 2 3 4 5 6 7 8 9101112131415 DBE_LOB.LOB_WRITE( clob_obj INOUT CLOB, amount IN INTEGER, off_set IN BIGINT, source IN VARCHAR2 )RETURN CLOB;DBE_LOB.LOB_WRITE( blob_obj INOUT BLOB, amount IN INTEGER, off_set IN BIGINT, source IN RAW)RETURN BLOB; 表40 DBE_LOB.LOB_WRITE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 blob_obj/clob_obj BLOB/CLOB INOUT 否 IN参数为待写入的目标LOB,OUT参数为写入内容后的LOB amount INTEGER IN 否 待写入的长度(BLOB以字节为单位,CLOB以字符为单位) off_set BIGINT IN 否 在blob_obj/clob_obj中写入的偏移位置 source RAW/VARCHAR2 IN 否 源对象 DBE_LOB.BFILENAME 这个函数用于根据目录和文件名构造BFILE类型对象。 DBE_LOB.BFILENAME原型为: 1234 DBE_LOB.BFILENAME( directory IN TEXT, filename IN TEXT)RETURN DBE_LOB.BFILE; 表41 DBE_LOB.BFILENAME接口参数说明 参数 说明 directory 文件目录 说明: 文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。 在打开guc参数safe_data_path时,用户只能通过高级包读写safe_data_path指定文件路径下的文件。 文件名,包含扩展(文件类型),不包括路径名。如果文件名中包含路径,在OPEN中会被忽略,在Unix系统中,文件名不能以/.结尾。 filename 文件名
  • 接口介绍 高级功能包DBE_UTILITY支持的所有接口请参见表1。 表1 DBE_UTILITY 接口名称 描述 DBE_UTILITY.FORMAT_ERROR... 输出存储过程异常的调用堆栈。 DBE_UTILITY.FORMAT_ERROR... 输出存储过程异常的具体信息。 DBE_UTILITY.FORMAT_CALL_... 输出存储过程的调用堆栈。 DBE_UTILITY.GET_TIME 输出当前时间,一般用于做差得到执行时常。 DBE_UTILITY.CANONICALIZE 用于给表名字符串做规范。 DBE_UTILITY.COMMA_TO_TAB... 将用逗号隔开的名字列表的字符串转换为PL/SQL表名列表。 DBE_UTILITY.DB_VERSION 返回数据库的版本号和兼容性版本号。 DBE_UTILITY. EXEC_DDL_ST... 用于执行用户输入的DDL语句。 DBE_UTILITY.EXPAND_SQL_T... 用于展开SQL查询的视图。 DBE_UTILITY.GET_CPU_TIME 返回当前CPU处理时间的测量值。 DBE_UTILITY. GET_ENDIANN... 用于获取数据库所在平台字节序的大小端信息。 DBE_UTILITY.GET_HASH_VAL... 返回一个给定字符串的hash值。 DBE_UTILITY.GET_SQL_HASH 输出一个给定字符串的hash值。 DBE_UTILITY. IS_BIT_SET 用于检查参数n是否存在于r。 DBE_UTILITY.IS_CLUSTER_D... 用于判断当前数据库是否在数据库集群模式下运行。 DBE_UTILITY.NAME_RESOLVE 解析给定的对象名称,包括同义词翻译和必要的授权检查。 DBE_UTILITY. NAME_TOKENI... 用于解析a [. b [. c ]][@ dblink ]形式的名字。 DBE_UTILITY.OLD_CURRENT_... 返回当前用户环境下的数据库模式名称。 DBE_UTILITY.OLD_CURRENT_... 返回当前用户的名称。 DBE_UTILITY.TABLE_TO_COM... 将PL/SQL中的表名转换为用逗号隔开的名字列表的字符串。 DBE_UTILITY.FORMAT_ERROR_BACKTRACE 存储过程FORMAT_ERROR_BACKTRACE返回在执行过程中出现错误时,出现错误位置的调用堆栈。DBE_UTILITY.FORMAT_ERROR_BACKTRACE函数原型为: 12 DBE_UTILITY.FORMAT_ERROR_BACKTRACE()RETURN TEXT; DBE_UTILITY.FORMAT_ERROR_STACK 存储过程FORMAT_ERROR_STACK返回在执行过程中出现错误时,出现错误位置的具体信息。DBE_UTILITY.FORMAT_ERROR_STACK函数原型为: 12 DBE_UTILITY.FORMAT_ERROR_STACK()RETURN TEXT; DBE_UTILITY.FORMAT_CALL_STACK 存储过程FORMAT_CALL_STACK设置输出函数调用堆栈。DBE_UTILITY.FORMAT_CALL_STACK函数原型为: 12 DBE_UTILITY.FORMAT_CALL_STACK()RETURN TEXT; DBE_UTILITY.GET_TIME 存储过程GET_TIME设置输出时间,通常用于做差,单独的返回值没有意义。DBE_UTILITY.GET_TIME函数原型为: 12 DBE_UTILITY.GET_TIME()RETURN BIGINT;
  • 示例 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 --在存储过程中操作RAW数据CREATE OR REPLACE PROCEDURE proc_rawASstr varchar2(100) := 'abcdef';source raw(100);amount integer;BEGINsource := dbe_raw.cast_from_varchar2_to_raw(str);--类型转换amount := dbe_raw.get_length(source);--获取长度dbe_output.print_line(amount);END;/--调用存储过程CALL proc_raw();--删除存储过程DROP PROCEDURE proc_raw;DECLAREv_raw RAW;v_double BINARY_DOUBLE;v_float FLOAT4;v_numeric NUMERIC;v_nvarchar2 NVARCHAR2;BEGIN-- RAW类型按位与SELECT DBE_RAW.BIT_AND('AFF', 'FF0B') INTO v_raw; -- 0A0B-- RAW类型按位取反SELECT DBE_RAW.BIT_COMPLEMENT('0AFF') INTO v_raw; -- F500-- RAW类型按位异或SELECT DBE_RAW.BIT_XOR('AFF', 'FF0B') INTO v_raw; -- F5F4-- BINARY_DOUBLE类型值转RAW类型SELECT DBE_RAW.CAST_FROM_BINARY_DOUBLE_TO_RAW(1.0001,1) INTO v_raw; -- 3FF00068DB8BAC71-- RAW类型值转BINARY_DOUBLE类型SELECT DBE_RAW.CAST_FROM_RAW_TO_BINARY_DOUBLE('3FF00068DB8BAC7',1) INTO v_double; -- 1.0001-- RAW类型转FLOAT4类型SELECT DBE_RAW.CAST_FROM_RAW_TO_BINARY_FLOAT('40200000',1) INTO v_float; -- 2.5-- FLOAT4类型转RAW类型SELECT DBE_RAW.CAST_FROM_BINARY_FLOAT_TO_RAW('2.5',1) INTO v_raw; -- 40200000-- RAW类型转NUMERIC类型SELECT DBE_RAW.CAST_FROM_RAW_TO_NUMBER('808002008813') INTO v_numeric; -- 2.5-- NUMERIC类型转RAW类型SELECT DBE_RAW.CAST_FROM_NUMBER_TO_RAW('2.5') INTO v_raw; -- 808002008813-- RAW类型转NVARCHAR2类型SELECT DBE_RAW.CAST_FROM_RAW_TO_NVARCHAR2('12345678') INTO v_nvarchar2; -- \x124Vx-- RAW类型COMPARESELECT DBE_RAW.COMPARE('ABCD','AB') INTO v_numeric; -- 2-- RAW类型CONCATSELECT DBE_RAW.CONCAT('ABCD','AB') INTO v_raw; -- ABCDAB-- RAW类型CONVERTSELECT DBE_RAW.CONVERT('E695B0', 'GBK','UTF8') INTO v_raw; -- CAFD-- RAW类型COPIESSELECT DBE_RAW.COPIES('ABCD',2) INTO v_raw; -- ABCDABCD-- RAW类型指定位置和长度进行覆盖SELECT DBE_RAW.OVERLAY('abcef', '12345678123456', 2, 5, '9966') INTO v_raw; -- 120ABCEF999956-- RAW类型按字节翻转SELECT DBE_RAW.REVERSE('12345678') INTO v_raw; -- 78563412-- RAW类型字节转换(无填充码)SELECT DBE_RAW.TRANSLATE('1122112233', '1133','55') INTO v_raw; -- 55225522-- RAW类型字节转换(有填充码)SELECT DBE_RAW.TRANSLITERATE('1122112233', '55','1133','FFEE') INTO v_raw; -- 55225522FF-- RAW类型两个字节间的所有字节SELECT DBE_RAW.XRANGE('00','03') INTO v_raw; -- 00010203END;/
  • 约束说明 使用summit/id_submit创建一个新job后,该job从属于当前coordinator(即:该job仅在当前coordinator上调度和执行),其他coordinator不会调度和执行该job,如果出现coordinator节点故障,无法保证job正常执行。建议使用PKG_SERVICE.SUBMIT_ON_NODES接口,将job执行节点指定为CCN,以保证节点故障时job仍然可用。不是所有coordinator都可以查看、修改、删除其他CN创建的job。 job只能通过dbe_task高级包提供的接口进行创建、更新、删除操作,因为高级包的接口中会考虑所有CN间job信息的同步和pg_job与pg_job_proc表主键的关联操作,如果通过DML语句对pg_job表进行增删改,会导致job信息在CN间不一致和系统表无法关联变更的混乱问题,会严重影响job内部的管理。 由于用户创建的每个任务和CN绑定,当任务运行过程中,该CN故障,则该任务的状态无法实时刷新,仍为’r’状态,需要等CN启动正常后才能刷新为’s’状态。如果在任务未执行时CN故障,则该CN上的任务都得不到正常的调度和执行,需要人为干预让该CN恢复正常,或进行节点删除/替换、job才能正常的调度和执行。 job在定时执行过程中,需要在当前job所属的CN上实时更新该job的运行状态、最近执行开始时间、最近执行结束时间、下次开始时间、失败次数(如果job执行失败)等相关参数信息到pg_job系统表中,并同步到其他CN,保证job信息的一致性。如果其他CN存在节点故障,那么job所属CN会同步超时重发的处理,导致job执行时间变长,但CN间同步超时失败后,原CN上pg_job表中job的相关信息仍然能正常更新,且job能正常执行成功。当故障CN恢复正常后,可能出现该CN上pg_job表中当前job的执行时间、运行状态等参数与原CN上不一致的情况,需要原CN上再次执行该job后才能保证job信息的同步。 对于并发同时有多个job到达执行时间的场景,由于会为每个job创建一个线程来执行job,由于系统内部启动每个线程的时间会有延迟,因此会导致同时并发执行的job的开始时间有延迟,每个job的延迟时间在0.1ms左右。
  • PKG_SERVICE PKG_SERVICE支持的所有接口请参见表1。 表1 PKG_SERVICE 接口名称 描述 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE 确认该CONTEXT是否已注册。 PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS 取消所有注册的CONTEXT。 PKG_SERVICE.SQL_REGISTER_CONTEXT 注册一个CONTEXT。 PKG_SERVICE.SQL_UNREGISTER_CONTEXT 取消注册该CONTEXT。 PKG_SERVICE.SQL_SET_SQL 向CONTEXT设置一条SQL语句,目前只支持SELECT。 PKG_SERVICE.SQL_RUN 在一个CONTEXT上执行设置的SQL语句。 PKG_SERVICE.SQL_NEXT_ROW 读取该CONTEXT中的下一行数据。 PKG_SERVICE.SQL_GET_VALUE 读取该CONTEXT中动态定义的列值 PKG_SERVICE.SQL_SET_RESULT_TYPE 根据类型OID动态定义该CONTEXT的一个列。 PKG_SERVICE.JOB_CANCEL 通过任务ID来删除定时任务。 PKG_SERVICE.JOB_FINISH 禁用或者启用定时任务。 PKG_SERVICE.JOB_SUBMIT 提交一个定时任务。作业号由系统自动生成或由用户指定。 PKG_SERVICE.JOB_UPDATE 修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。 PKG_SERVICE.SUBMIT_ON_NODES 提交一个任务到所有节点,作业号由系统自动生成。 PKG_SERVICE.ISUBMIT_ON_NODES 提交一个任务到所有节点,作业号由用户指定。 PKG_SERVICE.SQL_GET_ARRAY_RESULT 获取该CONTEXT中返回的数组值。 PKG_SERVICE.SQL_GET_VARIABLE_RESULT 获取该CONTEXT中返回的列值。 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE 该函数用来确认一个CONTEXT是否已注册。该函数传入想查找的CONTEXT ID,如果该CONTEXT存在返回TRUE,反之返回FALSE。 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE函数原型为: 1234 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE( context_id IN INTEGER )RETURN BOOLEAN; 表2 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE接口说明 参数名称 描述 context_id 想查找的CONTEXT ID号 PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS 该函数用来取消所有CONTEXT PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS函数原型为: 123 PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS()RETURN VOID; PKG_SERVICE.SQL_REGISTER_CONTEXT 该函数用来打开一个CONTEXT,是后续对该CONTEXT进行各项操作的前提。该函数不传入任何参数,内部自动递增生成CONTEXT ID,并作为返回值返回给integer定义的变量。 PKG_SERVICE.SQL_REGISTER_CONTEXT函数原型为: 123 DBE_SQL.REGISTER_CONTEXT()RETURN INTEGER; PKG_SERVICE.SQL_UNREGISTER_CONTEXT 该函数用来关闭一个CONTEXT,是该CONTEXT中各项操作的结束。如果在存储过程结束时没有调用该函数,则该CONTEXT占用的内存仍然会保存,因此关闭CONTEXT非常重要。由于异常情况的发生会中途退出存储过程,导致CONTEXT未能关闭,因此建议存储过程中有异常处理,将该接口包含在内。 PKG_SERVICE.SQL_UNREGISTER_CONTEXT函数原型为: 1234 PKG_SERVICE.SQL_UNREGISTER_CONTEXT( context_id IN INTEGER )RETURN INTEGER; 表3 PKG_SERVICE.SQL_UNREGISTER_CONTEXT接口说明 参数名称 描述 context_id 打算关闭的CONTEXT ID号 PKG_SERVICE.SQL_SET_SQL 该函数用来解析给定游标的查询语句,被传入的查询语句会立即执行。目前仅支持SELECT查询语句的解析,且语句参数仅可通过text类型传递,长度不大于1G。 PKG_SERVICE.SQL_SET_SQL函数的原型为: 123456 PKG_SERVICE.SQL_SET_SQL(context_id IN INTEGER,query_string IN TEXT,language_flag IN INTEGER)RETURN BOOLEAN; 表4 PKG_SERVICE.SQL_SET_SQL接口说明 参数名称 描述 context_id 执行查询语句解析的CONTEXT ID query_string 执行的查询语句 language_flag 版本语言号,目前只支持1 PKG_SERVICE.SQL_RUN 该函数用来执行一个给定的CONTEXT。该函数接收一个CONTEXT ID,运行后获得的数据用于后续操作。目前仅支持SELECT查询语句的执行。 PKG_SERVICE.SQL_RUN函数的原型为: 1234 PKG_SERVICE.SQL_RUN(context_id IN INTEGER,)RETURN INTEGER; 表5 PKG_SERVICE.SQL_RUN接口说明 参数名称 描述 context_id 执行查询语句解析的CONTEXT ID PKG_SERVICE.SQL_NEXT_ROW 该函数返回执行SQL实际返回的数据行数,每一次运行该接口都会获取到新的行数的集合,直到数据读取完毕获取不到新行为止。 PKG_SERVICE.SQL_NEXT_ROW函数的原型为: 1234 PKG_SERVICE.SQL_NEXT_ROW(context_id IN INTEGER,)RETURN INTEGER; 表6 PKG_SERVICE.SQL_NEXT_ROW接口说明 参数名称 描述 context_id 执行的CONTEXT ID PKG_SERVICE.SQL_GET_VALUE 该函数用来返回给定CONTEXT中给定位置的CONTEXT元素值,该接口访问的是PKG_SERVICE.SQL_NEXT_ROW获取的数据。 PKG_SERVICE.SQL_GET_VALUE函数的原型为: 123456 PKG_SERVICE.SQL_GET_VALUE(context_id IN INTEGER,pos IN INTEGER,col_type IN ANYELEMENT)RETURN ANYELEMENT; 表7 PKG_SERVICE.SQL_GET_VALUE接口说明 参数名称 描述 context_id 执行的CONTEXT ID pos 动态定义列在查询中的位置 col_type 任意类型变量,定义列的返回值类型 PKG_SERVICE.SQL_SET_RESULT_TYPE 该函数用来定义从给定CONTEXT返回的列,该接口只能应用于SELECT定义的CONTEXT中。定义的列通过查询列表的相对位置来标识,PKG_SERVICE.SQL_SET_RESULT_TYPE函数的原型为: 1234567 PKG_SERVICE.SQL_SET_RESULT_TYPE(context_id IN INTEGER,pos IN INTEGER,coltype_oid IN ANYELEMENT,maxsize IN INTEGER )RETURN INTEGER; 表8 PKG_SERVICE.SQL_SET_RESULT_TYPE接口说明 参数名称 描述 context_id 执行的CONTEXT ID。 pos 动态定义列在查询中的位置。 coltype_oid 任意类型的变量,可根据变量类型得到对应类型OID。 maxsize 定义的列的长度。 PKG_SERVICE.JOB_CANCEL 存储过程CANCEL删除指定的定时任务。 PKG_SERVICE.JOB_CANCEL函数原型为: 12 PKG_SERVICE.JOB_CANCEL(job IN INTEGER); 表9 PKG_SERVICE.JOB_CANCEL接口参数说明 参数 类型 入参/出参 是否可以为空 描述 id integer IN 否 指定的作业号。 示例: CALL PKG_SERVICE.JOB_CANCEL(101); PKG_SERVICE.JOB_FINISH 存储过程FINISH禁用或者启用定时任务。 PKG_SERVICE.JOB_FINISH函数原型为: 1234 PKG_SERVICE.JOB_FINISH(id IN INTEGER,broken IN BOOLEAN,next_time IN TIMESTAMP DEFAULT sysdate); 表10 PKG_SERVICE.JOB_FINISH接口参数说明 参数 类型 入参/出参 是否可以为空 描述 id integer IN 否 指定的作业号。 broken Boolean IN 否 状态标志位,true代表禁用,false代表启用。根据true或false值更新当前job;如果为空值,则不改变原有job的状态。 next_time timestamp IN 是 下次运行时间,默认为当前系统时间。如果参数broken状态为true,则更新该参数为'4000-1-1';如果参数broken状态为false,且如果参数next_time不为空值,则更新指定job的next_time值,如果next_time为空值,则不更新next_time值。该参数可以省略,为默认值。 PKG_SERVICE.JOB_SUBMIT 存储过程JOB_SUBMIT提交一个系统提供的定时任务。 PKG_SERVICE.JOB_SUBMIT函数原型为: 123456 PKG_SERVICE.JOB_SUBMIT(id IN BIGINT,content IN TEXT,next_date IN TIMESTAMP DEFAULT sysdate,interval_time IN TEXT DEFAULT 'null',job OUT INTEGER); 当创建一个定时任务(JOB)时,系统默认将当前数据库和用户名与当前创建的定时任务绑定起来。该接口函数可以通过call或select调用,如果通过select调用,可以不填写出参。如果在存储过程中,则需要通过perform调用该接口函数。如果提交的sql语句任务使用到非public的schema,应该指定表或者函数的schema,或者在sql语句前添加set current_schema = xxx;语句。 表11 PKG_SERVICE.JOB_SUBMIT接口参数说明 参数 类型 入参/出参 是否可以为空 描述 id bigint IN 否 作业号。如果传入id为NULL,则内部会生成作业ID。 context text IN 否 要执行的SQL语句。支持一个或多个‘DML’,‘匿名块’,‘调用存储过程的语句’或3种混合的场景。 next_time timestamp IN 否 下次作业运行时间。默认值为当前系统时间(sysdate)。如果是过去时间,在提交作业时表示立即执行。 interval_time text IN 是 用来计算下次作业运行时间的时间表达式,可以是interval表达式,也可以是sysdate加上一个numeric值(例如:sysdate+1.0/24)。如果为空值或字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd' 不再执行。 job integer OUT 否 作业号。范围为1~32767。当使用select调用pkg_service.job_submit时,该参数可以省略。 示例: 1234567 SELECT PKG_SERVICE.JOB_SUBMIT(NULL, 'call pro_xxx();', to_date('20180101','yyyymmdd'),'sysdate+1');SELECT PKG_SERVICE.JOB_SUBMIT(NULL, 'call pro_xxx();', to_date('20180101','yyyymmdd'),'sysdate+1.0/24');CALL PKG_SERVICE.JOB_SUBMIT(NULL, 'INSERT INTO T_JOB VALUES(1); call pro_1(); call pro_2();', add_months(to_date('201701','yyyymm'),1), 'date_trunc(''day'',SYSDATE) + 1 +(8*60+30.0)/(24*60)' ,:jobid);SELECT PKG_SERVICE.JOB_SUBMIT (101, 'insert_msg_statistic1;', sysdate, 'sysdate+3.0/24'); PKG_SERVICE.JOB_UPDATE 存储过程UPDATE修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。 PKG_SERVICE.JOB_UPDATE函数原型为: 12345 PKG_SERVICE.JOB_UPDATE(id IN BIGINT,next_time IN TIMESTAMP,interval_time IN TEXT,content IN TEXT); 表12 PKG_SERVICE.JOB_UPDATE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 id integer IN 否 指定的作业号。 next_time timestamp IN 是 下次运行时间。如果该参数为空值,则不更新指定job的next_time值,否则更新指定job的next_time值。 interval_time text IN 是 用来计算下次作业运行时间的时间表达式。如果该参数为空值,则不更新指定job的interval_time值;如果该参数不为空值,会校验interval_time是否为有效的时间类型或interval类型,则更新指定job的interval_time值。如果为字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd' 不再执行。 content text IN 是 执行的存储过程名或者sql语句块。如果该参数为空值,则不更新指定job的content值,否则更新指定job的content值。 示例: 12 CALL PKG_SERVICE.JOB_UPDATE(101, sysdate, 'sysdate + 1.0/1440', 'call userproc();');CALL PKG_SERVICE.JOB_UPDATE(101, sysdate, 'sysdate + 1.0/1440', 'insert into tbl_a values(sysdate);'); PKG_SERVICE.SUBMIT_ON_NODES 存储过程SUBMIT_ON_NODES创建一个所有CN/DN上的定时任务,仅sysadmin/monitor admin有此权限。 PKG_SERVICE.SUBMIT_ON_NODES函数原型为: 1234567 PKG_SERVICE.SUBMIT_ON_NODES(node_name IN NAME,database IN NAME,what IN TEXT,next_date IN TIMESTAMP WITHOUT TIME ZONE,job_interval IN TEXT,job OUT INTEGER); 表13 PKG_SERVICE.SUBMIT_ON_NODES接口参数说明 参数 类型 入参/出参 是否可以为空 描述 node_name text IN 否 指定作业的执行节点,当前仅支持值为'ALL_NODE'(在所有节点执行)与'CCN'(在central coordinator执行)。 database text IN 否 集群作业所使用的database,节点类型为'ALL_NODE'时仅支持值为'postgres'。 what text IN 否 要执行的SQL语句。支持一个或多个‘DML’,‘匿名块’,‘调用存储过程的语句’或3种混合的场景。 nextdate timestamp IN 否 下次作业运行时间。默认值为当前系统时间(sysdate)。如果是过去时间,在提交作业时表示立即执行。 job_interval text IN 否 用来计算下次作业运行时间的时间表达式,可以是interval表达式,也可以是sysdate加上一个numeric值(例如:sysdate+1.0/24)。如果为空值或字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd'不再执行。 job integer OUT 否 作业号。范围为1~32767。当使用select调用dbms.submit_on_nodes时,该参数可以省略。 示例: 12 select pkg_service.submit_on_nodes('ALL_NODE', 'postgres', 'select capture_view_to_json(''dbe_perf.statement'', 0);', sysdate, 'interval ''60 second''');select pkg_service.submit_on_nodes('CCN', 'postgres', 'select capture_view_to_json(''dbe_perf.statement'', 0);', sysdate, 'interval ''60 second'''); PKG_SERVICE.ISUBMIT_ON_NODES ISUBMIT_ON_NODES与SUBMIT_ON_NODES语法功能相同,但其第一个参数是入参,即指定的作业号,SUBMIT最后一个参数是出参,表示系统自动生成的作业号。仅sysadmin/monitor admin有此权限。 PKG_SERVICE.SQL_GET_ARRAY_RESULT 该函数用来返回绑定的数组类型的OUT参数的值,可以用来获取存储过程中的OUT参数。 PKG_SERVICE.SQL_GET_ARRAY_RESULT函数原型为: 123456 PKG_SERVICE.SQL_GET_ARRAY_RESULT( context_id in int, pos in VARCHAR2, column_value inout anyarray, result_type in anyelement); 表14 PKG_SERVICE.SQL_GET_ARRAY_RESULT接口说明 参数名称 描述 context_id 想查找的CONTEXT ID号。 pos 绑定的参数名。 column_value 返回值。 result_type 返回值类型。 PKG_SERVICE.SQL_GET_VARIABLE_RESULT 该函数用来返回绑定的非数组类型的OUT参数的值,可以用来获取存储过程中的OUT参数。 PKG_SERVICE.SQL_GET_VARIABLE_RESULT函数原型为: 123456 PKG_SERVICE.SQL_GET_VARIABLE_RESULT( context_id in int, pos in VARCHAR2, result_type in anyelement)RETURNS anyelement; 表15 PKG_SERVICE.SQL_GET_VARIABLE_RESULT接口说明 参数名称 描述 context_id 想查找的CONTEXT ID号。 pos 绑定的参数名。 result_type 返回值类型。 父主题: 基础接口
  • 示例 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 BEGIN DBE_OUTPUT.SET_BUFFER_SIZE(50); DBE_OUTPUT.PRINT('hello, '); DBE_OUTPUT.PRINT_LINE('database!');--输出hello, database!END;/-- 测试disable禁用put、put_line、new_line、get_line、get_lines调用,测试put_line不输出BEGIN dbe_output.disable(); dbe_output.put_line('1');END; /-- 测试enable启用put、put_line、new_line、get_line、get_lines调用,测试put_line输出1BEGIN dbe_output.enable(); dbe_output.put_line('1');END; /-- 测试put,输入字符串a放入到缓冲区,末尾不加换行符,a不输出BEGIN dbe_output.enable(); dbe_output.put('a');END; /-- 测试new_line,添加换行,输出aBEGIN dbe_output.enable(); dbe_output.put('a'); dbe_output.new_line;END; /-- 测试get_line获取缓冲区数据保存到变量,使用put_line输出DECLARE line VARCHAR(32672); status INTEGER := 0;BEGIN dbe_output.put_line('hello'); dbe_output.get_line(line, status); dbe_output.put_line('-----------'); dbe_output.put_line(line); dbe_output.put_line(status);END; /-- 预期结果为:-----------hello0-- 测试get_line获取缓冲区多行内容,使用put_line输出DECLARE lines dbms_output.chararr; numlines integer;BEGIN dbe_output.put_line('output line 1'); dbe_output.put_line('output line 2'); dbe_output.put_line('output line 3'); numlines := 100; dbe_output.get_lines(lines, numlines); dbe_output.put_line('num: ' || numlines); dbe_output.put_line('get line 1: ' || lines(1)); dbe_output.put_line('get line 2: ' || lines(2)); dbe_output.put_line('get line 3: ' || lines(3));END;/-- 预期结果为:num: 3get line 1: output line 1get line 2: output line 2get line 3: output line 3
  • 接口介绍 高级功能包DBE_OUTPUT支持的所有接口请参见表 DBE_OUTPUT。 表1 DBE_OUTPUT 接口名称 描述 DBE_OUTPUT.PRINT_LINE 输出指定的文本,并添加换行符。 DBE_OUTPUT.PRINT 输出指定的文本,不添加换行符。 DBE_OUTPUT.SET_BUFFER_SIZE 设置输出缓冲区的大小,如果不指定则缓冲区最大能容忍20000字节,如果指定小于等于2000字节,则缓冲区允许容纳2000字节。 DBE_OUTPUT.DISABLE 禁用put、put_line、new_line、get_line、get_lines调用,并清空输出缓冲区。 DBE_OUTPUT.ENABLE 开启缓冲区,允许对PUT、PUT_LINE、NEW_LINE、GET_LINE和GET_LINES的调用,设置缓冲区大小。 DBE_OUTPUT.GET_LINE 从缓冲区中以换行符作为分界获取一行数据,获取的数据将不会输出到客户端。 DBE_OUTPUT.GET_LINES 以VARCHAR数组的形式获取缓冲区的指定行数的字符串,被取出的内容将会在缓冲区中清除,不会输出到客户端。 DBE_OUTPUT.NEW_LINE 放置一行在缓冲区末尾,放置行尾标记,空出新的一行。 DBE_OUTPUT.PUT 将输入字符串放入到缓冲区,末尾不加换行符,在存储过程结束时会将以换行符结尾的行输出显示。 DBE_OUTPUT.PUT_LINE 将输入字符串放入到缓冲区,并末尾添加换行符,在存储过程结束时会将以换行符结尾的行输出显示。 DBE_OUTPUT.PRINT_LINE 存储过程PRINT_LINE向消息缓冲区写入一行带有行结束符的文本。DBE_OUTPUT.PRINT_LINE函数原型为: 12 DBE_OUTPUT.PRINT_LINE (format IN VARCHAR2); 表2 DBE_OUTPUT.PRINT_LINE接口参数说明 参数 描述 format 写入消息缓冲区的文本。 DBE_OUTPUT.PRINT 存储过程PRINT将指定的文本输出到指定文本的前面,不添加换行符。DBE_OUTPUT.PRINT函数原型为: 12 DBE_OUTPUT.PRINT (format IN VARCHAR2); 表3 DBE_OUTPUT.PRINT接口参数说明 参数 描述 format 写入指定文本前的文本。 DBE_OUTPUT.SET_BUFFER_SIZE 存储过程SET_BUFFER_SIZE设置输出缓冲区的大小,如果不指定的话缓冲区最大只能容纳20000字节。DBE_OUTPUT.SET_BUFFER_SIZE函数原型为: 12 DBE_OUTPUT.SET_BUFFER_SIZE (size IN INTEGER default 20000); 表4 DBE_OUTPUT.SET_BUFFER_SIZE接口参数说明 参数 描述 size 设置输出缓冲区的大小。 DBE_OUTPUT.DISABLE 存储过程DISABLE禁用put、put_line、new_line、get_line、get_lines调用,并清空输出缓冲区。DBE_OUTPUT.DISABLE函数原型为: 1 DBE_OUTPUT.DISABLE;
  • 接口介绍 高级功能包DBE_RANDOM支持的所有接口请参见表 DBE_RANDOM接口参数说明。 表1 DBE_RANDOM接口参数说明 接口名称 描述 DBE_RANDOM.SET_SEED 设置一个随机数的种子。 DBE_RANDOM.GET_VALUE 生成一个大小介于指定的low及high之间的随机数。 DBE_RANDOM.SET_SEED 存储过程SEED用于设置一个随机数的种子。DBE_RANDOM.SET_SEED函数原型为: 1 DBE_RANDOM.SET_SEED (seed IN INTEGER); 表2 DBE_RANDOM.SET_SEED接口参数说明 参数 描述 seed 用于产生一个随机数的种子。 DBE_RANDOM.GET_VALUE 存储过程VALUE生成一个大小介于指定的low及high之间的随机数。DBE_RANDOM.GET_VALUE函数原型为: 1234 DBE_RANDOM.GET_VALUE(min IN NUMBER default 0,max IN NUMBER default 1)RETURN NUMBER; 表3 DBE_RANDOM.GET_VALUE接口参数说明 参数 描述 min 指定随机数大小的下边界,生成的随机数大于或等于min。 max 指定随机数大小的上边界,生成的随机数小于max。 实际上,只要求这里的参数类型是NUMERIC即可,对于左右边界的大小并没有要求。 DBE_RANDOM实现的是伪随机,所以若使用的初值(种子)不变,那么伪随机数的数序也不变,使用时需要注意。 生成的随机数有效数字为15位。
  • 示例 支持在PLSQL的存储过程内使用COMMIT/ROLLBACK。 CREATE TABLE EXAMPLE1(COL1 INT);CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE()ASBEGIN FOR i IN 0..20 LOOP INSERT INTO EXAMPLE1(COL1) VALUES (i); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; END LOOP;END;/ 支持含有EXCEPTION的存储过程使用COMMIT/ROLLBACK。 支持在存储过程的EXCEPTION语句内使用COMMIT/ROLLBACK。 支持DDL在COMMIT/ROLLBACK后的提交/回滚。 CREATE OR REPLACE PROCEDURE TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK()ASBEGIN DROP TABLE IF EXISTS TEST_COMMIT; CREATE TABLE TEST_COMMIT(A INT, B INT); INSERT INTO TEST_COMMIT SELECT 1, 1; COMMIT; CREATE TABLE TEST_ROLLBACK(A INT, B INT); RAISE EXCEPTION 'RAISE EXCEPTION AFTER COMMIT';EXCEPTION WHEN OTHERS THEN INSERT INTO TEST_COMMIT SELECT 2, 2; ROLLBACK;END;/ 支持在事务块里调用含有COMMIT/ROLLBACK的存储过程,即通过/BEGIN/START/END等开启控制的外部事务。 BEGIN; CALL TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK();END; 支持多数PLSQL的上下文和语句内调用COMMIT/ROLLBACK,包括常用的IF/FOR/CURSOR LOOP/WHILE。 CREATE OR REPLACE PROCEDURE TEST_COMMIT2()ISBEGIN DROP TABLE IF EXISTS TEST_COMMIT; CREATE TABLE TEST_COMMIT(A INT); FOR I IN REVERSE 3..0 LOOP INSERT INTO TEST_COMMIT SELECT I; COMMIT; END LOOP; FOR I IN REVERSE 2..4 LOOP UPDATE TEST_COMMIT SET A=I; COMMIT; END LOOP;EXCEPTIONWHEN OTHERS THEN INSERT INTO TEST_COMMIT SELECT 4; COMMIT;END;/ 支持存储过程内GUC参数的回滚提交。 SHOW explain_perf_mode;SHOW enable_force_vector_engine;CREATE OR REPLACE PROCEDURE GUC_ROLLBACK()ASBEGIN SET enable_force_vector_engine = on; COMMIT; SET explain_perf_mode TO pretty; ROLLBACK;END;/call GUC_ROLLBACK();SHOW explain_perf_mode;SHOW enable_force_vector_engine;SET enable_force_vector_engine = off;
  • 限制场景 不支持调用的上下文环境: 不支持除PLSQL的其他存储过程中调用COMMIT/ROLLBACK/SAVEPOINT,例如PLJAVA、PLPYTHON等。 不支持事务块中调用了SAVEPOINT后,调用含有COMMIT/ROLLBACK的存储过程。 不支持TRIGGER中调用含有COMMIT/ROLLBACK/SAVEPOINT语句的存储过程。 不支持EXECUTE语句中调用COMMIT/ROLLBACK/SAVEPOINT语句。 不支持在CURSOR语句中打开一个含有COMMIT/ROLLBACK/SAVEPOINT的存储过程。 不支持带有IMMUTABLE以及SHIPPABLE的存储过程调用COMMIT/ROLLBACK/SAVEPOINT,或调用带有COMMIT/ROLLBACK/SAVEPOINT语句的存储过程。 不支持SQL中调用含有COMMIT/ROLLBACK/SAVEPOINT语句的存储过程,除了SELECT PROC以及CALL PROC。 存储过程头带有GUC参数设置的不允许调用COMMIT/ROLLBACK/SAVEPOINT语句。 不支持CURSOR/EXECUTE语句,以及各类表达式内调用COMMIT/ROLLBACK/SAVEPOINT。 不支持存储过程返回值与表达式计算中调用含有COMMIT/ROLLBACK/SAVEPOINT的存储过程。 不支持存储过程中释放存储过程外部定义的保存点。 存储过程事务和其中的自治事务是两个独立的事务,不能互相使用对方事务中定义的保存点 不支持高级包通过DBE_SQL调用含有COMMIT/ROLLBACK/SAVEPOINT语句的存储过程。 不支持提交回滚的内容: 不支持存储过程内声明变量以及传入变量的提交/回滚。 不支持存储过程内必须重启生效的GUC参数的提交/回滚。 在存储过程使用commit/rollback有以下限制场景: 不允许Trigger的存储过程包含commit/rollback语句,或调用带有commit/rollback语句的存储过程。 CREATE OR REPLACE FUNCTION FUNCTION_TRI_EXAMPLE2() RETURN TRIGGERASEXP INT;BEGIN FOR i IN 0..20 LOOP INSERT INTO EXAMPLE1(col1) VALUES (i); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; END LOOP; SELECT COUNT(*) FROM EXAMPLE1 INTO EXP;END;/CREATE TRIGGER TRIGGER_EXAMPLE AFTER DELETE ON EXAMPLE1 FOR EACH ROW EXECUTE PROCEDURE FUNCTION_TRI_EXAMPLE2();DELETE FROM EXAMPLE1; 不支持带有IMMUABLE以及SHIPPABLE的存储过程调用commit/rolblack,或调用带有commit/rollback语句的存储过程。 CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE1()IMMUTABLEASBEGIN FOR i IN 0..20 LOOP INSERT INTO EXAMPLE1 (col1) VALUES (i); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; END LOOP;END;/ 不支持存储过程中任何变量的提交,包括存储过程内声明的变量或者传入的参数。 CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE2(EXP_OUT OUT INT)ASEXP INT;BEGIN EXP_OUT := 0; COMMIT; DBE_OUTPUT.PRINT_LINE('EXP IS:'||EXP); EXP_OUT := 1; ROLLBACK; DBE_OUTPUT.PRINT_LINE('EXP IS:'||EXP);END;/ 不支持出现在SQL中的调用(除了Select Procedure)。 CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE3()ASBEGIN FOR i IN 0..20 LOOP INSERT INTO EXAMPLE1 (col1) VALUES (i); IF i % 2 = 0 THEN EXECUTE IMMEDIATE 'COMMIT'; ELSE EXECUTE IMMEDIATE 'ROLLBACK'; END IF; END LOOP;END;/ 存储过程头带有GUC参数设置的不允许调用commit/rollback语句。 CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE4()SET ARRAY_NULLS TO "ON"ASBEGIN FOR i IN 0..20 LOOP INSERT INTO EXAMPLE1 (col1) VALUES (i); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; END LOOP;END;/ 游标open的对象不允许为带有commit/rollback语句的存储过程。 CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE5(INTIN IN INT, INTOUT OUT INT)ASBEGININTOUT := INTIN + 1;COMMIT;END;/CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE6()ASCURSOR CURSOR1(EXPIN INT)IS SELECT TRANSACTION_EXAMPLE5(EXPIN);INTEXP INT;BEGIN FOR i IN 0..20 LOOP OPEN CURSOR1(i); FETCH CURSOR1 INTO INTEXP; INSERT INTO EXAMPLE1(COL1) VALUES (INTEXP); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; CLOSE CURSOR1; END LOOP;END; / 不支持CURSOR/EXECUTE语句,以及各类表达式内调用COMMIT/ROLLBACK。 CREATE OR REPLACE PROCEDURE exec_func1()ASBEGIN CREATE TABLE TEST_exec(A INT);COMMIT;END;/CREATE OR REPLACE PROCEDURE exec_func2()ASBEGINEXECUTE exec_func1();COMMIT;END;/ 不支持存储过程返回值与表达式计算。 CREATE OR REPLACE PROCEDURE exec_func3(RET_NUM OUT INT)ASBEGIN RET_NUM := 1+1;COMMIT;END;/CREATE OR REPLACE PROCEDURE exec_func4(ADD_NUM IN INT)ASSUM_NUM INT;BEGINSUM_NUM := ADD_NUM + exec_func3();COMMIT;END;/ 不支持存储过程中释放存储过程外部定义的保存点。 CREATE OR REPLACE PROCEDURE STP_SAVEPOINT_EXAMPLE3()ASBEGIN INSERT INTO EXAMPLE1 VALUES(2); RELEASE SAVEPOINT s1; -- 释放存储过程外部定义的保存点 INSERT INTO EXAMPLE1 VALUES(3);END;/BEGIN;INSERT INTO EXAMPLE1 VALUES(1);SAVEPOINT s1;CALL STP_SAVEPOINT_EXAMPLE3();COMMIT;
共100000条