2013-04-18 4 views
2

Итак, я создал таблицу под названием «exam» с тремя столбцами «Name», «Rollno» и «Result P/F». Я хочу, чтобы он сделал следующее:SQL: Trouble in Check Constraint/Sequence

Когда имя вводится (через синтаксис '& name'), оно автоматически назначает первое имя с номером рулона (Rollno) 1501 И затем запрашивает у вас результат, для которого вы можете вводить только «P» или «F», для прохода или отказа, соответственно. Когда вы вводите следующее имя, он увеличивает Rollno до 1502 .. и так далее.

О части Ролно, у меня есть последовательность под названием EXAMSQN. Похоже, что: The first one

О части «Результат P/F», у меня есть контрольное ограничение. И это, как я вставить значения в таблицу:

insert into exam (name, rollno, "Result P/F") 
values ('&name', examsqn.nextval, '&Result P/F') 

И, кстати, это как мой проверочное ограничение идет:

1 alter table exam 
2* add constraint exam_result_ck check ("Result P/F" in ('P','F')) 

Так что я ожидаю от этого он займет только P или и F, когда он запрашивает результат

Меня спрашивают имя и результат, но сразу после этого я получаю сообщение об ошибке. Вот как это делается в целом:

Enter value for name: nikh 
Enter value for result: P 
old 2: values ('&name', examsqn.nextval, '&Result P/F') 
new 2: values ('nikh', examsqn.nextval, 'P P/F') 
insert into exam (name, rollno, "Result P/F") 
* 
ERROR at line 1: 
ORA-02290: check constraint (SCOTT.EXAM_RESULT_CK) violated 

Ваша помощь очень признательна.

Спасибо :)

+0

Его для Oracle. –

ответ

1

Чтобы заставить его работать все, что вам нужно сделать, это удалить «P/F 'from' & Результат P/F '

Вы можете видеть это со старого, нового выхода, который пытается вставить «PP/F», поэтому ваше ограничение терпит неудачу.

Также вам будет лучше не называть вашу колонку «Результат P/F», а использовать псевдоним.

Cheers

+0

работал как шарм :) Thnx a ton :) –

1

Выход ясно показывает замещенное значение:

new 2: values ('nikh', examsqn.nextval, 'P P/F') 

Очевидно 'P P/F' != 'P' and 'P P/F' != 'F'. Таким образом, ограничение проверки швырнувается.

Это происходит из-за пространства в имени переменной. Я предлагаю вам вместо этого использовать подчеркивание: &Result_PF. Или просто назовите его result.

Если вы хотите, чтобы сказать пользователям, что действительные значения вы должны использовать SQL * Plus запросит:

accept result_pf prompt "Please enter a value for Result (P/F): " 
+0

Я изменил имя столбца на результат, и это сработало! Thnx для изучения :) –