Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 目录创建文件命名_Oracle_Plsql - Fatal编程技术网

Oracle 目录创建文件命名

Oracle 目录创建文件命名,oracle,plsql,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(SYS

我已经创建了一个目录并创建了一个匿名块来在其中创建一个文件。每次执行块时,文件都会被覆盖。我需要它被创建为一个新文件。我该怎么做才能做到这一点

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

将文件名拆分为名称和扩展名,如果有,则在名称后附加一个数字,检查该文件是否存在并循环,直到找不到文件为止

比如:

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

请编辑您的问题并添加代码。如果使用相同的文件名,Oracle将写入相同的文件。声明v_name utl_file.file_type;v_计数编号:=0;开始v_name:=utl_file.fopen'PLSQL_DIR','Task1.txt','W';utl_file.put_linev_name,TO_CHARSYSDATE,'DD/MM/YY/HH/MI'| |数据迁移开始';对于我,请从sue_par_det_tb LOOP utl_file.put_linev_name、i.patient_name、i.ord_date、i.mobile|number、i.refered|by;v_计数:=v_计数+1;端环;utl|u file.put_line v|u name,v|u count | | |行在“| |到| CHARSYSDATE,'DD/MM/YY/HH24/MI'生成;utl_file.fclosev_名称;结束/在上面的查询中,我需要创建一个重复的文件来执行n次。感谢您的即时响应。