簡體   English   中英

在oracle中僅使用accept接受受限制的字符

[英]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

您可以使用format關鍵字后accept來確定用戶需要遵循,因為它被定義的格式在這里 但是我沒有在格式模型中看到類似Y / N的格式 使用A1 格式,您可以將輸入限制為僅1個字符。

根據這個你可以用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;

但是,我必須承認,使用此檢查有條件地執行進一步的邏輯是我發現自己也被困住的事情。

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

也許看到這可能會與那些對變量有更多了解以及如何將結果得到下面的變量然后用於進一步處理的人產生共鳴。

我喜歡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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM