写一个简单的触发器

时间:2013-11-08 16:33:25

标签: sql triggers

这是自学而不是作业,所以不要急于点击-1按钮。

我正在尝试学习作为PL-SQL一部分的不同类型的触发器。我理解语法和逻辑以及它们的工作原理。但是,我很难实现它们。

我有一个非常简单的员工表,只有三列,即id,name和salary。该表填充了数据。这个想法是,如果你更新员工的工资,你只能增加它而不是减少它。

我设法做到这一点:

create or replace trigger check_salary
before update of sal
on emp_info
for each row
begin
    // something , something
end;
/  

但触发器的主体对我来说是一个谜。有人请向我解释如何做到这一点?

逻辑上,您将首先检查已输入的值。然后将其与现有值进行比较。仅当传递的值大于工资的当前值时才应更新该行。否则,它不应该。

我的研究来源:http://plsql-tutorial.com/plsql-triggers.htm

2 个答案:

答案 0 :(得分:1)

你有3个可能性:

  1. 检查新值,如果值低于raise_application_exception(-20001, 'Salaray can not be lower than existing value.'),则不允许更新记录。
  2. 如果值较低,则将现有值分配给新值::new.salary := :old.salary(不好主意,因为可能很难理解为什么在没有查看触发器的情况下没有更新值)。
  3. 您可以根据表创建VIEW并在该视图上创建INSTEAD OF触发器,您可以在其中检查是否应更新基表。

答案 1 :(得分:1)

基本上,您要检查新工资是否大于旧工资。如果是 - 您什么都不做,这是根据您指定的规则进行的有效更新。如果不是,则应raise出现错误,表明这是无效更新。

create or replace trigger check_salary
before update of sal
on emp_info
for each row
begin
   if :new.sal < :old.sal then
        raise_application_exception(-20001, 'sal cannot be decreased!');
   end if;
end;
/