因此,我们这里拥有的是智能密钥,而智能密钥却是愚蠢的(因为它们难以验证,并且在使用程序的一部分上总是需要额外的代码)。COURSEID
ISYS224分为三个部分:
ISYS
=主题2
=课程水平24
=班级编号(例如)
如果您的数据模型是正确的(显然不是您的老师的错,那是您的老师的错),解决方案将很简单,因为查询将很明显。
实际上,您需要自己将COURSEID分解成其组成部分。我们假设SUBJECT总是四个字符,因为其他任何事情都会使人感到悲伤。然后查询是:
select c.courseidfrom course c where substr(c.courseid, 1, 4) = substr(p_prerequisite_id, 1, 4)and substr(c.courseid, 5, 1) < substr(p_prerequisite_id, 5, 1);
如果先决条件不符合规则,则将抛出NO_DATA_FOUND。使用异常部分可以很好地处理此问题。
或者,您可以选择必备课程记录到局部变量中,然后在PL / SQL代码中进行切入。
select c.courseid into l_prerequisite_coursefrom course c where c.courseid = p_prerequisite_id;if substr(l_prerequisite_course, 1, 4) = substr(p_prerequisite_id, 1, 4)or substr(l_prerequisite_course, 5, 1) < substr(p_prerequisite_id, 5, 1)then raise ...;



