Oracle - 使用存储过程创建文本文件

时间:2012-03-05 10:47:26

标签: oracle utl-file

在oracle 10中使用存储过程创建文本文件需要帮助。我对此非常陌生,所以请从一开始就指导我。

我找到了代码并将其创建为存储过程。我运行它,它是有效的。但我执行了它,我得到了"INVALID FILE NAME... AT SYS.UTL_FILE..."

的错误

我首先创建了一个目录,授予读取,写入目录。

CREATE OR REPLACE PROCEDURE refcursorkim IS
   l_file      utl_file.file_type;
   l_file_name VARCHAR2(60);
BEGIN
l_file := utl_file.fopen('UTL_DIR', l_file_name, 'w');          
   SELECT 'KY' || TO_CHAR(SYSDATE, 'yyyymmdd') || '1.txt' INTO l_file_name  FROM dual;
   utl_file.putf(l_file,l_file_name);
   utl_file.fclose(l_file);
END refcursorkim;

我不知道自己错过了什么,因为我根本不熟悉这一点。另一件事是,文件是否自动在指定的目录中创建?

希望你能帮助我。谢谢你,上帝保佑!

2 个答案:

答案 0 :(得分:3)

您应该使用正确的文件名打开文件。

您的代码(会出错):

CREATE OR REPLACE PROCEDURE refcursorkim
IS
   l_file        UTL_FILE.file_type;
   l_file_name   VARCHAR2 (60);
BEGIN
   l_file := UTL_FILE.fopen ('UTL_DIR', l_file_name, 'w');

   SELECT 'KY' || TO_CHAR (SYSDATE, 'yyyymmdd') || '1.txt'
     INTO l_file_name
     FROM DUAL;

   UTL_FILE.putf (l_file, l_file_name);
   UTL_FILE.fclose (l_file);
END refcursorkim;

应该(更正):

CREATE OR REPLACE PROCEDURE refcursorkim
IS
   l_file        UTL_FILE.file_type;
   l_file_name   VARCHAR2 (60);
BEGIN

   SELECT 'KY' || TO_CHAR (SYSDATE, 'yyyymmdd') || '1.txt'
     INTO l_file_name
     FROM DUAL;

   l_file := UTL_FILE.fopen ('UTL_DIR', l_file_name, 'w');

   UTL_FILE.putf (l_file, l_file_name);
   UTL_FILE.fclose (l_file);
END refcursorkim;

更多信息:http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_file.htm#i1004619

修改1:

  1. 如果文件不存在,将创建一个新文件。如果存在,它将替换为新文件。如果您需要保留文件,请使用'A'追加模式打开。
  2. UTL_FILE中没有选项可以浏览目录内容。但是,Oracle 11g中还有其他选项。你在哪个版本的Oracle? (我还会给你一个内部秘密,它将帮助你快速学习Oracle标准库函数。打开UTL_FILE包规范。它们提供了很好的文档,对程序调用中的操作提供了足够的评论)
  3. 你得到的错误是什么?你能粘贴你正在使用的代码和你得到的代码吗?一个完整的细节?

答案 1 :(得分:0)

需要在目录中创建“ UTL_DIR”。

因此,还需要具有所需的权限才能在所需位置生成输出文件。