2017-12-05 1 views
-1

Ich habe ein Verzeichnis erstellt und einen anonymen Block erstellt, um eine Datei darin zu erstellen. Jedesmal, wenn ich den Block ausführe, wird die Datei überschrieben. Ich brauche es als neue Datei erstellt werden. Was soll ich tun, um dies zu erreichen?Verzeichniserstellung Dateiname

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

Sie bitte Ihre Frage bearbeiten und Ihren Code hinzufügen. Wenn Sie denselben Dateinamen verwenden, schreibt Oracle in die gleiche Datei. –

+0

DECLARE \t v_name \t utl_file.file_type; \t v_count \t NUMMER: = 0; BEGINN \t v_name: = utl_file.fopen ('PLSQL_DIR', 'Task1.txt', 'W'); \t utl_file.put_line (v_name, TO_CHAR (SYSDATE, 'TT/MM/JJ/HH/MI') || 'Datenmigration beginnt'); \t FOR i IN (SELECT * FROM sue_par_det_tb) \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 i. ord_date || ' '|| \t \t \t \t \t \t i.mobile_number ||',' || \t \t \t \t \t \t i.refered_by); \t \t v_count: = v_count + 1; \t \t ENDSCHLEIFE; \t utl_file.put_line (v_name, v_count || 'Zeilen generiert bei' || TO_CHAR (SYSDATE, 'DD/MM/YY/HH24/MI')); \t utl_file.fclose (v_name); ENDE; / –

+0

In der obigen Abfrage muss ich eine doppelte Datei erstellen, um es n-mal auszuführen. –

Antwort

0

Split Ihre Dateinamen in Namen und die Erweiterung und dann check if the file exists und, falls dies der Fall, dann eine Nummer an den Namen angehängt und prüfen, ob die Datei vorhanden ist und Schleife, bis Sie keine Datei.

Etwas wie:

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

Vielen Dank für Ihre sofortige Antwort. –