PL / SQL如何比较触发器中的表达式?

时间:2017-12-06 09:08:25

标签: sql plsql triggers oracle10g

每当学生的新GPA低于旧GPA 1或更多时,我就会尝试输出一条消息。

Create or Replace TRIGGER AUGPA
  after update on students
  for each row -- or should I put 'for GPA' the column name
begin
  if (:new.gpa - :old.gpa) >= 1 -- How do I compare these expressions? I get an error here. 
    THEN
      dbms_output.put_line ('Old GPA is lower than previous GPA by at least 1 point.')
  End if;
End;
/

学生表

SNUM  SNAME  STANDING  MAJOR  GPA  MAJORGPA
****  *****  ********  *****  ***  ********
121   Liz      2       FIN   2.8     3.2

3 个答案:

答案 0 :(得分:0)

您可以尝试以下更改:

1)你可以使用

更新学生GPA后

2)你可以比较

IF :new.gpa < :old.gpa  THEN
      dbms_output.put_line ('Old GPA is lower than previous GPA by at least 1 
       point.')
    END IF;

答案 1 :(得分:0)

按照以下步骤和此代码获得所需的结果。

Create or Replace TRIGGER AUGPA
  after update on students
  for each row 
begin
  if :new.gpa - :old.gpa  >= 1 
    THEN
      dbms_output.put_line ('Old GPA is lower than current GPA by at least 1 point.');
  End if;
End;
/

set serveroutput on;
update Students set gpa  = gpa + 1 ;
commit;

答案 2 :(得分:0)

您的操作是倒退的。 让我们使用以下new.gpa = 1.5,old.gpa = 3.所以gpa已经下降了1.5,所以应该发出消息。将不会发出消息:代码为&#34;如果new.gpa - old.gpa&gt; = 1则消息...&#34;但是1.5 - 3 = -1.5不是&gt; - 1.更改为&#34;如果old.gpa - new.gpa&gt; = 1&#34;。

@Anand建议不好,因为如果gpa从3下降到2.9,它会产生消息;只是一个.1下降