暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Halo数据库中的DBMS包浅谈下篇

贾桂权 2024-10-26
209

前言

  本篇我们继续介绍HaloDB中的ORALCE模式下如何自定义存储过程。

广告时间:
   如果有对我们的产品感兴趣的朋友可以通过主页的联系方式与我取得联系,获取license来安装体验,目前已经开通HaloDB吐槽群,欢迎来喷,进群请私聊我获取。

书接上回,在上一篇我们介绍了Halo数据库中的常用的DBMS包,本篇我们继续补充。

DBMS_UTILITY

  DBMS_UTILITY是HaloDB数据库中的一个系统包,集成了多种实用子程序,旨在辅助数据库管理员和开发者进行数据库管理、调试及性能优化等工作。该包涵盖了分析数据库以收集统计信息、处理字符串以符合命名规则、获取数据库版本及系统参数、格式化错误和调用堆栈以辅助调试、记录时间戳和生成哈希值等功能。
image.png

示例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)

image.png

dbms_utility.get_time

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

示例2:

halo0root=#  select dbms_utility.get_time ( );
 get_time 
----------
   -72268
(1 row)

image.png
注意:
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

0bc21aa410a7615a3d326b1013f4a13.png

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)

image.png

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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论