我只需要接受下面的is_master變量的Y/N聲明。在oracle中只接受使用accept的限制字符
例如,如果我在SQL腳本中使用下面的語句,用戶可以輸入任何字符。
我想限制用戶只輸入Y Y N或N
Accept is_master prompt ' Is the user a Master user (Y/N) : '
我只需要接受下面的is_master變量的Y/N聲明。在oracle中只接受使用accept的限制字符
例如,如果我在SQL腳本中使用下面的語句,用戶可以輸入任何字符。
我想限制用戶只輸入Y Y N或N
Accept is_master prompt ' Is the user a Master user (Y/N) : '
可以使用format
關鍵字accept
後,確定用戶需要遵循,因爲它被定義here格式。 但是我沒有在format models之間看到類似Y/N的格式。通過A1 format,您可以將輸入限制爲只有1個字符。
根據this你可以使用change關鍵字的格式做一些事情,但我沒有經驗。
這樣做可以讓您檢查這些值,並可能提示用戶輸入的有效性/無效性。
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;
不過,我必須承認,使用這種檢查要進行進一步的邏輯條件是,我發現自己在也難倒東西。
但是,我對腳本的瞭解非常有限。
也許看到這可能會觸動一個對變量有更多瞭解的人,以及如何將下面的結果轉化爲變量,然後將其用於進一步處理。
託尼·安德魯斯在較早的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
我喜歡在循環選項亞歷克斯給了,但如果你想腳本停止,如果無效值給出,你應該能夠做這樣的事情(未測試):
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
我是這樣做的,但認爲循環可能在這樣一個簡單的Y/N情況下更爲有用(這是我找到Tony的原創時)。取決於OP的情況當然很好,以顯示兩種方法。 – 2010-10-21 09:09:39
+1我喜歡你如何實現循環。從來沒有想到這一點! :-) – InSane 2010-10-21 09:32:26