create or replace trigger tg_java5_backup after --执行sql之后执行--before是事前触发器,after是事后触发器 insert or update or delete --增、删、改都触发 on java5 for each row--行级触发器 declare begin if inserting then insert into java5_back(id,name,gz)values(:new.id,:new.name,:new.gz); elsif updating then update java5_back set id=:new.id,name=:new.name,gz=:new.gz; elsif deleting then delete from java5_back where id=old.id; end if; exception when others then raise_application_error(-20003, '备份失败'); end;
时间: 2024-04-10 12:27:09 浏览: 132
这是一个用于在执行SQL操作后触发的触发器。它可以在插入、更新或删除数据时备份相关数据到另一个表中。具体的代码如下:
```sql
create or replace trigger tg_java5_backup
after insert or update or delete on java5
for each row
declare
begin
if inserting then
insert into java5_back(id, name, gz) values (:new.id, :new.name, :new.gz);
elsif updating then
update java5_back set id = :new.id, name = :new.name, gz = :new.gz;
elsif deleting then
delete from java5_back where id = :old.id;
end if;
exception
when others then
raise_application_error(-20003, '备份失败');
end;
```
这个触发器会在java5表的每一行数据被插入、更新或删除后执行相应的备份操作。如果备份过程中出现异常,会抛出一个应用错误。
相关问题
-- 這是一個觸發器的基本結構 CREATE OR REPLACE TRIGGER XU_YANG.avg_sal AFTER INSERT OR UPDATE OF sal ON YX_EMP -- AFTER 表示執行時間,只有在 INSERT OR UPDATE 才會觸發這個 FOR EACH ROW -- 表示該觸發器會對每一行進行處理 BEGIN -- 计算薪资 DECLARE v_comm NUMBER(7,2); v_dsal NUMBER(7,2); v_socialsecurity NUMBER(7,2); v_avgsal NUMBER(10,2); BEGIN -- 计算提成 IF :NEW.sal > 10000 THEN v_comm := :NEW.sal * 0.1; ELSE v_comm := 0; END IF; -- 计算扣款 v_dsal := :NEW.sal * 0.05; -- 计算社保 v_socialsecurity := :NEW.sal * 0.1; -- 计算总工资和平均工资 v_avgsal := :NEW.sal + v_comm - v_dsal - v_socialsecurity; -- 将计算结果写入SAL薪资表中 INSERT INTO YX_SAL(EMPNO, COMM, SAL, DSAL, SOCIALSECURITY, AVGSAL) VALUES(:NEW.empno, v_comm, :NEW.sal, v_dsal, v_socialsecurity, v_avgsal); END; END;
这是一个 Oracle 数据库中的触发器,触发器的名称是 XU_YANG.avg_sal,它是在 YX_EMP 表上进行 INSERT 或 UPDATE 操作后执行的。对于每一行数据的变化,都会执行 BEGIN 和 END 之间的语句。在 BEGIN 和 END 之间的语句中,首先声明了一些变量,接着通过一些计算得到了员工的总工资和平均工资,最后将这些计算结果写入了 SAL 薪资表中。该触发器的作用是对员工薪资进行计算,并将计算结果写入 SAL 表中。
create trigger trigger_insert_score on score after insert as Begin if not exists( select * from student where sno in( select sno from inserted ) ) Begin rollback transaction Begin transaction End End逐行解释
这是一个 SQL Server 数据库的触发器定义,具体解释如下:
1. 第一行定义了一个名为 trigger_insert_score 的触发器,它在 score 表插入数据之后被触发执行。
2. 触发器的主体部分使用 Begin 和 End 语句包围起来,其中包含了触发器的具体操作。
3. 在触发器的主体部分中,使用 if not exists 语句判断插入的数据是否符合要求。具体地,它查询 inserted 表,根据其中的学生学号 sno 判断对应的学生记录是否存在于 student 表中。如果不存在,则说明插入的数据不合法。
4. 如果插入的数据不合法,则使用 rollback transaction 语句回滚事务,撤销当前的插入操作。
5. 如果插入的数据合法,则触发器执行完毕,不做任何操作。
总的来说,这段代码定义了一个触发器,用于在 score 表插入数据之后,检查插入的数据是否合法。如果不合法,则撤销当前的插入操作,否则不做任何操作。这种触发器可以用于保证数据的一致性和完整性。
阅读全文