2017-12-05 23 views
-1

ディレクトリを作成し、ファイルを作成するための匿名ブロックを作成しました。ブロックを実行するたびにファイルが上書きされます。私はそれを新しいファイルとして作成する必要があります。これを達成するために私は何をすべきですか?ディレクトリの作成ファイルの名前付け

DECLARE 
    v_name utl_file.file_type; 
    v_count NUMBER := 0; 
BEGIN 
    v_name := utl_file.fopen('PLSQL_DIR', 'Task1.txt', 'W'); 
    utl_file.put_line(
    v_name, 
    TO_CHAR(SYSDATE, 'DD/MM/YY/HH/MI')||' Data Migration Starts' 
); 
    FOR i IN (SELECT * FROM sue_par_det_tb) LOOP 
    utl_file.put_line(
     v_name, 
     i.patient_name||', '|| i.ord_date||', '|| i.mobile_number||', '|| i.refered_by 
    ); 
    v_count := v_count + 1; 
    END LOOP; 
    utl_file.put_line(
    v_name, 
    v_count||' Rows generated at '||TO_CHAR(SYSDATE, 'DD/MM/YY/HH24/MI') 
); 
    utl_file.fclose(v_name); 
END; 
/
+1

あなたの質問を編集して、あなたのコードを追加してください。同じファイル名を使用している場合、Oracleは同じファイルに書き込みます。 –

+0

DECLARE \t v_name \t utl_file.file_type; \t v_count \t NUMBER:= 0; BEGIN \t v_name:= utl_file.fopen( 'PLSQL_DIR'、 'Task1.txt'、 'W'); \t utl_file.put_line(v_name、TO_CHAR(SYSDATE、 'DD/MM/YY/HH/MI')|| 'データ移行の開始'); \t私は(sue_par_det_tb SELECT * FROM)のため \t \t LOOP \t \t utl_file.put_line(v_name、 \t \t \t \t \t \t i.patient_name || '' || \t \t \t \t \t \t私。 || '、' || \t \t \t \t \t \t i.refered_by); \t \t v_count:= v_count + 1; \t \t END LOOP;\t utl_file.put_line(v_name、v_count || '' || TO_CHAR(SYSDATE、 'DD/MM/YY/HH24/MI')で生成された行。 \t utl_file.fclose(v_name); END; / –

+0

上記のクエリでは、n回実行するために重複ファイルを作成する必要があります。 –

答えて

0

は、名前と拡張子にファイル名を分割し、その後check if the file existsと、ファイルが見つからなくなるまでそれがない場合は、その名前に番号を追加し、そのファイルが存在し、ループかどうかを確認します。以下のような

何か:

DECLARE 
    v_file  utl_file.file_type; 
    v_dir  VARCHAR2(30) := 'PLSQL_DIR'; 
    v_filename VARCHAR2(256) := 'Task1.txt'; 
    v_name  VARCHAR2(256) := SUBSTR(v_filename, 1, INSTR(v_filename, '.', -1) - 1); 
    v_ext  VARCHAR2(256) := SUBSTR(v_filename, INSTR(v_filename, '.', -1)); 
    v_num  INTEGER  := NULL; 
    v_count NUMBER  := 0; 
BEGIN 
    LOOP 
    EXIT WHEN NOT FileExists(v_dir, v_filename); 
    IF v_num IS NULL THEN 
     v_num := 1; 
    ELSE 
     v_num := v_num + 1; 
    END IF; 
    v_filename := v_name || '.' || v_num || v_ext; 
    END LOOP; 
    v_name := utl_file.fopen(v_dir, v_filename, 'W'); 
    -- rest of your code 
END; 
/
+0

すぐにお返事ありがとうございます。 –

関連する問題