2011-03-23 8 views
1

출력을 가져올 수 없으므로 문제를 찾을 수 없습니다.트리거가 저장 프로 시저를 호출하는 중

질문 :

Table : rent_info(cust_id,date_out,date_due_in,date_returned,fine) 

이 테이블은 책 대여 하나입니다. 처음에는 삽입 할 때 cust_id, date_out (책 발행일), date_due_in (발행일로부터 7 일 후)을 주어야합니다. 책이 리턴되면 트리거가 rent_info 테이블에 데이터를 삽입하는 데 사용됩니다.

나는 date_returned를 제공해야합니다. 방아쇠에서 나는 경과 한 매일 10 달러 인 벌금을 계산해야합니다.

반환을 위해 테이블을 업데이트하고 반환 날짜를 삽입하는 절차를 작성했습니다. 그런 다음 트리거가 생성됩니다 (얼마나 많은 벌금을 지불해야하는지 업데이트를 확인하는 행 수준 트리거). 마지막 계산서로 계산 된 벌금은 이고 테이블에는이 업데이트되었습니다.

문제는 미세한 양을 생성 할 수 있지만 벌금을 업데이트하기 위해 제공된 업데이트 문은 "테이블 변경 오류"입니다.

어디에서 잘못 됐는지 알려주실 수 있습니까? 코드를 게시하지 않으셔서 죄송합니다. 나는 실험실에서 코드를 얻을 수 없었다. 이 정보가 충분하지 않으면 나는 그것을 내 시스템에서 시험해보고 나중에 여기에 게시 할 수 있습니다.

+0

[이 답변보기] (http://stackoverflow.com/questions/5133705/solving-the-mutating-table-problem-in-oracle-sql-produces-a-deadlock/5137951#5137951) 테이블 오류를 변경할 수 있습니다. – Sathya

답변

2

코드가 없으면이 문제를 어떻게 해결했는지 추측하기가 약간 까다 롭지 만 행 수준 트리거에서 현재 행을 업데이트하는 UPDATE 문을 작성한 것 같습니다.

그건 불가능합니다. 갱신중인 행을 갱신 할 수 없습니다.

트리거 내에서 ": new.fine"의 값을 변경하여 계산 된 벌금을 업데이트 할 수 있습니다.

+0

예 - 트리거가 FOR EACH ROW 옵션을 사용하는 BEFORE UPDATE 트리거인지 확인하십시오. –

관련 문제