1

这是自学而不是家庭作业,所以不要急于按下 -1 按钮。

我正在尝试学习作为 PL-SQL 一部分的不同类型的触发器。我了解语法和逻辑以及它们是如何工作的。但是,我在实施它们时遇到了困难。

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

我设法做到了这一点:

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

4

2 回答 2

1

您有 3 种可能性:

  1. 检查新值,如果它低于raise_application_exception(-20001, 'Salaray can not be lower than existing value.')将不允许更新记录的值。
  2. 如果值较低,则将现有值分配给新值:(:new.salary := :old.salary坏主意,因为如果不查看触发器可能很难理解为什么不更新值)。
  3. 您可以VIEW基于表创建一个并INSTEAD OF在该视图上创建一个触发器,您将在其中检查基表是否应该更新。
于 2013-11-08T16:43:12.403 回答
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;
/ 
于 2013-11-08T16:45:05.530 回答