我创建了一个目录并创建了一个匿名块来创建一个文件。每次如果我执行该块,文件都会被覆盖。我需要将它创建为新文件。我该怎么做才能达到这个目的。
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;
/
答案 0 :(得分: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;
/