2011-02-16 48 views

回答

4

可以使用SQLPLUS「NEW_VALUE」功能來將列值保存到一個SQLPLUS變量,然後如下面卷軸它。

SQL> create table spool_file (
    2  id number, 
    3  file_name varchar2(200) 
    4 ); 

Table created. 

SQL> insert into spool_file values (1, 'test_spool_123.txt'); 

1 row created. 

SQL> commit; 

Commit complete. 

SQL> column file_name new_value file_name; 
SQL> select file_name from spool_file 
    2 where id = 1; 

FILE_NAME 
-------------------------------------------------------------------------------- 
test_spool_123.txt 

SQL> spool '&file_name'; 
SQL> select object_id from dba_objects 
    2 where rownum < 10; 

OBJECT_ID 
---------- 
     28 
     49 
     11 
     6 
     3 
     52 
     40 
     19 
     59 

9 rows selected. 

SQL> spool off; 

這裏是我的假脫機文件中的內容。

SQL> select object_id from dba_objects 
    2 where rownum < 10; 

OBJECT_ID                  
----------                  
     28                  
     49                  
     11                  
     6                  
     3                  
     52                  
     40                  
     19                  
     59                  

9 rows selected. 

SQL> spool off; 

你也可能想看看UTL_FILE包及其子程序,如果您需要在您的文字文件更大的控制權。

2

我不是100%肯定,你想要做什麼,但如果你想在你的後臺打印文件的變量名,你可以這樣做:

col dat1 NEW_VALUE v_start_time 

select to_char(sysdate,'YYYY-MM-DD_HH24MISS') dat1 from dual; 

spool test_script_&v_start_time..txt 

/* 
other stuff... 
*/ 
spool off 

這是從一個腳本例子節選我已經添加了一個時間戳到文件名,使多個輸出文件更容易管理。請注意0​​命令中的..

既然你說你想要一個實際的字段名稱在文件名中,你將不得不改變我的查詢,以查詢對存儲所有字段名稱的Oracle表(我現在不記得它的名字)的查詢,但這應該很容易。

相關問題