Oracle dbms_output vs utl_file 使用(二)

3 篇文章 0 订阅
文章介绍了Oracle数据库中的UTL_FILE包用于读写外部文件,特别是写日志的功能。UTL_FILE需要设置DIRECTORY和权限,而DBMS_OUTPUT使用更简便。在简单的日志记录场景下,作者倾向于使用DBMS_OUTPUT,但在生成报告等复杂场景,则推荐使用UTL_FILE。
摘要由CSDN通过智能技术生成

Oracle dbms_output vs utl_file 使用(二)

UTL_FILE

UTL_FILE是Oracle用于读写外部文件的工具包。

在使用UTL_FILE前需要设置Oracle DIRECTORY映射外部文件目录。

--log_dir映射到/appl/gl/log
SQL> CREATE DIRECTORY log_dir AS '/appl/gl/log'; 
--将读写权限赋予DBA角色
SQL> GRANT READ ON DIRECTORY log_dir TO DBA; 
SQL> GRANT WRITE ON DIRECTORY log_dir TO DBA;

--USER_DIR映射到/appl/gl/user
SQL> CREATE DIRECTORY USER_DIR AS '/appl/gl/user'; 
--将读写权限赋予PUBLIC角色(所有账号都可以用)
SQL> GRANT READ ON DIRECTORY USER_DIR TO PUBLIC; 
SQL> GRANT WRITE ON DIRECTORY USER_DIR TO PUBLIC; 

UTL_FILE有很多读写文件和创建删除文件的方法,因为我只是需要写log而且是一行一行写所以基本只用PUT_LINE()方法就够了。

declare
	fileHandle UTL_FILE.FILE_TYPE;
begin
  --打开文件(文件不能使用中文名), 32767是缓冲区最大值
  fileHandle := UTL_FILE.FOPEN('OS_LOG_DIR', 'test_write_file.log', 'w', 32767);
  --PUT_LINE 写一行字符串,一行的长度不能超出32767
  UTL_FILE.PUT_LINE(fHandle, '写一行log......');
	--关闭file
  UTL_FILE.FCLOSE(fHandle);
end;

log文件:

PUT_LINE()的定义:

UTL_FILE.PUT_LINE (
  file IN FILE_TYPE, --FILE_TYPE 是UTL_FILE里面定义一个RECORD类型
  buffer IN VARCHAR2, 
  autoflush IN BOOLEAN DEFAULT FALSE
);

参数说明:

Parameters

Descriptions

file

Active file handle returned by an FOPEN call.

FOPEN方法返回的file handler。

buffer

Text buffer that contains the lines to be written to the file.

包含要写入文件的行的文本缓冲区(文本内容)

autoflush

Flushes the buffer to disk after the WRITE.

WRITE之后是否自动刷新缓冲区。

注意:

  • 缓冲区参数的最大大小为32767字节,除非在FOPEN中指定较小的大小。如果未指定,默认值1024。如果没有刷新缓冲区,所有PUT调用的总和不能超过32767。

  • 如果文件已经被其它操作打开,则引发INVALID OPERATION异常。

UTL_FILE使用时主要步骤:

  1. 打开文件,UTL_FILE.FOPEN;

  1. 读写文件,get\get_line\put\put_line......

  1. 关闭文件,UTL_FILE.FCLOSE;

对比dbms_output & utl_file 写log的优劣

回归我的初冲是对比dbms_output & utl_file 写log优劣。

dbms_output 和 utl_file都有一行32767的长度限,但是utl_file还需要设置DIRECTORY和对应的目录权限这些通常是DBA才有权限做的事情,而dbms_output使用上更加简单。

在我这种简单的使用场景我会选择使用dbms_output,但是如果是写report的场景会选择使用utl_file。

UTL_FILE其它的文件操作方法请参考官方文档。

UTL_FILE官方文档:https://docs.oracle.com/en/database/oracle/oracle-database/21/arpls/UTL_FILE.html


本文只是个人(EnergyNo8)学习笔记如有错误请网友指出。
如有引用或转载请标明出处!
努力、坚持,总会有收获!
______ EnergyNo8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

能量老8

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值