这两个触发器是在sql server中创建了,但是在oracle 11g 不能创建,要么出现编译错误,求大神帮忙修改, 20
(3)建立添加学生触发器tri_addstudent,当学生信息中的专业号不对或者系统中已存在所对应学号的学生时,系统给与错误提示并回滚,其关键代码如下所示:CREATE...
(3)建立添加学生触发器tri_addstudent,当学生信息中的专业号不对或者系统中已存在所对应学号的学生时,系统给与错误提示并回滚,其关键代码如下所示:
CREATE TRIGGER tri_addstudent ON tb_student
FOR INSERT,UPDATE
AS
IF(SELECT COUNT(*) FROM tb_major,inserted
WHERE tb_major.MajorNum=inserted.MajorNum)=0
BEGIN
PRINT '未找到该学生的专业信息,请添加相应专业后重试!'
ROLLBACK
END
ELSE IF
(SELECT COUNT(*) FROM tb_student,inserted
WHERE tb_student.StudentNum=inserted.StudentNum)>0
BEGIN
PRINT '学号产生冲突,请核对后重试!'
ROLLBACK
END
(4)建立学生选课触发器tri_takecourse,课程选课人数超过40个或者对应学生选课门数超过5门或者当前时间不是选课时间段时,系统给与错误提示并回滚,其关键代码如下所示:
CREATE TRIGGER tri_takecourse ON tb_stucourse
FOR INSERT,UPDATE
AS
IF(SELECT COUNT(*) FROM tb_stucourse,inserted
WHERE tb_stucourse.CourseNum=inserted.CourseNum)>40
BEGIN
PRINT '所对应课程选课人数不能超过40个!'
ROLLBACK
END
ELSE IF
(SELECT COUNT(*) FROM tb_student,inserted
WHERE tb_student.StudentNum=inserted.StudentNum)>5
BEGIN
PRINT '对应学生的选课不能超过5门!'
ROLLBACK
END
ELSE IF
(SELECT IfTakeCourse FROM tb_control)='0'
BEGIN
PRINT '当前不是选课时间段!'
ROLLBACK
END 展开
CREATE TRIGGER tri_addstudent ON tb_student
FOR INSERT,UPDATE
AS
IF(SELECT COUNT(*) FROM tb_major,inserted
WHERE tb_major.MajorNum=inserted.MajorNum)=0
BEGIN
PRINT '未找到该学生的专业信息,请添加相应专业后重试!'
ROLLBACK
END
ELSE IF
(SELECT COUNT(*) FROM tb_student,inserted
WHERE tb_student.StudentNum=inserted.StudentNum)>0
BEGIN
PRINT '学号产生冲突,请核对后重试!'
ROLLBACK
END
(4)建立学生选课触发器tri_takecourse,课程选课人数超过40个或者对应学生选课门数超过5门或者当前时间不是选课时间段时,系统给与错误提示并回滚,其关键代码如下所示:
CREATE TRIGGER tri_takecourse ON tb_stucourse
FOR INSERT,UPDATE
AS
IF(SELECT COUNT(*) FROM tb_stucourse,inserted
WHERE tb_stucourse.CourseNum=inserted.CourseNum)>40
BEGIN
PRINT '所对应课程选课人数不能超过40个!'
ROLLBACK
END
ELSE IF
(SELECT COUNT(*) FROM tb_student,inserted
WHERE tb_student.StudentNum=inserted.StudentNum)>5
BEGIN
PRINT '对应学生的选课不能超过5门!'
ROLLBACK
END
ELSE IF
(SELECT IfTakeCourse FROM tb_control)='0'
BEGIN
PRINT '当前不是选课时间段!'
ROLLBACK
END 展开
1个回答
展开全部
oracle 的语法和 sqlserver 语法不一样的,你需要对照oracle进行修改。
给你另一个帖子中的例子,你自己对着改就行了:
CREATE OR REPLACE TRIGGER tri_adddept
before insert or update on tb_dept
for each row
DECLARE cnt number;
BEGIN
SELECT COUNT(*) into cnt FROM tb_dept
WHERE tb_dept.DeptNum=:new.DeptNum
if cnt > 0 then
RAISE_APPLICATION_ERROR(-20001, '院系号码产生冲突,请核对后重试!');
end if;
END;
追问
那个帖子?发个链接呗?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询