当前位置:数据库 > Oracle >>

oracle触发器问题?

对Class表创建一个新增后触发器,当GradeID在Grade表中不存在时,删除此行数据 create or replace trigger tr_class_update after insert on class for each row begin if :old.gradeid not in (select grade.gradeid from grade) then delete from class where gradeid=:old.gradeid; end if; end; 这是我自己写的,有错误,要怎么改啊,我刚学不会,知道的帮下
追问:抛出异常,拒绝当前行的插入操作,怎么写啊
答案:if  :old.gradeid not in (select grade.gradeid from grade)

这个意思上看得懂
但是语法上不知道有没有问题

建议定义个变量 int 类型的
DECLARE  v_rowCount  INT;
-- 然后查询
SELECT COUNT(*) INTO v_rowCount   
  FROM grade
  WHERE  grade.gradeid != :old.gradeid
-- 然后判断
IF v_rowCount    =  0 ...

还有另外一个问题。
after insert on class
for each row  
的触发器, 不能在触发器里面。
查询/更新/删除 自己这张表。

因此
delete from  class where gradeid=:old.gradeid;
将出错。

可以尝试修改为, 抛出异常的方式,拒绝当前行的插入操作。
其他:你已经:old.gradeid not in (select grade.gradeid from grade)
都not in了。你去Delete,怎么会有此行数据呢?把not in改成in吧。 if  :old.gradeid not in (select grade.gradeid from grade)
改为
DECLARE x number;
select COUNT(grade.gradeid) into x from grade grade =:old.gradeid;
 if  x=0

上一个:我的数据库现在使用正常,环境为win2003和oracle 10g,5月份的时候进行备份还能够顺利进行,现在报错。
下一个:oracle中表A有字段id,name,age,表B有字段id,subject,score,id为学生学号,subject为科目,score分数

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,