目录创建文件命名

时间:2017-12-05 07:14:32

标签: oracle plsql

我创建了一个目录并创建了一个匿名块来创建一个文件。每次如果我执行该块,文件都会被覆盖。我需要将它创建为新文件。我该怎么做才能达到这个目的。

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 个答案:

答案 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;
/