所以我创建了一个名为“考试”的表,其中有三列“名称”,“Rollno”和“结果P / F”。我希望它能够做到以下几点:
当输入名称时(通过'& name'语法),它会自动为第一个名称指定卷号(Rollno)1501然后要求您输入结果,您只能输入“P”或“F”,分别为合格或不合格。当您输入下一个名称时,它会将Rollno增加到1502 ..依此类推。
关于Rollno部分,我有一个名为EXAMSQN的序列。看起来像:
关于“结果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 :(得分: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): "
答案 1 :(得分:1)
要让它发挥作用,您只需从'&结果P / F'中删除'P / F'
你可以从它试图插入'P P / F'的旧的新输出中看到这个,这就是你的约束失败的原因。
另外,最好不要将您的专栏“结果P / F”调用,而是使用别名。
干杯