2012-03-05 62 views
1

需要使用Oracle 10中的存儲過程來創建文本文件。我很新,所以請從一開始就引導我。Oracle - 使用存儲過程創建文本文件

我找到代碼並將其創建爲存儲過程。我運行它,它是有效的。但我執行它,我得到的錯誤"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; 

我不知道我在想什麼,因爲我對此並不熟悉。另一件事,是在指定的目錄中自動創建文件?

希望你能幫助我。謝謝你,上帝保佑!

回答

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包規範,它們提供了很好的文檔,並在程序調用中做了足夠的評論)

什麼是你得到的錯誤?你可以粘貼你正在使用的代碼和你得到的?完整的運行細節?

+0

這段代碼是否意味着如果文件不存在,它會自動創建?以及如何訪問oracle服務器中的文件列表?我只知道SELECT * FROM ALL_DIRECTORIES。這隻會檢索目錄列表,我想知道每個目錄中的文件(儘管我應該在不同的線程中提出這個問題......)我只是想確定是否創建了該文件。雖然我仍然有相同的錯誤..無效的文件操作... sys.utl_file ...非常感謝你! – user1249603 2012-03-06 02:59:33

+0

更新了答案。檢查。 – Guru 2012-03-06 03:11:52

+0

使用oracle 10g。這是我的代碼:'CREATE OR REPLACE PROCEDURE refcursorkim IS l_file utl_file.file_type; l_file_name VARCHAR2(60); BEGIN \t \t SELECT'KY'|| TO_CHAR(SYSDATE,'yyyymmdd')|| '1.txt' \t \t 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; /' 錯誤是「ORA-29283:無效的文件操作| ORA-06512:在SYS。UTL_FILE,第475行「| ORA-29283:無效文件操作| ORA-06512,位於SCHEMA_NAME.REFCURSORKIM,第9行| OR-06512:第2行 – user1249603 2012-03-06 03:31:56