Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:检查约束/顺序时出现问题_Sql_Oracle_Sequence_Check Constraints - Fatal编程技术网

SQL:检查约束/顺序时出现问题

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

所以我创建了一个名为“exam”的表,其中有三列“Name”、“Rollno”和“Result 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
非常感谢你的帮助


谢谢:)

输出清楚地显示了替换值:

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用于调查:)