2010-10-21 27 views
5

我只需要接受下面的is_master變量的Y/N聲明。在oracle中只接受使用accept的限制字符

例如,如果我在SQL腳本中使用下面的語句,用戶可以輸入任何字符。

我想限制用戶只輸入Y Y N或N

Accept is_master prompt ' Is the user a Master user (Y/N) : ' 

回答

1

可以使用format關鍵字accept後,確定用戶需要遵循,因爲它被定義here格式。 但是我沒有在format models之間看到類似Y/N的格式。通過A1 format,您可以將輸入限制爲只有1個字符。

根據this你可以使用change關鍵字的格式做一些事情,但我沒有經驗。

1

這樣做可以讓您檢查這些值,並可能提示用戶輸入的有效性/無效性。

PROMPT Enter the value to validate 
ACCEPT value PROMPT "Value: " 
SELECT 
    DECODE('&&value', 'Y', 'This input is OK', 
       'y', 'This input is OK', 
       'N', 'This input is OK', 
       'n', 'This input is OK', 
       'ERROR This input is invalid') as Result 
FROM DUAL; 

不過,我必須承認,使用這種檢查要進行進一步的邏輯條件是,我發現自己在也難倒東西。

但是,我對腳本的瞭解非常有限。

也許看到這可能會觸動一個對變量有更多瞭解的人,以及如何將下面的結果轉化爲變量,然後將其用於進一步處理。

4

託尼·安德魯斯在較早的answer的啓發,如果你有一個名爲accept_y_n.sql外部腳本:

accept answer prompt '&question (Y/N): ' format A1 

set verify off 
set termout off 

column script new_value v_script 
select case 
    when '&answer' in ('Y','N') then '' 
    else 'accept_y_n' 
    end as script 
from dual; 

set termout on 

@&v_script. 

...然後從一個真正的腳本,你可以循環來獲得需要的格式響應:

define question='Is the user a Master user' 
@accept_y_n 
define is_master=&answer 

select '&is_master' as is_master from dual; 

它會繼續提示,直到你得到一個Y或一個N,你可以稍後使用該響應。

Is the user a Master user (Y/N): A 
Is the user a Master user (Y/N): 1 
Is the user a Master user (Y/N): 
Is the user a Master user (Y/N): Y 

I 
- 
Y 
+0

+1我喜歡你如何實現循環。從來沒有想到這一點! :-) – InSane 2010-10-21 09:32:26

1

我喜歡在循環選項亞歷克斯給了,但如果你想腳本停止,如果無效值給出,你應該能夠做這樣的事情(未測試):

WHENEVER SQLERROR EXIT 
ACCEPT answer PROMPT 'OK? (Y/N): ' FORMAT A1 
BEGIN IF '&answer.' NOT IN ('Y','N','y','n') THEN RAISE VALUE_ERROR; END IF; END; 
/
WHENEVER SQLERROR CONTINUE 
+1

我是這樣做的,但認爲循環可能在這樣一個簡單的Y/N情況下更爲有用(這是我找到Tony的原創時)。取決於OP的情況當然很好,以顯示兩種方法。 – 2010-10-21 09:09:39

相關問題