这两个触发器是在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
展开
 我来答
micro0369
2014-05-27 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4052万
展开全部

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;
追问
那个帖子?发个链接呗?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式