在插入pl/sql oracle之前触发更新值

在插入pl/sql oracle之前触发更新值,oracle,Oracle,我想创建一个触发器,当我在表中插入4个科目的值时,它会自动计算百分比并设置奖学金折扣,比如如果学生获得60%,然后设置一些卢比折扣,如果是80%,则设置一些卢比折扣插入触发器之前,您需要编写简单的代码。你甚至不需要光标。试试下面的触发器。 用户输入以下插入语法: CREATE OR REPLACE TRIGGER stud_percent_disc BEFORE INSERT ON student FOR EACH ROW DECLARE v_total student.total

我想创建一个触发器,当我在表中插入4个科目的值时,它会自动计算百分比并设置奖学金折扣,比如如果学生获得60%,然后设置一些卢比折扣,如果是80%,则设置一些卢比折扣

插入触发器之前,您需要编写简单的代码。你甚至不需要光标。试试下面的触发器。

用户输入以下插入语法:

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

你的密码在哪里?将无法仅对错误进行帮助。在更新学生上的每一行之前创建或替换触发器vi_insert启用声明t学生。总计%type;学生百分比百分比类型;d.折扣%类型;vs1学生。s1%类型;vs2学生。s2%类型;vs3学生。s3%类型;vs4学生。s4%类型;vrno学生。rno%类型;光标stu为select*from student;rw stu%行类型;开始开放式stu;循环将stu提取到rw中;t:=rw.vs1+rw.vs2+rw.vs3+rw.vs4;p:=t*0.25;更新学生集合总数:=t,其中rno:=rw.rno;更新学生集百分比:=p,其中rno:=rw.rno;如果r.p>=95,则更新学生套餐折扣:=25000,其中rno:=rw.rno---条件2如果r.p>=90,则更新学生集折扣:=20000,其中rno:=rw.rno--第3条如果r.p>=80,则更新学生集折扣:=15000,其中rno:=rw.rno--第4条如果r.p>=75,则更新学生集折扣:=10000,其中rno:=rw.rno-条件5其他更新学生集折扣:=0,其中rno:=rw.rno;如果结束;未找到stu%时退出;端环;关闭stu;vi_插入;终止我是这个网站的新手,先生。我无法按照网站说明在其中设置给定格式的代码,使用=,而不是:=但在运行此触发器后,当我在s1 s2 s3 s4中的表学生样值中插入值时,是否成功创建了总计、百分比和折扣触发器?或者有一些错误?是的,成功创建当我在插入后使用时显示错误ORA-04091:table SYSTEM.STUDENT正在变异,触发器/函数可能看不到它ORA-06512:at SYSTEM.STUD_PERCENT_DISC,第5行ORA-06512:at SYSTEM.STUD_PERCENT_DISC,第8行ORA-04088:执行触发器“SYSTEM.STUD_PERCENT_DISC”时出错,但在更新之前使用…然后没有错误,但触发器未执行更新…如总计、百分比、折扣
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);