需要有关在 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;
我不知道我错过了什么,因为我对此根本不熟悉。另一件事是,文件是否会自动在指定的目录中创建?
希望你能帮助我。谢谢你,愿上帝保佑!
您应该使用正确的文件名打开该文件。
你的代码(会出错):
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 http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_file.htm#i1004619
Edit 1:
- 如果该文件不存在,将创建一个新文件。如果存在,它将替换为新文件。如果您需要保留文件,请使用以下命令打开
'A'
追加模式。
- UTL_FILE 中没有用于浏览目录内容的选项。然而,Oracle 11g 中还有其他选项。您使用的是哪个版本的 Oracle? (我还会给你一个内部秘密,帮助你快速学习Oracle标准库函数。打开UTL_FILE包规范。他们提供了很好的文档,对过程调用中所做的事情提供了足够的注释)
你得到的错误是什么?您可以粘贴您正在使用的代码以及您得到的结果吗?完整的运行细节?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)