2017-12-05 2 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 제가 IN (SELECT * sue_par_det_tb) 미국 \t \t \t \t LOOP 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 i.mobile_number || ','|| \t \t \t \t \t \t i.refered_by); \t \t v_count : = v_count + 1; \t \t 끝 루프; \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

귀하의 즉각적인 답변을 보내 주셔서 감사합니다. –

관련 문제