这两个触发器是在sql server中创建了,但是在oracle 11g 不能创建,要么出现编译错误,求大神帮忙修改,

(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

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;

追问

那个帖子?发个链接呗?

温馨提示:答案为网友推荐,仅供参考