这是自学而不是作业,所以不要急于点击-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;
/
但触发器的主体对我来说是一个谜。有人请向我解释如何做到这一点?
逻辑上,您将首先检查已输入的值。然后将其与现有值进行比较。仅当传递的值大于工资的当前值时才应更新该行。否则,它不应该。
答案 0 :(得分:1)
你有3个可能性:
raise_application_exception(-20001, 'Salaray can not be lower than existing value.')
,则不允许更新记录。:new.salary := :old.salary
(不好主意,因为可能很难理解为什么在没有查看触发器的情况下没有更新值)。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;
/