2013-05-13 57 views
0

我有一個批處理文件,當我運行時調用一個SQL文件。這個SQL文件提示用戶輸入我在MYPeriod中存儲的數據(這接受日期作爲輸入).SQL文件的輸出是一個CSV文件。 這裏是我的SQL文件代碼:用戶在sql命令中輸入數據時的問題

PROMPT Enter a period 
ACCEPT MYPeriod PROMPT 'Period: ' 

SET LINESIZE 500 FEEDBACK OFF TRIMSPOOL ON TERMOUT OFF HEAD OFF PAGESIZE 0 TERM OFF 

spool E:\abc\Test\File1_&MYPeriod.csv 

select Account || ',' || Membername || ',' || GROUP || ',' || FUTURE1 from [email protected]_Test where Key=21 and period_name= '&MYPeriod' ; 
spool off 
exit 

我的查詢:

  1. 當我運行此,文件獲取地點E產生:\ ABC \測試一個名字File1_12-2012csv。 LST。我想要一個csv文件。 如果我硬編碼的文件名稱(取代& MYPeriod通過測試)File1_Test.csv得到完美。爲什麼代碼無法創建文件的名稱用戶有輸入..?

  2. 這樣做的輸出會創建一個csv文件並從db中檢索帳戶,但它會在頂部打印兩個額外的行。新的查詢和舊的查詢。我如何重新定義我的代碼,以便它自動移除。

欣賞你的幫助球員。

+2

你的實際問題是什麼? – 2013-05-13 07:14:15

+0

首先我想要文件名到File1_(用戶輸入期間).csv ..現在它不這樣做.. – user2376670 2013-05-13 07:16:57

+0

第二個問題 - 如果我修復我的文件名到File1_new.csv,然後用數據創建一個csv文件,但是這個文件有兩個額外的行:select Account || ','||成員名|| ','|| GROUP || ','||來自ACTUAL_V @ UAT1_Test的FUTURE1,其中Key = 21和period_name ='&MYPeriod'; 和第二行選擇Account || ','||成員名|| ','|| GROUP || ','||來自ACTUAL_V @ UAT1_Test的FUTURE1,其中Key = 21和period_name ='&20-2012'; 。我不想要這兩條線。我如何刪除它..? – user2376670 2013-05-13 07:18:53

回答

2

替換變量是optionally terminated by a period將它們與後面的任何字符分開。如果你想用一個字符串中爲好,你必須明確地添加終止:

spool E:\abc\Test\File1_&MYPeriod..csv 

對於兩個額外的線路問題,添加set verify off;目前它被設置爲on(默認情況下),因此它會顯示您使用的任何替代變量的舊值和新值。


我所知道的獲得日期爲文件名的唯一方法就是把它變成一個替代變量第一:

set termout off 
column x_run_dt new_value y_run_dt 
select to_char(sysdate, 'YYYYMMDDHH24MISS') as x_run_dt from dual; 
set termout on 
spool E:\abc\Test\File1_&MYPeriod._&y_run_dt..csv 

new_value子句讓你在這個創建一個替代變量,&y_run_dt情況下,來自查詢列的值x_run_dt。使用set termout子句之間包含生成該值的select的選項將其作爲腳本運行時,會將其從正常輸出中隱藏起來。

+0

感謝它完美的工作。我還想添加當前日期和時間文件運行。如何添加..?像spool E:\ abc \ Test \ File1_&MYPeriod。(+系統中的當前日期和時間).csv..how我會這樣做。 – user2376670 2013-05-13 16:26:39