在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;
我不知道自己错过了什么,因为我根本不熟悉这一点。另一件事是,文件是否自动在指定的目录中创建?
希望你能帮助我。谢谢你,上帝保佑!答案 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:
'A'
追加模式打开。你得到的错误是什么?你能粘贴你正在使用的代码和你得到的代码吗?一个完整的细节?
答案 1 :(得分:0)
需要在目录中创建“ UTL_DIR”。
因此,还需要具有所需的权限才能在所需位置生成输出文件。