触发器:对指定表中的某一列数据进行修改触发

create or replace trigger tr_xzcz
before update  or delete on STU
for each row 
begin 
        dbms_output.put_line('执行。。。。');
        IF :OLD.SDEPT = '12计算机' THEN
            IF UPDATING THEN
                IF :NEW.SAGE <> :OLD.SAGE then
                    dbms_output.put_line('本班级学生年龄不能修改');
                END IF;
            END IF;
            IF DELETING then
                dbms_output.put_line('数据被删除');
            END IF; 
        END IF;     
END;
DELETE FROM STU WHERE SNO = '120005';

本关需要切换用户、执行sql建脚本,然后进行触发器实验 我们一直是以SYS用户登录进去的,SYS是Oracle最高权限用户,由于安全性和完整性原因,Oracle不允许在SYS用户拥有的对象上创建触发器。这是为了防止对核心数据库对象造成破坏或不稳定的情况。 为了做触发器实验,我们需要切换一个用户登陆Oracle(先用sys登陆进去,给hr用户更改密码,给hr用户解锁,然后切换到hr用户,这样就可以用hr用户创建触发器了)操作如下: 触发器的创建 创建触发器的语句: CREATE OR REPLACE TRIGGER trigger_name {BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE} ON table_name [FOR EACH ROW] [WHEN (condition)] DECLARE -- 声明触发器中使用的变量 BEGIN -- 触发器的逻辑代码 END; / 语法解释: CREATE OR REPLACE TRIGGER:创建或替换一个触发器。 BEFORE | AFTER:指定触发器在插入、更新或删除操作之前(BEFORE)还是之后(AFTER)触发。 INSERT | UPDATE | DELETE:指定触发器在哪种操作上触发。 [ON table_name]:指定触发器所属的名。 [REFERENCING OLD AS old NEW AS new]:指定使用OLD和NEW伪记录引用旧和新。 [FOR EACH ROW]:指定为每一行执行触发器操作。 [WHEN (condition)]:指定触发器执行的条件。 DECLARE:声明局部变量和游标。 BEGIN:开始执行触发器操作。 END;:结束触发器代码块。 /:触发器定义结束。 删除触发器的语句: drop trigger 触发器名字; 触发器内的特殊触发器内可以使用两类特殊: old和new.它总是与触发器绑定的有相同的结构,且只能在触发器内访问。 delete触发器可以访问old,其内容为被delete掉的数据。 insert触发器可以访问new,其内容为insert的新数据。 update触发器可以访问old和new,old保存着修改前的数据,new保存着修改后的内容。 本关用 emp、sal_change,请自行查询这两个,熟悉数据。 编程要求(闯关任务) 任务: emp中,每当有员工被录入或更新其工资时,我们想在另一个 sal_changes中记录这一变化。 以下是两个的结构: emp : empno: 员工的唯一标识 ename: 员工的名字 sal: 员工工资 sal_changes : change_id: 唯一标识 empno: 员工的唯一标识 old_sal: 员工之前的工资 new_sal: 员工现在的工资 请你创建一个AFTER UPDATE触发器:当emp中的工资列被更新时,自动在sal_changes中记录更改。 你要做到: 1.sal_changesnew_sal列的数据变成sal_changesold_sal列的数据 2.emp插入数据的工资变成sal_changesnew_sal列的数据
最新发布
11-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值