触发器创建时遇到问题请各位帮忙看看那错了,怎么改(本人纯菜鸟) 10
题目要求:创建触发器:createtablestd(deptnonumber(2),salnumber(5));insertintostdvalues(20,2000);...
题目要求:
创建触发器:
create table std(deptno number(2),sal number(5));
insert into std values(20,2000);
假设std表中的信息,是部门号与该部门的平均工资。
现在要创建触发器,当在emp插入信息时,把工资低于所属部门的平均工资的职员信息插入到emp1表中。(emp1和scott.emp结构和数据完全一致)
附加要求:
(1)不受update和delete影响(所以必须不断更新std,最好的方法是对于每一条插入数据前都更新一次std)
(2)必须用到行级触发器
(3)把插入数据满足条件的插入到emp1
(4)不需要考虑多行插入问题
(5)插入数据所在部门还无职员,直接插入
我的程序:
Create or replace trigger insert2
after INSERT ON emp
FOR EACH ROW
begin
UPDATE std
SET sal = (select avg(sal) from emp where :new.DEPTNO=deptno)
where std.deptno=:new.DEPTNO;
IF (:new.DEPTNO!=std.deptno) THEN
INSERT INTO emp1 VALUES((:new.EMPNO,:new.ENAME,:new.JOB,:new.MGR,:new.HIREDATE,:new.SAL,:new.COMM,:new.DEPTNO);
);
END IF
IF (:new.DEPTNO==std.deptno) AND (:new.SAL<std.sal) THEN
INSERT INTO emp1 VALUES((:new.EMPNO,:new.ENAME,:new.JOB,:new.MGR,:new.HIREDATE,:new.SAL,:new.COMM,:new.DEPTNO);
);
END IF
End;
/
oracle的触发器
修改成这样行么
Create or replace trigger insert2
after INSERT ON emp
FOR EACH ROW
begin
select dptno from std where deptno=new.DEPTNO
IF (dptno) THEN
INSERT INTO emp1 VALUES((:new.EMPNO,:new.ENAME,:new.JOB,:new.MGR,:new.HIREDATE,:new.SAL,:new.COMM,:new.DEPTNO);
);
ELSE
select avg(sal) from emp where deptno=new.DEPTNO;
UPDATE std
SET sal = (avg(sal))
where std.deptno=:new.DEPTNO;
INSERT INTO emp1 VALUES((:new.EMPNO,:new.ENAME,:new.JOB,:new.MGR,:new.HIREDATE,:new.SAL,:new.COMM,:new.DEPTNO);
);
END IF
End;
/ 展开
创建触发器:
create table std(deptno number(2),sal number(5));
insert into std values(20,2000);
假设std表中的信息,是部门号与该部门的平均工资。
现在要创建触发器,当在emp插入信息时,把工资低于所属部门的平均工资的职员信息插入到emp1表中。(emp1和scott.emp结构和数据完全一致)
附加要求:
(1)不受update和delete影响(所以必须不断更新std,最好的方法是对于每一条插入数据前都更新一次std)
(2)必须用到行级触发器
(3)把插入数据满足条件的插入到emp1
(4)不需要考虑多行插入问题
(5)插入数据所在部门还无职员,直接插入
我的程序:
Create or replace trigger insert2
after INSERT ON emp
FOR EACH ROW
begin
UPDATE std
SET sal = (select avg(sal) from emp where :new.DEPTNO=deptno)
where std.deptno=:new.DEPTNO;
IF (:new.DEPTNO!=std.deptno) THEN
INSERT INTO emp1 VALUES((:new.EMPNO,:new.ENAME,:new.JOB,:new.MGR,:new.HIREDATE,:new.SAL,:new.COMM,:new.DEPTNO);
);
END IF
IF (:new.DEPTNO==std.deptno) AND (:new.SAL<std.sal) THEN
INSERT INTO emp1 VALUES((:new.EMPNO,:new.ENAME,:new.JOB,:new.MGR,:new.HIREDATE,:new.SAL,:new.COMM,:new.DEPTNO);
);
END IF
End;
/
oracle的触发器
修改成这样行么
Create or replace trigger insert2
after INSERT ON emp
FOR EACH ROW
begin
select dptno from std where deptno=new.DEPTNO
IF (dptno) THEN
INSERT INTO emp1 VALUES((:new.EMPNO,:new.ENAME,:new.JOB,:new.MGR,:new.HIREDATE,:new.SAL,:new.COMM,:new.DEPTNO);
);
ELSE
select avg(sal) from emp where deptno=new.DEPTNO;
UPDATE std
SET sal = (avg(sal))
where std.deptno=:new.DEPTNO;
INSERT INTO emp1 VALUES((:new.EMPNO,:new.ENAME,:new.JOB,:new.MGR,:new.HIREDATE,:new.SAL,:new.COMM,:new.DEPTNO);
);
END IF
End;
/ 展开
1个回答
展开全部
create trigger tr_1
on 还书表
for insert
as
update 还书表 set 逾时罚款=
(day(还书时间)-day(应还时间))*0.1
from 还书表,借书表,inserte
where 还书表.书号=inserte.书号 and 还书表.学号 =inserted.学号
and 借书表.书号=inserte.书号 and 借书表.学号 =inserted.学号
---------------------------------------------------------------------------
create trigger [还书表tr]
on [dbo].[还书表]
for insert
as
declare @应还时间 datetime
select @应还时间=应还时间 from 借书表,inserted where 借书表.书号=inserte.书号 and 借书表.学号 =inserted.学号
update 还书表 set 罚款=(day(还书时间)-day(@应还时间))*0.1
from 还书表,inserte
where 还书表.书号=inserte.书号 and 还书表.学号 =inserted.学号
汉坤(北京)流体控制技术有限公司
2023-06-12 广告
2023-06-12 广告
根据大数据评选,2022年电动执行器十大品牌名单有:1. 秀辉。2. 丹冠。3. 方威。4. 天津宝恒。5. 常辅股份。6. 新峰。7. 德博科技。8. 摩控。9. 科威纳。10. deyo。以上十大品牌是电动执行器行业的知名品牌,排名不分...
点击进入详情页
本回答由汉坤(北京)流体控制技术有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询