oracle触发器的问题:我写了一段代码,触发器创建成功了,但是测试时却显示触发器无效且未通过重新验证。
这段是建立std表的语句:createtablestd(deptnonumber(2),salnumber(5));insertintostdvalues(20,2000...
这段是建立std表的语句:create table std(deptno number(2),salnumber(5));
insert into std values(20,2000);
问题:假设std表中的信息,是部门号与该部门的平均工资。
现在要创建触发器,当在emp插入信息时,把工资低于所属部门的平均工资的职员信息插入到emp1表中。
附加:
(1)不需要考虑多行插入问题
(2)要更新std表的平均工资
我的代码:
create or replace trigger test
before insert on scott.emp
for each row
declare
--PRAGMA AUTONOMOUS_TRANSACTION;
tempsal number(5);
begin
select sal into tempsal from std where std.deptno=:new.deptno;
dbms_output.put_line('插入前std的值');
dbms_output.put_line(tempsal);
if :new.sal<tempsal then
insert into emp1 values
(:new.EMPNO,:new.ENAME,:new.JOB,:new.MGR,:new.HIREDATE,:new.SAL,:new.COMM,:new.DEPTNO);
end if;
--commit;
end test;
求大神指教!我纠结好久了!不好意思,只剩这些分了。 展开
insert into std values(20,2000);
问题:假设std表中的信息,是部门号与该部门的平均工资。
现在要创建触发器,当在emp插入信息时,把工资低于所属部门的平均工资的职员信息插入到emp1表中。
附加:
(1)不需要考虑多行插入问题
(2)要更新std表的平均工资
我的代码:
create or replace trigger test
before insert on scott.emp
for each row
declare
--PRAGMA AUTONOMOUS_TRANSACTION;
tempsal number(5);
begin
select sal into tempsal from std where std.deptno=:new.deptno;
dbms_output.put_line('插入前std的值');
dbms_output.put_line(tempsal);
if :new.sal<tempsal then
insert into emp1 values
(:new.EMPNO,:new.ENAME,:new.JOB,:new.MGR,:new.HIREDATE,:new.SAL,:new.COMM,:new.DEPTNO);
end if;
--commit;
end test;
求大神指教!我纠结好久了!不好意思,只剩这些分了。 展开
展开全部
1
触发器中不需要commit,因为触发器里都是隐性提交的
2
把你的稍加改动,没做什么太大变化,你的没什么太多的为难题,只是那两个dbms_output.put_line也没什么用啊
代码给你贴出来吧
create or replace trigger test
before insert on scott.emp
for each row
declare
tempsal number(5);
begin
select sal into tempsal from std where std.deptno=:new.deptno;
dbms_output.put_line('插入前std的值');
dbms_output.put_line(tempsal);
if :new.sal<tempsal then
insert into emp1 values(:new.EMPNO,:new.ENAME,:new.JOB,:new.MGR,:new.HIREDATE,:new.SAL,:new.COMM,:new.DEPTNO);
end if;
end test;
还有问题继续追问吧
追问
多谢啦~可是测试的时候还是显示触发器错误TAT
SQL> insert into scott.emp values(7783,'PING','CLERK',7839,to_date('9-27-2006','MM-DD-YYYY'),900,NUL
L,20);
第 1 行出现错误:
ORA-04098: 触发器 'SYS.WORK_TRIGGER' 无效且未通过重新验证
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询