前言
本篇我们继续介绍HaloDB中的ORALCE模式下如何自定义存储过程。
广告时间:
如果有对我们的产品感兴趣的朋友可以通过主页的联系方式与我取得联系,获取license来安装体验,目前已经开通HaloDB吐槽群,欢迎来喷,进群请私聊我获取。
书接上回,在上一篇我们介绍了Halo数据库中的常用的DBMS包,本篇我们继续补充。
DBMS_UTILITY
DBMS_UTILITY是HaloDB数据库中的一个系统包,集成了多种实用子程序,旨在辅助数据库管理员和开发者进行数据库管理、调试及性能优化等工作。该包涵盖了分析数据库以收集统计信息、处理字符串以符合命名规则、获取数据库版本及系统参数、格式化错误和调用堆栈以辅助调试、记录时间戳和生成哈希值等功能。
示例1:
halo0root=# show database_compat_mode;
database_compat_mode
----------------------
oracle
(1 row)
halo0root=# select DBMS_UTILITY.FORMAT_CALL_STACK ( );
format_call_stack
----------------------------
----- SPL Call Stack -----+
object line object +
handle number name +
(1 row)

dbms_utility.get_time
用于确定当前时间(以百分之一秒为单位)。此子程序主要用于确定经过的时间。子程序被调用两次,在某个过程的开始和结束时,然后从第二个(后来的)数字中减去第一个(较早)数字以确定经过的时间。下面我们一起用一个示例来看一下。
示例2:
halo0root=# select dbms_utility.get_time ( );
get_time
----------
-72268
(1 row)

注意:
1、UTL_FILE 包使用该软件包,PL / SQL 程序可以读取和写入操作系统文本文件。 提供受限版本的操作系统流文件的I/O。
2、文件位置和文件名参数作为单独的字符串提供给函数,以便可以根据可访问目录对象视图指定的可访问目录列表检查文件位置。
3、文件位置和名称必须共同表示系统上的合法文件名,并且目录必须是可访问的(注意文件权限问题)。
如果想关闭会话的所有打开的文件句柄,当 PL/SQL 程序在异常时退出时。可以使用下面的方式:
halo0root=# call utl_file.fclose_all( );
CALL
halo0root=# \df utl_file.*
List of funct
ions
Schema | Name | Result data type |
Argument data types | Type
----------+--------------+--------------------+-----------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------+------
utl_file | __fclose | utl_file.file_type | file utl_file.file_type
| func
utl_file | fclose | | INOUT file utl_file.file_type
| proc
utl_file | fclose_all | |
| proc
utl_file | fcopy | | IN src_location text, IN src_filename text, IN dest_location text, IN dest_filename text
, IN start_line integer DEFAULT 1, IN end_line integer DEFAULT NULL::integer | proc
utl_file | fflush | | IN file utl_file.file_type
| proc
utl_file | fgetattr | | IN location text, IN filename text, OUT fexists boolean, OUT file_length bigint, OUT blo
cksize integer | proc
utl_file | fopen | utl_file.file_type | location text, filename text, open_mode text, max_linesize integer DEFAULT 1024
| func
utl_file | fopen | utl_file.file_type | location text, filename text, open_mode text, max_linesize integer, encoding name
| func
utl_file | fremove | | IN location text, IN filename text
| proc
utl_file | frename | | IN location text, IN filename text, IN dest_dir text, IN dest_file text, IN overwrite bo
olean DEFAULT false | proc
utl_file | get_line | | IN file utl_file.file_type, INOUT buffer text, IN len integer DEFAULT NULL::integer
| proc
utl_file | get_nextline | | IN file utl_file.file_type, INOUT buffer text
| proc
utl_file | is_open | boolean | file utl_file.file_type
| func
utl_file | new_line | | IN file utl_file.file_type, IN lines integer DEFAULT 1
| proc
utl_file | put | | IN file utl_file.file_type, IN buffer anyelement
| proc
utl_file | put | | IN file utl_file.file_type, IN buffer text
| proc
utl_file | put_line | | IN file utl_file.file_type, IN buffer text, IN autoflush boolean DEFAULT false
| proc
utl_file | putf | | IN file utl_file.file_type, IN format text, IN arg1 text DEFAULT NULL::text, IN arg2 tex
t DEFAULT NULL::text, IN arg3 text DEFAULT NULL::text, IN arg4 text DEFAULT NULL::text, IN arg5 text DEFAULT NULL::text | proc
utl_file | tmpdir | text |
| func
(19 rows)
halo0root=# call utl_file.fclose_all( );
CALL

utl_file.fcopy
utl_file.fcopy 是数据库中 UTL_FILE 包提供的一个子程序,用于复制文件。UTL_FILE 包主要是用于对服务器端的文件进行读写操作的工具包,而 fcopy 则是其中用于文件复制的功能。下面我们用示例一起来看下。
DECLARE
src_location VARCHAR2(4000) := 'SOURCE_DIR'; -- 源目录对象名
src_filename VARCHAR2(4000) := 'source_file.txt'; -- 源文件名
dest_location VARCHAR2(4000) := 'DEST_DIR'; -- 目标目录对象名
dest_filename VARCHAR2(4000) := 'dest_file.txt'; -- 目标文件名
BEGIN
-- 复制文件从第一行到最后一行
UTL_FILE.FCOPY(
src_location => src_location,
src_filename => src_filename,
dest_location => dest_location,
dest_filename => dest_filename
);
-- 输出成功消息
DBMS_OUTPUT.PUT_LINE('File copied successfully.');
EXCEPTION
WHEN OTHERS THEN
-- 处理异常
DBMS_OUTPUT.PUT_LINE('Error occurred: ' || SQLERRM);
END;
/
utl_file.frename:将现有文件重命名为新名称
语法:
UTL_FILE.FRENAME ( src_location IN VARCHAR2,
src_filename IN VARCHAR2,
dest_location IN VARCHAR2,
dest_filename IN VARCHAR2,
OVERWOVER IN BOOLEAN DEFAULT FALSE);
说明:
1、src_location 源文件的目录位置(区分大小写)
2、src_filename 要重命名的源文件
3、dest_location 目标文件的目标目录
4、dest_filename 文件的新名称
示例3:
halo0root=#call UTL_FILE.FRENAME('/home/halo','G.txt','/home/halo','hh');
CALL
halo0root=# select utl_file.is_open ('123') from dual;
is_open
---------
f
(1 row)

最后:
本期介绍了HaloDB中的DBMS包DBMS_UTILITY,我们下期见。




