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

时间:2010-10-21 06:28:12

标签: sql oracle

我只需接受下面的is_master变量声明的Y / N.

例如,如果我在SQL脚本中使用以下语句,则用户可以输入任何字符。

我想限制用户只输入y Y n或N

Accept is_master prompt ' Is the user a Master user (Y/N)  : '

4 个答案:

答案 0 :(得分:4)

受到Tony Andrews早期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

答案 1 :(得分:1)

您可以在format之后使用accept关键字来确定用户在定义here时需要遵循的格式。 但是我在format models中没有看到类似Y / N的格式。使用A1 format,您可以将输入限制为仅1个字符。

根据this,您可以使用更改关键字的格式执行某些操作,但我对此没有任何使用经验。

答案 2 :(得分: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;

但是,我必须承认,使用此检查有条件地执行进一步的逻辑是我发现自己也被困扰的事情。

但是,我对脚本的了解非常有限。

也许看到这可能会与对变量有更多了解的人以及如何将结果传递到变量中,然后将其用于进一步处理。

答案 3 :(得分:1)

我喜欢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