2014-02-23 49 views
0

有一個查詢我經常每天使用。我通常在全天的where子句中使用不同的條件多次運行相同的查詢。SQL Plus - 根據用戶輸入運行查詢

如下表:

columnA columnB columnC columnD 
1   2   3  4 
5   6   7  8 
9   9   9  9 

當我運行我的查詢我通常修改where子句基於某個特定的列得到的結果。有時我會說'where columnA=1',或者我會將其更改爲where columnB=3'

爲了避免每次都要重新輸入查詢,我決定在SQL plus腳本中編寫腳本。

要運行,我想如下運行腳本:

> @myScript columnA 3 
or 
> @myScript columnC 7 

這裏是我到目前爲止有:

define searchColumn=&&1 
define searchParam=&&2 

Select columnA, columnB, columnC,columnD 
from myTable t 
where t.'&searchColumn' in ('&searchParam') 

以上不工作但因爲它是在抱怨t.'&searchColumn' 。我如何在包含前綴的where子句中構建表名。另外,如果你有類似的經驗,你有一套你每天運行的常見查詢,我很想知道你如何使用它們來讓你的生活更輕鬆。如果有更好的解決方案,請讓我知道。

感謝

+0

用戶如何提供輸入? –

+0

我將運行在SQL加提示e.g @ myScript.sql columnA 3 – ziggy

+0

列名的腳本並不需要被括在「」 –

回答

1

嘗試:

Select columnA, columnB, columnC, columnD 
from myTable t 
where t.&searchColumn in ('&searchParam') 

而且,如果他們打算在替代值打字,你不需要提前定義它們。

而且我會改變「IN」改爲「=」

或者,如果他們需要輸入多個值,以在搜索:

Select columnA, columnB, columnC,columnD 
from myTable t 
where t.&searchColumn in (&searchParam) 

但他們必須有正確的輸入,如:

'串', '字符串1'

2010,2011

如果你希望他們能夠通過定義與替換值輸入到文件(頂部),這是你會做什麼:

define searchColumn = column_name_here 
define searchParam = search_term_here 

Select columnA, columnB, columnC,columnD 
from myTable t 
where t.&searchColumn in ('&searchParam') 

同樣,你可能想將改爲=

在附註中,如果未定義替代變量,則將提示用戶輸入它。因此,它取決於你是否希望他們被提示每次運行時輸入該密碼,或者如果你希望他們能夠在腳本頂部定義的變量,它們運行它。

+0

好吧,我看到我在做什麼錯。謝謝。 – ziggy