我做了一个表学生,其中有一个属性评估。 现在我正在制作一个触发器,我希望如果我在评估中插入零值,那么触发器应该触发并在audit_table中存储一些值。 这是我的代码
Create table Student ( Student_Id Number(8,2), Student_Name Varchar2(50), Gender Varchar(8), Telephone_No Number(15), Location Varchar2(200), Education Varchar2(100), Company_name Varchar2(200), No_of_attempt Number(2), Offering_Id Number(3) , EVALUATION NUMBER(2), Primary Key (Student_Id), Constraint fk_Oid Foreign Key (Offering_Id) References Course(Offering_Id) );
现在是审计表代码
CREATE TABLE AUDIT_TABLE ( STUD_NAME VARCHAR2(100), COURSE_NAME
VARCHAR2(100), INSTRUCTOR_NAME VARCHAR2(200), EVALUATION NUMBER (2)
);
现在我的主要问题是我的触发器无法正常工作
create trigger tr_student
after insert or update on student
for each row
declare
s_name student.student_name%type;
s_eval student.evaluation%type;
s_offr_id student.offering_id%type;
s_course_name student.student_name%type;
s_instr student.student_name%type;
begin
if evaluation == 0;
s_offr_id =(select offering_id from student where evaluation==0);
s_eval =0;
s_name =(select student_name from student where evaluation==0);
s_course_name =(select course_name from course where offering_id==s_offr_id);
s_instr=(select name from instructor where offering_id==s_offr_id);
insert into AUDIT_TABLE values(s_name,s_course,s_instr,s_eval);
end;
我的触发器有问题吗?
答案 0 :(得分:3)
这是不可能的:
s_name =(select student_name from student where evaluation==0);
将其更改为
select student_name into s_name from student where evaluation = 0;
注意有两个问题。首先,您需要into
来为变量选择一个值。其次,SQL中的比较运算符只有一个=
。
同样如此
if evaluation == 0;
..
end;
应该是
if :new.evaluation = 0 then
...
end if;
那么,您忘记了then
和end if
,比较运算符是错误的,您需要:new.fieldname
来获取字段的值,而不是局部变量。< / p>
PLSQL中的赋值运算符是:=
,所以
s_eval =0;
应改为
s_eval := 0;
看来你需要再次抓住教科书并多做一些阅读。 :)