当我调用我的触发器更新我的 STUDENT table 中的总数时,我的 oracle SQL 出现错误
got error in SQL in my oracle when i call my trigger to update total in my STUDENT table
我必须调用一个触发器来在插入查询后更新总计和百分比字段
这是代码
create table bhrugus1 (
student_name varchar2(100),
dbms number,
dsa number,
mco number,
total number,
percentage number,
roll_no number primary key
);
CREATE OR REPLACE TRIGGER trial1
AFTER INSERT on bhrugus1
REFERENCING new AS new
FOR EACH ROW
BEGIN
:new.total := :new.dbms + :new.dsa + :new.mco;
:new.percentage := (:new.dbms + :new.dsa + :new.mco) / 3 ;
END;
insert into bhrugus1 values ('bhrugu',90,90,90,1,1,2);
SELECT * from bhrugus1;
table 和 运行 触发时出现错误
the new error
请修改您的触发器:
CREATE OR REPLACE TRIGGER trial1
before INSERT on bhrugus1
REFERENCING new AS new
FOR EACH ROW
BEGIN
:new.total := :new.dbms + :new.dsa + :new.mco;
:new.percentage := (:new.dbms + :new.dsa + :new.mco) / 3 ;
END;
您不应该 运行 在触发器中使用更新语句,使用 :new... 而不是更新。
另一件重要的事情是:
before insert
您缺少一个组件,当有人更新任何或所有 dbms、dsa、mco 时会发生什么。没有更新触发器来重新计算总数或百分比。您当然可以只在触发器上包含 'OR UPDATE' 。然而,更好的方法是将它们定义为虚拟列。
create table bhrugus1 (
student_name varchar2(100),
dbms number,
dsa number,
mco number,
total number generated always as (dbms+dsa+mco) virtual,
percentage number generated always as ((dbms+dsa+mco)/3) virtual,
roll_no number primary key
);
总计和百分比(糟糕的名字是平均值 - 但这是另一个问题)将始终正确计算。并删除不再需要的触发器。
我必须调用一个触发器来在插入查询后更新总计和百分比字段 这是代码
create table bhrugus1 (
student_name varchar2(100),
dbms number,
dsa number,
mco number,
total number,
percentage number,
roll_no number primary key
);
CREATE OR REPLACE TRIGGER trial1
AFTER INSERT on bhrugus1
REFERENCING new AS new
FOR EACH ROW
BEGIN
:new.total := :new.dbms + :new.dsa + :new.mco;
:new.percentage := (:new.dbms + :new.dsa + :new.mco) / 3 ;
END;
insert into bhrugus1 values ('bhrugu',90,90,90,1,1,2);
SELECT * from bhrugus1;
table 和 运行 触发时出现错误
the new error
请修改您的触发器:
CREATE OR REPLACE TRIGGER trial1
before INSERT on bhrugus1
REFERENCING new AS new
FOR EACH ROW
BEGIN
:new.total := :new.dbms + :new.dsa + :new.mco;
:new.percentage := (:new.dbms + :new.dsa + :new.mco) / 3 ;
END;
您不应该 运行 在触发器中使用更新语句,使用 :new... 而不是更新。
另一件重要的事情是:
before insert
您缺少一个组件,当有人更新任何或所有 dbms、dsa、mco 时会发生什么。没有更新触发器来重新计算总数或百分比。您当然可以只在触发器上包含 'OR UPDATE' 。然而,更好的方法是将它们定义为虚拟列。
create table bhrugus1 (
student_name varchar2(100),
dbms number,
dsa number,
mco number,
total number generated always as (dbms+dsa+mco) virtual,
percentage number generated always as ((dbms+dsa+mco)/3) virtual,
roll_no number primary key
);
总计和百分比(糟糕的名字是平均值 - 但这是另一个问题)将始终正确计算。并删除不再需要的触发器。