首页 数据库 mysql教程 Oracle中utl_file包的使用

Oracle中utl_file包的使用

Jun 07, 2016 pm 05:36 PM
数字

包UTL_FIle用于读写操作系统的文件,前提是首先创建Directory对象、授权。然后就可以使用UTL_FILE包中提供的类型、过程、函数来读

一、使用方法

包UTL_FIle用于读写操作系统的文件,前提是首先创建Directory对象、授权。然后就可以使用UTL_FILE包中提供的类型、过程、函数来读取,写入,操作目录中的文件了。

二、步骤

1、创建目录对象和授权

SQL> CREATE DIRECTORY CZW AS 'D:';
Directory created
SQL> GRANT READ,WRITE ON DIRECTORY CZW TO SCOTT;
Grant succeeded
2、定义
h_file  utl_file.file_type
3、使用
h_file = utl_file.fopen('SQL_TMP','tmp_rollback_tables','a');
utl_file.put_line(h_file,"strr");
utl_file.fclose(h_file);
三、UTL_FILE包中函数说明
1、FILE_TYPE
该类型是UTL_FILE包中定义的记录类型,其成员是私有的,不能够被直接引用。该类型的定义如下:
TYPE file_type IS RECORD(
    id  BINARY_INTEGER,datatype BINARY_INTEGER
);
2、FOPEN
该函数用于打开文件。使用这个函数最多可以打开50个文件,语法如下:
UTL_FILE.FOPEN(
    location IN VARCHAR2,
    filename IN VARCHAR2,
    open_mode IN VARCHAR2,
    max_linesize IN BINARY_INTEGER
)
RETURN file_type;
当成功的执行了该函数之后,就会返回文件句柄,访问该文件可以使用该文件句柄。如果执行失败的话,则会触发例外或者显示错误。注意,当指定文件位置的时候,必须要使用DIRECTORY对象,并且其名称必须为大写。示例如下:
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
BEGIN
  HANDLE := UTL_FILE.fopen('CZW','DYWT.TXT','R',1000);
  DBMS_OUTPUT.PUT_LINE('D:DYWT.TXT已经被打开');
END;
 
3、FOPEN_NCHAR
该函数用于以UNICODE方式打开文件。当使用该函数打开文件之后,读写文件会使用UNICODE取代数据库字符集。语法如下:
UTL_FILE.FOPEN_NCHAR(
  location IN VARCHAR2,
  filename IN VARCHAR2,
  open_mode IN VARCHAR2,
  max_linesize IN BINARY_INTEGER)
RETURN file_type;
 
4、IS_OPEN
该函数用于确定文件是否已经被打开,语法如下:
UTL_FILE.IS_OPEN(file IN FILE_TYPE) RETURN BOOLEAN;
如上所示,file用于指定文件句柄。如果文件已经被打开,则返回TRUE,否则则返回FALSE,该函数的示例如下:
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
BEGIN
IF NOT UTL_FILE.is_open(HANDLE) THEN
  HANDLE := UTL_FILE.fopen('CZW','DYWT.TXT','R',1000);
END IF;
  DBMS_OUTPUT.PUT_LINE('D:DYWT.TXT已经被打开');
END;
 
5、FCLOSE
该过程用于关闭已经打开的文件,语法如下:
UTL_FILE.FCLOSE(FILE IN OUT FILE_TYPE);
 
6、FCLOSE_ALL
该过程用于关闭当前打开的所有文件。语法如下:
UTL_FILE.FCLOSE_ALL;
 
7、GET_LINE
该过程用于从已经打开的文件中读取行内容,行内容会被读取到输出缓冲区。语法如下:
UTL_FILE.GET_LINE(
  file IN FILE_TYPE,
  buffer OUT VARCHAR2,
  linesize IN NUMBER,
  len IN PLS_INTEGER DEFAULT NULL
);
如上所示,buffer用于存储读取信息;linesize用于要指定读取的最大字节数;len用于指定实际读取的长度。使用该过程的示例如下:
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
  BUFFER VARCHAR2(100);
BEGIN
IF NOT UTL_FILE.is_open(HANDLE) THEN
  HANDLE := UTL_FILE.fopen('CZW','DYWT.TXT','R',1000);
END IF;
  UTL_FILE.GET_LINE(HANDLE,BUFFER,100);
  DBMS_OUTPUT.PUT_LINE(BUFFER);
  UTL_FILE.fclose(HANDLE);
END;
 
8、GET_LINE_NCHAR
该过程的用法同上面的是一样的,只不过是用UNICODE方式读取已经打开的文件的行内容,并且将行内容读取到输出缓冲区中。
 
9、GET_RAW
该过程用于从文件中读取RAW字符串,并调节文件指针到读取位置。语法如下:
UTL_FILE.GET_RAW(
  fid IN UTL_FILE.TYPE,
  r  OUT NOCOPY RAW,
  len IN PLS_INTEGER DEFAULT NULL
);
上面所示:fid用于指定文件的句柄,r用于取得读取信息,示例如下:
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
  BUFFER VARCHAR2(2000);
BEGIN
IF NOT UTL_FILE.is_open(HANDLE) THEN
  HANDLE := UTL_FILE.fopen('CZW','DYWT.TXT','R',1000);
END IF;
  UTL_FILE.GET_RAW(HANDLE,BUFFER,1000);
  DBMS_OUTPUT.PUT_LINE(BUFFER);
  UTL_FILE.fclose(HANDLE);
END;
 
10、PUT
该过程用于将缓冲区内容写入到文件中。当使用PUT过程的时候,文件必须以写方式打开,在写入缓冲区之后,如果要结束行,那么可以使用NEW_LINE过程。语法如下:
UTL_FILE.PUT(file IN FILE_TYPE,buffer IN VARCHAR2);
使用该过程的示例如下:
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
  BUFFER VARCHAR2(2000);
BEGIN
IF NOT UTL_FILE.IS_OPEN(HANDLE) THEN
  HANDLE := UTL_FILE.FOPEN('CZW','NEW.TXT','W',1000);
END IF;
  BUFFER:='&CONTENT1';
  UTL_FILE.PUT(HANDLE,BUFFER);
  UTL_FILE.NEW_LINE(HANDLE);
  BUFFER:='&CONTENT2';
  UTL_FILE.PUT(HANDLE,BUFFER);
  UTL_FILE.NEW_LINE(HANDLE);
  UTL_FILE.FCLOSE(HANDLE);
END;
 
11、PUT_NCHAR
作用同上,该过程用于将缓冲区的内容以UNICODE方式写入到文件。
 
12、PUT_RAW
该过程用于将RAW缓冲区中的数据写入文件中。语法如下:
UTL_FILE.PUT_RAW(
  fid IN UTL_FILE.FILE_TYPE,
  R  IN RAW,
  autoflush IN BOOLEAN DEFAULT FALSE
)
上述,fid用于指定文件句柄,r用于指定存放RAW数据的缓冲区,autoflush用于指定是否自动刷新缓冲区数据.该过程的示例如下:
 
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
  BUFFER VARCHAR2(2000);
BEGIN
IF NOT UTL_FILE.IS_OPEN(HANDLE) THEN
  HANDLE := UTL_FILE.FOPEN('CZW','NEW.TXT','W',1000);
END IF;
  BUFFER:='&CONTENT1';
  UTL_FILE.PUT_RAW(HANDLE,BUFFER);
  UTL_FILE.NEW_LINE(HANDLE);
  UTL_FILE.FCLOSE(HANDLE);
END;
 
13、NEW_LINE
该过程用于为文件增加行终止符,语法如下:
UTL_FILE.NEW_LINE(file IN FILE_TYPE,lines IN NATURAL :=1);
后面的lines用于指定在文件中增加的行终止符的个数。
 
14、PUT_LINE
该过程用于将文本缓冲区内容写入到文件中。当使用该过程为文件追加内容时,会自动在文件的尾部追加行终止符。
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
  BUFFER VARCHAR2(2000);
BEGIN
IF NOT UTL_FILE.is_open(HANDLE) THEN
  HANDLE := UTL_FILE.fopen('CZW','DYWT.TXT','W',1000);
END IF;
  BUFFER := '&CONTENT';
  UTL_FILE.put_line(HANDLE,BUFFER);
  UTL_FILE.fclose(HANDLE);
END;
注意:会删掉之前的数据,是在新写入的行后面增加一个行结束符。
 
15、PUT_LINE_NCHAR
同上,该过程用于将文本缓冲区内容以UNICODE方式写入文件。当使用该过程写入内容的时候,会自动的在尾部追加行终止符。
2012/12/31 13:50经过测试,会清空原有文件中的内容。
 
16、PUTF
该过程用于以特定的格式将文本内容写入到文件中,其中%s标识字符串,,格式n表示行终止符。语法如下:
UTL_FILE.PUTF(
  file IN FILE_TYPE,
  format IN VARCHAR2,
  [arg1 IN VARCHAR2 DEFAULT NULL,
  ...
  arg5 IN VARCHAR2 DEFAULT NULL]);
上述format用于指定格式符(最多支持5个%s),arg1...arg5用于指定对应于格式符的字符串。使用该过程的示例如下:
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
  BUFFER VARCHAR2(2000);
BEGIN
IF NOT UTL_FILE.is_open(HANDLE) THEN
  HANDLE := UTL_FILE.fopen('CZW','DYWT.TXT','W',1000);
END IF;
  UTL_FILE.PUTF(HANDLE,'%sn%sn%sn','&line1','&line2','&line3');
  UTL_FILE.FCLOSE(HANDLE);
END;
 
17、PUTF_NCHAR
同上,该过程用于以特定的格式将文本内容以UNICODE方式写入到文件中。
 
18、FFLUSH
该过程用于将数据强制性写入到文件中,正常情况下,当给文件写入数据的时候,数据会被暂时的放到缓存中。过程FFLUSH用于强制将数据写入到文件中。语法如下:
UTL_FILE.FFLUSH(file IN FILE_TYPE):
 
19、FSEEK
该过程用于移动文件指针到特定的位置。当使用该过程移动文件指针的时候,既可以指定文件指针的绝对位置,也可以指定文件指针的相对位置,语法如下:
UTL_FILE.FSEEK(
  fid IN utl_file.FILE_TYPE,
  absolute_offset IN PL_INTEGER DEFALUT NULL,
  relative_offset IN PL_INTEGER DEFALUT NULL);
如上所示,absolute_offset 用于指定文件的绝对位置,relative_offset 用于指定文件的相对位置(单位:字节),使用该过程的示例如下:
DECLARE
  HANDLE UTL_FILE.FILE_TYPE;
  BUFFER VARCHAR2(2000);
BEGIN
IF NOT UTL_FILE.is_open(HANDLE) THEN
  HANDLE := UTL_FILE.fopen('CZW','DYWT.TXT','R',1000);
END IF;
  DBMS_OUTPUT.PUT_LINE('起始位置'||'==>'||UTL_FILE.FGETPOS(HANDLE));
  UTL_FILE.fseek(HANDLE,5);
  DBMS_OUTPUT.PUT_LINE('现在位置'||'==>'||UTL_FILE.FGETPOS(HANDLE));
  UTL_FILE.FCLOSE(HANDLE);
END;
 
20、FREMOVE
该过程用于删除磁盘文件。语法如下:
UTL_FILE.FREMOVE(location IN VARCHAR2,filename IN VARCHAR2);
上面的location用于指定DIRECTORY,注意,这里也必须要大写,filename用于指定要删除的文件名,示例如下:
SQL> EXEC UTL_FILE.FREMOVE('CZW','NEW.TXT');
PL/SQL procedure successfully completed
 
21、FCOPY
该过程用于将源文件的全部或者部分内容复制到目标文件中。当使用该过程的时候,如果不设起始行和结束行,则将复制文件所有的内容。语法如下:
UTL_FILE.FCOPY(
  location IN VARCHAR2,
  filename IN VARCHAR2,
  dest_dir IN VARCHAR2,
  dest_file IN VARCHAR2,
  start_line IN PLS_INTEGER DEFAULT 1,
  end_line IN PLS_INTEGER DEFALUT NULL);
上面location用于指定源文件所在的DIRECTORY对象,filename用于指定具体的文件名字,dest_dir指定希望复制到的文件的directory对象,dest_file用于指定目标文件的名称,start_line用于指定起始行号,end_line用于指定结束行号。
下面是UTL_FILE.FCOPY的例子:
SQL> exec UTL_FILE.FCOPY('CZW','DYWT.TXT','CZW','CZW.TXT');
PL/SQL procedure successfully completed
 
22、FRENAME
该过程用于修改已经存在的文件名字,其作用于UNIX的MV命令完全相同,在修改文件名字的时候,通过指定overwrite参数可以覆盖已经存在的文件。语法如下:
UTL_FILE.FRENAME(
  location IN VARCHAR2,
  filename IN VARCHAR2,
  dest_dir IN VARCHAR2,
  dest_file IN VARCHAR2,
  overwrite IN BOOLEAN DEFAULT FALSE);
上面的,overwrite用于指定是否要覆盖已经存在的文件(false 不覆盖,true可以覆盖)例子如下:
SQL> exec UTL_FILE.FRENAME('CZW','CZW.TXT','CZW','HANJB.TXT')
PL/SQL procedure successfully completed

 

Oracle中utl_file包的使用

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

全球数字虚拟币交易平台排行榜前十(2025权威排名) 全球数字虚拟币交易平台排行榜前十(2025权威排名) Mar 06, 2025 pm 04:36 PM

2025年全球数字虚拟币交易平台竞争激烈,本文根据交易量、安全性、用户体验等指标,权威发布2025年全球十大数字虚拟币交易平台排行榜。OKX凭借强大的技术实力和全球化运营策略居首,Binance以高流动性和低费用紧随其后。Gate.io、Coinbase、Kraken等平台凭借各自优势稳居前列。榜单涵盖Huobi、KuCoin、Bitfinex、Crypto.com和Gemini等交易平台,各有特色,但投资需谨慎。选择平台需考虑安全性、流动性、费用、用户体验、币种选择及监管合规性等因素,理性投资

C程序用于找到一个数的最大质因子 C程序用于找到一个数的最大质因子 Aug 27, 2023 am 10:09 AM

质因数 - 在数论中,正整数的质因数是精确整除该整数的质数。找到这些数字的过程称为整数分解或质因数分解。示例 - 288 的质因数是:288=2x2x2x2x2

币圈十大交易所2025年最新 数字货币app排行榜前十 币圈十大交易所2025年最新 数字货币app排行榜前十 Feb 27, 2025 pm 06:33 PM

虚拟货币十大交易平台排行榜(2025年最新): 币安:全球龙头,高流动性,监管受关注。 OKX:庞大用户基数,支持多种币种,提供杠杆交易。 Gate.io:资深交易所,多种法币支付方式,提供多种交易对和投资产品。 Bitget:衍生品交易所,高流动性,低费用。 火币:老牌交易所,支持多种币种和交易对。 Coinbase:美国知名交易所,受监管严格。 Phemex等等。

十大数字货币交易平台 数字货币交易平台top10榜单最新 十大数字货币交易平台 数字货币交易平台top10榜单最新 Mar 17, 2025 pm 05:57 PM

十大数字货币交易平台:1. OKX,2. Binance,3. Gate.io,4. Huobi Global,5. Kraken,6. Coinbase,7. KuCoin,8. Bitfinex,9. Crypto.com,10. Gemini,这些交易所各具特色,用户可根据安全性、费用、币种选择、用户界面和客户支持等因素选择适合自己的平台。

数字货币app十大交易平台 炒币正规平台app推荐 数字货币app十大交易平台 炒币正规平台app推荐 Mar 07, 2025 pm 06:51 PM

本文推荐十个数字货币交易App:1. OKX;2. Binance;3. Gate.io;4. Huobi Global;5. Kraken;6. Coinbase;7. KuCoin;8. Crypto.com;9. Bitfinex;10. Poloniex。选择平台需考虑安全性、流动性、交易费用、币种选择、用户界面、客服支持及法规合规性等因素,谨慎评估风险,切勿盲目跟风。

全球十大虚拟币交易平台app正版下载安装教程 全球十大虚拟币交易平台app正版下载安装教程 Mar 12, 2025 pm 05:33 PM

本文提供Binance、OKX、Gate.io、Huobi Global(火币)、Coinbase、KuCoin(库币)、Kraken和Bitfinex等主流数字货币交易平台的安卓和苹果手机APP下载方法。无论是安卓用户还是苹果用户,都能轻松找到对应平台的官方APP下载链接,并按照步骤完成安装。 文章详细指导了在各自官网或应用商店搜索下载,并针对安卓系统安装APK文件的特殊步骤做了说明,方便用户快速便捷地下载使用。

靠谱的数字货币平台有哪些 十大正规数字货币交易平台2025 靠谱的数字货币平台有哪些 十大正规数字货币交易平台2025 Mar 17, 2025 pm 05:45 PM

靠谱的数字货币平台包括:1. OKX,2. Binance,3. Gate.io,4. Huobi Global,5. Kraken,6. Coinbase,7. KuCoin,8. Bitfinex,9. Crypto.com,10. Gemini,这些交易所各具特色,用户可根据安全性、费用、币种选择、用户界面和客户支持等因素选择适合自己的平台。

十大数字货币app交易平台 top10虚拟货币app2025排行榜 十大数字货币app交易平台 top10虚拟货币app2025排行榜 Mar 13, 2025 pm 07:00 PM

十大虚拟币交易平台排名依次为:1. OKX;2. Binance;3. Gate.io;4. Huobi Global;5. Kraken;6. Coinbase;7. KuCoin;8. Crypto.com;9. Bitfinex;10. Gemini。 排名基于平台流动性、币种选择、安全性、用户体验、手续费及合规性等因素综合考量,但仅供参考,投资需谨慎,风险自担。

See all articles