2011-12-15 41 views
0

我做了一個表格學生,其中有一個屬性評估。 現在我正在做一個觸發器,我希望如果我在評估中插入一個值爲零,那麼觸發器應該觸發並在audit_table中存儲一些值。 這裏是我的代碼無法在Oracle/iSQL中創建觸發器

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; 

是有一些問題,我的觸發器?

+1

@Bart,以及新用戶將如何學會*不*使用全部大寫時,他們在網上寫? – zzzzBov

+0

如果您使用PLSQL開發人員(也可能是其他工具)編譯觸發器,如果​​它是編譯錯誤,您將收到一個指示問題的錯誤。 – GolezTrol

+1

@zzzzBov通過查看我所做的編輯以及隨後的編輯註釋。 – Bart

回答

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; 

所以在那裏,你忘了thenend if,比較操作是錯誤的,你需要:new.fieldname得到的值該字段,而不是局部變量。

在PLSQL賦值運算符是:=,所以

s_eval =0; 

應改爲

s_eval := 0; 

看來你需要再次搶教科書,並做一些更多的閱讀。 :)

+0

如果您提到PL/SQL中的賦值運算符是「=」而不是「=」,這將是一個完整的答案。 – Allan

+0

也添加了該信息。謝謝。 – GolezTrol