2017-07-04 125 views
-1
PL/SQL: SQL Statement ignored 
21/25 PL/SQL: ORA-00927: missing equal sign 
22/2  PL/SQL: SQL Statement ignored 
22/31 PL/SQL: ORA-00927: missing equal sign 
26/1  PL/SQL: SQL Statement ignored 
27/13 PL/SQL: ORA-00927: missing equal sign 
32/1  PL/SQL: SQL Statement ignored 
33/13 PL/SQL: ORA-00927: missing equal sign 
38/1  PL/SQL: SQL Statement ignored 
39/13 PL/SQL: ORA-00927: missing equal sign 
44/1  PL/SQL: SQL Statement ignored 

我想创建一个触发器,当我插入表4主体的价值会自动计算比例,并设置奖学金的折扣一样,如果学生有60%然后设置一些卢比折扣,如果80%比设置一些卢比折扣触发更新值

+0

哪里是你的代码?将无法帮助只有错误。 – Nitish

+0

创建或更换触发器vi_insert 更新前ON学生 FOR EACH ROW ENABLE 声明 t student.total%type; p student.percentage%type; d student.discount%type; vs1 student.s1%类型; vs2 student.s2%类型; vs3 student.s3%type; vs4 student.s4%type; vrno student.rno%type;光标s​​tu是select * from学生; rw stu%rowtype; begin open stu; loop fetch stu into rw; t:= rw.vs1 + rw.vs2 + rw.vs3 + rw.vs4; p:= t * 0.25; 更新学生组总数:= t其中rno:= rw.rno; 更新学生设置百分比:= p其中rno:= rw.rno; –

+0

if(r.p> = 95) then 更新学生 设置折扣:= 25000其中rno:= rw.rno; ----- COND 2 ELSIF(r.p> = 90) 然后 更新学生 组折扣:= 20000,其中RNO:= rw.rno; --- cond 3 elsif(r.p> = 80) 然后 更新学生 设置折扣:= 15000其中rno:= rw.rno; --- cond 4 elsif(r.p> = 75) 然后 更新学生 设置折扣:= 10000其中rno:= rw.rno; ---- cond 5 else 更新学生 设置折扣:= 0其中rno:= rw.rno; end if; 退出 退出stu时未找到; end loop; close stu; vi_insert; 结束; –

回答

0

你需要写简单的BEFORE INSERT触发器。你甚至不需要有游标。尝试触发下方。以下语法

CREATE OR REPLACE TRIGGER stud_percent_disc 
BEFORE INSERT 
ON student 
FOR EACH ROW 
    DECLARE 
    v_total student.total%type; 
    v_percent student.percentage%type; 
    v_discount student.discount%type; 
    BEGIN 
    -- calculate total 
    v_total := (:new.s1 + :new.s2 + :new.s3 + :new.s4); 
    -- calculate percentage 
    v_percent := (v_total * 0.25); 
    -- calculate discount value 
    if (v_percent >= 95) then 
     v_discount := 25000; 
    elsif (v_percent >= 90) then 
     v_discount := 20000; 
    elsif (v_percent >= 80) then 
     v_discount := 15000; 
    elsif (v_percent >= 75) then 
     v_discount := 10000; 
    else 
     v_discount := 0; 
    end if; 
    :new.total := v_total; 
    :new.percentage := v_percent; 
    :new.discount := v_discount; 
    END; 
/

用户插入:

insert into student(s1,s2,s3,s4,total,percentage,discount) values(88,88,88,88,0,0,0); 
+0

但运行此触发器时,我插入表中的值的学生像s1 s2 s3 s4中的值然后没有更新执行总计,百分比和折扣 –

+0

触发器创建成功吗?或者有一些错误? –

+0

YES SUCCESFULLY CREATED –