我只需要接受下面的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