[英]Accept only restricted characters using accept in oracle
我需要只接受下面的is_master變量聲明的Y / N.
例如,如果我在SQL腳本中使用以下語句,則用戶可以輸入任何字符。
我想限制用戶只輸入y Y n或N.
Accept is_master prompt ' Is the user a Master user (Y/N) : '
靈感來自Tony Andrews之前的回答 ,如果你有一個名為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
執行此類操作可以檢查值,並可能提示用戶輸入的有效性/無效性。
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;
但是,我必須承認,使用此檢查有條件地執行進一步的邏輯是我發現自己也被困住的事情。
但是,我對腳本的了解非常有限。
也許看到這可能會與那些對變量有更多了解以及如何將結果得到下面的變量然后用於進一步處理的人產生共鳴。
我喜歡Alex給出的循環選項,但是如果你希望腳本在給出無效值時停止,你應該可以做這樣的事情(未經測試):
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.