中易网

oracle触发器问题?

答案:3  悬赏:30  
解决时间 2021-02-17 17:12
对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;
将出错。

可以尝试修改为, 抛出异常的方式,拒绝当前行的插入操作。
全部回答

尝试将每一个新的行记录定义呢:

create or replace trigger tri_test1

  before insert on test1  referencing new as new old as old   for each row

declare   ......

begin

......

end

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
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
星露谷物语谷仓怎么建 星露谷物语谷仓有什么
湖南电视剧频道少林少林的插曲是什么歌
今天清理了下手机 结果清理过后手机qq就显示
营和街43号院这个地址在什么地方,我要处理点
大从途观踩刹车时出现空隆空隆的声音
东丽张贵庄宽带在哪缴费
Let is help Linda to learn Chinese 同义句
一新橱柜怎么去啊,有知道地址的么
小溪塔哪家汽车保养好
matteo gili是什么品牌
最早古城香烟多少钱一包
中国建筑六局分公司都在那
南桥大型社区张弄富苑房产证什么时候能办
禾花冲我想知道这个在什么地方
you wife is you would是什么意思?翻译成中
推荐资讯
好日子水果店怎么去啊,有知道地址的么
我有产品 想找有QS的食品工厂代加工 我需要注
t10套装掉落副本
英国签证通过了可以直接去法国么
vivox7用什么root软件
我想问一下一汽佳宝v77这个车怎么样?我想买
汉朝淮南王是什么地方?
天津北辰郊野公园允许烧烤么?
从刘家窑到丰台国税局怎么走
电子管收音机加装调频怎么做
标题:我安全我健康我快乐.的二年级板报怎么写
福建宝岛眼镜(连锁)公司石狮市第一经营部(全
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?