2011-12-15 12 views
0

私はテーブルの生徒を作成しました。そこには属性評価があります。 今私は、私が評価でゼロの値を挿入し、次にトリガする必要があるトリガを作っていると、audit_tableにいくつかの値を格納して保存する必要があります。 はここに今、私のメインの質問は、これはOracle/iSQLでトリガーを作成できません

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; 

私のトリガーといくつかの問題があるが動作していない私のトリガーである私のコード

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) 

); 

のですか?

+1

@Bart、そして新しいユーザーは、オンラインで書くときにすべての大文字を使わない*ことを学ぶだろうか? – zzzzBov

+0

PLSQL開発者(および他のツールも含む)を使用してトリガをコンパイルすると、コンパイルエラーの場合に問題を示すエラーが表示されます。 – GolezTrol

+1

@zzzzBov私が行った編集とそれ以降の編集のコメントを見てください。 – Bart

答えて

3

これは不可能です。

select student_name into s_name from student where evaluation = 0; 

ノートへ

s_name =(select student_name from student where evaluation==0); 

変更それは二つの問題があります。まず、変数に値を選択するにはintoが必要です。第2に、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

関連する問題