2017-12-06 18 views
0

학생의 새 평점이 기존 평점보다 1 점 이상 낮을 때마다 메시지를 출력하려고합니다.PL/SQL 트리거에서 표현식을 비교하는 방법은 무엇입니까?

2) 비교할 수는 학생 ON 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 
+0

학생 테이블에 관한 자세한 정보를 제공 할 수 있습니까? – Anand

+0

일부 세부 정보로 수정되었습니다. – Lizzie

+0

당신이 묻고있는 것이 무엇인지는 분명치 않습니다. 'dbms_output' 호출 후에 누락 된 세미콜론 이외에 프로그램이 작동합니다. 논리는 조건을 조정하여 시행하려는 규칙과 일치하도록 약간 혼란 스럽습니다. – APC

답변

0

표 like

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

원하는 결과를 얻으려면 아래의 단계와이 코드를 따르십시오.

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

질문 : 2.0으로 변경하여 Liz의 GPA를 업데이트하면 메시지가 출력되지 않습니다. 방아쇠를 당기는 어떤 방법이 있습니까? 1 개 이상인 GPP의 메시지 만 있습니다. – Lizzie

+0

당신은'if : new.gpa> : old.gpa and : new.gpa! = 2.0'와 같은 것을 의미합니까? –

+0

Liz'a GPA가 2.0으로 변경되면 출력이 없어야합니다. 2.8 - 2.0 = 0.8이기 때문에. 0.8이 1보다 작습니다. GPA가 3.0이고 새 GPA가 2.0 인 다른 사용자를 추가하면 1이 감소하므로 출력이 있어야합니다. 감사합니다! – Lizzie

0

작업이 거꾸로되어 있습니다. 다음 new.gpa = 1.5, old.gpa = 3을 사용할 수 있습니다. 따라서 gpa가 1.5만큼 감소하여 메시지를 발행해야합니다. 메시지는 발행되지 않습니다 : 코드는 "new.gpa - old.gpa = 1 then message ..."입니다. 그러나 1.5 - 3 = -1.5가 아닌> - 1. "old.gpa - new.gpa = 1 "로 설정하십시오.

@Anand는 gpa가 3에서 2.9로 떨어지면 메시지를 생성하므로 좋지 않습니다. .1 방울