Принимать только ограниченные символы, используя принять в оракул - PullRequest
5 голосов
/ 21 октября 2010

Мне нужно принять только Y / N для переменной is_master, описанной ниже.

Например, если я использую приведенный ниже оператор в сценарии SQL, пользователь может ввести любой символ.запретить пользователю вводить только y Y n или N

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

Ответы [ 4 ]

4 голосов
/ 21 октября 2010

Вдохновленный более ранним ответом от Тони Эндрюса, если у вас есть внешний скрипт 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 голос
/ 21 октября 2010

Мне нравится опция цикла, которую Алекс дал, но если вы хотите, чтобы скрипт останавливался, если задано недопустимое значение, вы должны иметь возможность сделать что-то вроде этого (не проверено):

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 голос
/ 21 октября 2010

Делая что-то подобное, вы можете проверить значения и, возможно, подсказать пользователю правильность / недействительность ввода.

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;

Однако я должен признать, что использование этой проверки для выполнения дальнейшей логикиусловно это то, что я тоже нахожу в тупике.

Однако мои знания сценариев очень ограничены.

Возможно, это может вызвать отклик у кого-то, кто лучше знает переменные и как получить приведенный ниже результат в переменной, а затем использовать его для дальнейшей обработки.

1 голос
/ 21 октября 2010

Вы можете использовать ключевое слово format после accept, чтобы определить формат, которому должен следовать пользователь, поскольку он определен здесь .Однако я не вижу Y / N-подобный формат среди моделей формата .С A1 формат вы ограничиваете ввод только 1 символом.

Согласно this вы можете что-то сделать с форматами ключевого слова изменения, но у меня нет опытаэто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...