2011-12-15 2 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; 

Так там, вы забыли then и end if, оператор сравнения не так и вам нужно :new.fieldname, чтобы получить значение вместо локальной переменной.

Оператор присваивания в PLSQL является :=, так

s_eval =0; 

должен быть изменен на

s_eval := 0; 

Кажется, что вам нужно, чтобы захватить Учебник снова и сделать еще некоторое чтение. :)

+0

Это был бы полный ответ, если бы вы упоминали, что оператор присваивания в PL/SQL равен ': =', а не '='. – Allan

+0

Добавил эту информацию тоже. Благодарю. – GolezTrol

Смежные вопросы