2010-10-21 26 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

相关问题