SQL:检查约束/顺序时出现问题
所以我创建了一个名为“exam”的表,其中有三列“Name”、“Rollno”和“Result p/F”。我希望它执行以下操作: 输入名称时(通过“&name”语法),它会自动为第一个名称分配卷号(Rollno)1501,然后询问结果,对于结果,您只能分别输入“p”或“F”表示通过或失败。当您输入下一个名称时,它将Rollno增加到1502。。等等 关于Rollno部分,我有一个序列叫做EXAMSQN。它看起来像: 关于“结果p/F”部分,我有一个检查约束。这就是我向表中插入值的方式:SQL:检查约束/顺序时出现问题,sql,oracle,sequence,check-constraints,Sql,Oracle,Sequence,Check Constraints,所以我创建了一个名为“exam”的表,其中有三列“Name”、“Rollno”和“Result p/F”。我希望它执行以下操作: 输入名称时(通过“&name”语法),它会自动为第一个名称分配卷号(Rollno)1501,然后询问结果,对于结果,您只能分别输入“p”或“F”表示通过或失败。当您输入下一个名称时,它将Rollno增加到1502。。等等 关于Rollno部分,我有一个序列叫做EXAMSQN。它看起来像: 关于“结果p/F”部分,我有一个检查约束。这就是我向表中插入值的方式: ins
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
非常感谢你的帮助
谢谢:)输出清楚地显示了替换值:
new 2: values ('nikh', examsqn.nextval, 'P P/F')
显然'p p/F'!='“P”和“P P/F”!='F'
。因此,检查约束抛出
这是因为变量名中有空格。我建议您使用下划线:&Result\u PF
。或者直接称之为result
如果要告诉用户有效值是什么,需要使用SQL*Plus提示符:
accept result_pf prompt "Please enter a value for Result (P/F): "
要使其正常工作,只需从“结果p/F”中删除“p/F” 您可以从旧的、新的输出中看到,它试图插入“p/F”,这就是约束失败的原因 此外,最好不要将列命名为“结果p/F”,而是使用别名
干杯我把专栏的名字改成了Result,它成功了!Thnx用于调查:)