这是在sql server中创建的触发器,但是在oracle 11g 中却不能创建,求大神帮忙修改!
(1)建立学生添加院系触发器tri_adddept,当该表中已存在所对应院系号码的院系时,系统给与错误提示并回滚,其关键代码如下所示:CREATETRIGGERtri_a...
(1)建立学生添加院系触发器tri_adddept,当该表中已存在所对应院系号码的院系时,系统给与错误提示并回滚,其关键代码如下所示:
CREATE TRIGGER tri_adddept ON tb_dept
FOR INSERT,UPDATE
AS
IF
(SELECT COUNT(*) FROM tb_dept,inserted
WHERE tb_dept.DeptNum=inserted.DeptNum)>0
BEGIN
PRINT '院系号码产生冲突,请核对后重试!'
ROLLBACK
END
(2)建立学生添加专业触发器tb_major,当专业信息中的院系号不对或者该表中已存在所对应专业号码的专业时,系统给与错误提示并回滚,其关键代码如下所示:
CREATE TRIGGER tri_addmajor ON tb_major
FOR INSERT,UPDATE
AS
IF(SELECT COUNT(*) FROM tb_dept,inserted
WHERE tb_dept.DeptNum=inserted.DeptNum)=0
BEGIN
PRINT '未找到该专业的院系信息,请添加相应院系后重试!'
ROLLBACK
END
ELSE IF
(SELECT COUNT(*) FROM tb_major,inserted
WHERE tb_major.MajorNum=inserted.MajorNum)>0
BEGIN
PRINT '院系号码产生冲突,请核对后重试!'
ROLLBACK
END 展开
CREATE TRIGGER tri_adddept ON tb_dept
FOR INSERT,UPDATE
AS
IF
(SELECT COUNT(*) FROM tb_dept,inserted
WHERE tb_dept.DeptNum=inserted.DeptNum)>0
BEGIN
PRINT '院系号码产生冲突,请核对后重试!'
ROLLBACK
END
(2)建立学生添加专业触发器tb_major,当专业信息中的院系号不对或者该表中已存在所对应专业号码的专业时,系统给与错误提示并回滚,其关键代码如下所示:
CREATE TRIGGER tri_addmajor ON tb_major
FOR INSERT,UPDATE
AS
IF(SELECT COUNT(*) FROM tb_dept,inserted
WHERE tb_dept.DeptNum=inserted.DeptNum)=0
BEGIN
PRINT '未找到该专业的院系信息,请添加相应院系后重试!'
ROLLBACK
END
ELSE IF
(SELECT COUNT(*) FROM tb_major,inserted
WHERE tb_major.MajorNum=inserted.MajorNum)>0
BEGIN
PRINT '院系号码产生冲突,请核对后重试!'
ROLLBACK
END 展开
1个回答
展开全部
给你写一个,另一个你对着改吧
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;
更多追问追答
追问
DECLARE
cnt number;
这个声明是什么意思啊?有点看不懂?
追答
declare 这个是申明变量段的开头。
cnt number; 定义一个变量,用于记录 select count(*) 的数据行数。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询