2017-12-06 4 views
0

Ich versuche, jedes Mal eine Nachricht auszugeben, wenn der neue GPA eines Schülers um 1 oder mehr niedriger als sein alter GPA ist.PL/SQL Wie vergleicht man einen Ausdruck in einem Trigger?

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; 
/

Students Tabelle

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

Können Sie Einzelheiten über Ihre Schüler Tabelle geben? – Anand

+0

Mit einigen weiteren Details bearbeitet! – Lizzie

+0

Es ist wirklich nicht klar, welche Frage Sie stellen. Anders als das fehlende Semikolon nach dem Aufruf von 'dbms_output' funktioniert Ihr Programm. Die Logik ist etwas verwirrt, Sie müssen die Bedingung so anpassen, dass sie der Regel entspricht, die Sie erzwingen möchten. – APC

Antwort

0

Sie folgende Änderungen ausprobieren können:

1) Sie

NACH AKTUALISIERUNG GPA AUF Studenten

2) verwenden, können Sie vergleichen können wie

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

Befolgen Sie die nachstehenden Schritte und diesen Code, um die gewünschten Ergebnisse zu erzielen.

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; 
+0

Frage: Wenn ich Liz's GPA durch Ändern auf 2.0 aktualisiere, sollte es keine Nachricht ausgeben. Gibt es eine Möglichkeit, das im Trigger zu tun? Nur GPAs, die kleiner als 1 oder mehr sind, haben eine Nachricht. – Lizzie

+0

Sie meinen etwas wie 'if: new.gpa>: old.gpa und: new.gpa! = 2.0'? –

+0

Also, wenn Liz'a GPA 2.0 ändert, sollte es keine Ausgabe geben. Seit 2,8 - 2,0 = 0,8. Und 0.8 ist kleiner als 1. Wenn ich einen anderen Benutzer hinzufügte, dessen GPA 3.0 war und ihr neuer GPA 2.0 war, dann sollte es eine Ausgabe geben, weil sie um 1 abnimmt. Danke! – Lizzie

0

Ihre Operation ist rückwärts. Lässt man das folgende new.gpa = 1.5, old.gpa = 3 verwenden. Also ist das gpa um 1.5 gefallen, also sollte die Nachricht ausgegeben werden. Die Nachricht wird nicht ausgegeben: Der Code lautet "If new.gpa - old.gpa> = 1, dann Nachricht ..." Jedoch 1.5 - 3 = -1.5 was nicht> - 1. Wechseln Sie zu "If old.gpa - neu.gpa> = 1 ".

@Anand schlägt vor, ist nicht gut, da es die Nachricht erzeugen würde, wenn das gpa auf 2,9 von 3 fiel; nur ein .1 Tropfen

Verwandte Themen