2014-04-09 2 views
0

피드백 보내기 원인 원인 위치를 여러 개의 등급을 FEEDBACK라는 테이블에서 걸리고 멤버 테이블에 평균 등급을 만듭니다. 나는 새로운 피드백이 삽입 될 때마다 트리거가 각 사람의 평균 등급을 업데이트하기를 원합니다.평균 등급 트리거 ORACLE SQL

----------- 이들은 ---------- -----------

create table Member_T(
MemberID  Varchar2 (10) primary key, 
MemberFirstName Varchar2 (20) NOT NULL, 
MemberLastName Varchar2 (20) NOT NULL, 
MemberMidleName Varchar2 (10), 
MemberEmail  Varchar2 (50) NOT NULL, 
MemberPassword Varchar2 (20) NOT NULL, 
MemberAdress Varchar2 (50) , 
MemberCity  Varchar2 (20) , 
MemberState  char  (2) , 
MemberCountry Varchar2 (20) , 
MemberZipCode number (5,0), 
MemberPhone  Varchar2 (12) , 
MemberAverageRating number (3,1) check (MemberAverageRating >= 0.0 AND MemberAverageRating <= 5.0)); 

create table Feedback_T(
FeedbackID   Varchar2 (10) primary key, 
FeedbackMemberGiverID Varchar2 (10) references Member_T(MemberID), 
MemberReceiverID  Varchar2 (10) references Member_T(MemberID), 
MemberRating   number (3,1) check (MemberRating >= 0.0 AND MemberRating <= 5.0), 
MemberComment   Varchar2 (500), 
MemberFeedbackDate Date Default(sysdate)); 

내 테이블입니다 - 이건 내 트리거가 -----------

create or replace trigger updateRating 
    after insert 
     on Feedback_T 
     for each row 
Declare 
    rating   Feedback_T.MemberRating%type; 
    receiver  Feedback_T.MEMBERRECEIVERID%type; 
    averageRating Member_T.MemberAverageRating%type; 
begin 
    select AVG(MemberRating), count(MEMBERRECEIVERID) 
    into rating, receiver 
    from Feedback_T 
    where Feedback_T.FEEDBACKID = :new.FEEDBACKID; 

    update Member_T 
    set averageRating = rating/receiver 
    where Member_T.MemberID = :new.MemberID; 
end; 

----------- 나는이 오류 ---------- -

TRIGGER UPDATERATING compiled 
Errors: check compiler log 
+0

이것을 컴파일하기 위해 어떤 클라이언트를 사용하고 있습니까? – OldProgrammer

+0

숙제를위한 것입니까? 아니면 진짜 시스템일까요? 컴파일 오류를 수정하면 테이블 런타임 예외를 돌연변이하는 경우가 거의 확실합니다. 다중 사용자 시스템에서는 작동하지 않습니다. 트리거를 사용하여 실제 시스템에서 이런 종류의 일을 구현하는 것은 가능하지만 여기에있는 것보다 훨씬 복잡합니다. –

+0

그것은 내 자신을 위해 노력해 온 것입니다. 나는 첫 번째 방아쇠를 만들기 위해 노력하고 있으며 평균 평정을위한 데이터를 사용하여 그것을하고 싶습니다. 나는 아직도이 컴파일 오류가 어디서 발생하는지 이해하지 못합니다. 나는 ORACLE SQL Developer를 사용하고 있으며 컴파일러 로그를 찾는 데 어려움을 겪고 있습니다 ... – user01230

답변

0

SQL 프롬프트에서 "show errors"를 실행하면 오류가 표시되거나이 오류를 SQLDeveloper에서 컴파일하여 오류를 표시합니다. 문제는 다음과 같습니다라는 더 바인드 변수가없는

where Member_T.MemberID = :new.MemberID; 

: new.MemberID, MEMBERID 트리거가 있다는 Feedback_T 테이블의 열이 아니기 때문에. 아마도 FeedbackMemberGiverID 또는 MemberReceiverID를 참조 할 수 있습니까?

+0

답장을 보내 주셔서 감사합니다. 실제로 Oracle SQL Developer에서 오류를 보는 방법을 찾을 수 없습니다. – user01230