2016-10-05 8 views
0

Oracle 데이터베이스가 있고 파일로 데이터를 내보내려고합니다. 파일 이름, 확장자 및 구분 기호는 테이블에서 값을받습니다. 문제는 내가 테이블에서 값을 사용할 수 없다는 것입니다. 당신이 나에게 그것을 할 수있는 방법을 제안 해 주시겠습니까? 아니면 배치로 할 수 있을까요?SQLPlus 동적 스풀 파일 이름

표 (ID, 경로, 파일명, 확장자, 세퍼레이터)

script.sql

conn .... 
variable fullpath varchar2(20); 
variable filename varchar2(10); 
variable extension varchar2(5); 
variable sep varchar2(1); 

begin 
    select filename, path, extension,separator 
    into :filename, :fullpath, :extension, :sep 
    from Table; 
end; 
/

set separator sep 

spool fullpath||filename||'.'||extension; 
... select queries... 
spool off; 

안부

+0

나는 "sqlplus dynamic spool file name"을 검색하여 많은 조회수를 보았습니다. 첫 번째는 Ask Tom의 것이었고 사용자가 적응할 수있는 방법을 설명했습니다. (https : //asktom.oracle.com/pls/apex/f? p = 100 : 11 : 0 :::: P11_QUESTION_ID : 3581757800346555562) – EdStevens

답변

1

당신은 대체 변수를 사용할 수 있고 the column commandthe new_value clause.

conn .... 

column spool_path new_value sub_spool_path noprint 
column sep new_value sub_sep noprint 
set verify off 
set termout off 

select path || filename ||'.'|| extension as spool_path, separator as sep 
from Table; 

set termout on 

set separator &sub_sep 

spool &sub_spool_path 
... select queries... 
spool off; 
1

SPOOL 사용하면 PLSQL에서 사용할 수 없도록하는 SQLPLUS 명령이고 동적으로 차단하십시오.

한 가지 방법은 런타임에 두 번째 스크립트를 만들고 쿼리를 기반으로 동적으로 작성한 다음 작업을 수행하기 위해 실행할 수 있습니다. 예를 들어 :

conn ... 
set serveroutput on 
set feedback off 
variable fullpath varchar2(20); 
variable filename varchar2(10); 
variable extension varchar2(5); 
variable sep varchar2(1); 
/* spool to a fixed file, that will contain your dynamic script */ 
spool d:\secondScript.sql 
begin 
    select 'filename', 'd:\', 'txt', '|' 
    into :filename, :fullpath, :extension, :sep 
    from dual; 

    /* write the second script */ 

    dbms_output.put_line('set colsep ' || :sep); 
    dbms_output.put_line('spool ' || :fullpath || :filename || '.' || :extension); 
    dbms_output.put_line('select 1, 2, 3 from dual;'); 
    dbms_output.put_line('spool off'); 
end; 
/
spool off 

/* run the second script */ 
@d:\secondscript.sql 

이 제공 :

SQL> sta C:\firstScript.sql 
Connected. 
set colsep | 
spool d:\filename.txt 
select 1, 2, 3 from dual; 

     1|   2|   3 
----------|----------|---------- 
     1|   2|   3 

D : \ 파일 이름 .txt :

  1|   2|   3             
----------|----------|----------             
     1|   2|   3             
+0

Aleksej에 감사드립니다. 그러나 한 파일이 모든 작업을 원합니다. –