壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6539|回复: 2

如何用PL/SQL判断一个文件是否存在?

[复制链接]
发表于 2006/10/20 16:00:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
用UTL_FILE可以实现的,如果你打开时读不到文件就会出错的,可以利用此方法来判断文件的存在性,但我想不是任何文件都可以的,另外还需在init.ora中作设置,比较复杂。

要想实现,一般要建立directory对象或配置utl_file_dir参数,但这两种方案都有一定的限制,除非你把directory建成根目录,或utl_file_dir=*
其实还有一种变通方案,就是使用java procedure.在偶的blog里有例程.不过这样也有一定的要求,就是要安装oracle JVM组件.
 楼主| 发表于 2006/10/20 16:01:19 | 显示全部楼层
  1. CREATE OR REPLACE PROCEDURE read_demo (file_name VARCHAR2) IS
  2. vSFile   utl_file.file_type;
  3. vNewLine VARCHAR2(200);
  4. BEGIN
  5.   vSFile := utl_file.fopen('ORALOAD', 'test.txt','r');
  6.   IF utl_file.is_open(vSFile) THEN
  7.     LOOP
  8.       BEGIN
  9.         utl_file.get_line(vSFile, vNewLine);
  10.         IF vNewLine IS NULL THEN
  11.           EXIT;
  12.         END IF;
  13.         INSERT INTO test
  14.         (fld1, fld2)
  15.         VALUES
  16.         (vNewLine, file_name);
  17.       EXCEPTION
  18.         WHEN NO_DATA_FOUND THEN
  19.           EXIT;
  20.       END;
  21.     END LOOP;
  22.     COMMIT;
  23.   END IF;
  24.    utl_file.fclose(vSFile);
  25.   utl_file.frename('ORALOAD', 'test.txt', 'ORALOAD', 'x.txt', TRUE);
  26. EXCEPTION
  27.   WHEN utl_file.invalid_mode THEN
  28.     RAISE_APPLICATION_ERROR (-20051, 'Invalid Mode Parameter');
  29.   WHEN utl_file.invalid_path THEN
  30.     RAISE_APPLICATION_ERROR (-20052, 'Invalid File Location');
  31.   WHEN utl_file.invalid_filehandle THEN
  32.     RAISE_APPLICATION_ERROR (-20053, 'Invalid Filehandle');
  33.   WHEN utl_file.invalid_operation THEN
  34.     RAISE_APPLICATION_ERROR (-20054, 'Invalid Operation');
  35.   WHEN utl_file.read_error THEN
  36.     RAISE_APPLICATION_ERROR (-20055, 'Read Error');
  37.   WHEN utl_file.internal_error THEN
  38.     RAISE_APPLICATION_ERROR (-20057, 'Internal Error');
  39.   WHEN utl_file.charsetmismatch THEN
  40.     RAISE_APPLICATION_ERROR (-20058, 'Opened With FOPEN_NCHAR
  41.     But Later I/O Inconsistent');
  42. WHEN utl_file.file_open THEN
  43.     RAISE_APPLICATION_ERROR (-20059, 'File Already Opened');
  44. WHEN utl_file.invalid_maxlinesize THEN
  45.     RAISE_APPLICATION_ERROR(-20060,'Line Size Exceeds 32K');
  46. WHEN utl_file.invalid_filename THEN
  47.     RAISE_APPLICATION_ERROR (-20061, 'Invalid File Name');
  48. WHEN utl_file.access_denied THEN
  49.     RAISE_APPLICATION_ERROR (-20062, 'File Access Denied By');
  50. WHEN utl_file.invalid_offset THEN
  51.     RAISE_APPLICATION_ERROR (-20063,'FSEEK Param Less Than 0');
  52. WHEN others THEN
  53.     RAISE_APPLICATION_ERROR (-20099, 'Unknown UTL_FILE Error');
  54. END read_demo;
  55. /
复制代码
 楼主| 发表于 2006/10/23 11:40:34 | 显示全部楼层
declare   
  file_handle   UTL_FILE.FILE_TYPE;   
  begin   
  file_handle   :=   UTL_FILE.FOPEN('/tmp',   '文件名',   'w');   
  UTL_FILE.FCLOSE(file_handle);   
  exception   
  WHEN   utl_file.invalid_path   THEN   
  raise_application_error(-20000,   'ERROR:   Invalid   path   for   file   or   path   not   in   INIT.ORA.');   
  end;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 11:38 , Processed in 0.011965 second(s), 16 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表