0

PL/SQL を使用してライブラリ インフォテインメント システムを作成しようとしています。皆さんが推測する前に、はい、それは宿題ですが、私は一生懸命努力し、十分に努力した後にのみここで質問をしました.

基本的に、テーブルはほとんどありません。そのうちの 2 つは Issue(Bookid, borrowerid, issuedate, returndate) Borrower(borrowerid, name, status)です。

表のステータスはBorrowerいずれかになります'student' or 'faculty'。トリガーを使用して制限を実装する必要がstudentありfacultyます.

PL/SQL はまったくの初心者です。それは簡単かもしれません、そして私はそれを行う方法について考えています。これは私ができる最善のことです。設計/コンパイラのエラーを見つけるのを手伝ってください。

CREATE OR REPLACE TRIGGER trg_maxbooks
AFTER INSERT ON ISSUE
FOR EACH ROW 
DECLARE
    BORROWERCOUNT INTEGER;
    SORF VARCHAR2(20);
BEGIN
    SELECT COUNT(*) INTO BORROWERCOUNT
    FROM ISSUE
    WHERE BORROWER_ID = :NEW.BORROWER_ID;

    SELECT STATUS INTO SORF
    FROM BORROWER
    WHERE BORROWER_ID = :NEW.BORROWER_ID;

    IF ((BORROWERCOUNT=2 AND SORF='STUDENT')
        OR (BORROWERCOUNT=3 AND SORF='FACULTY')) THEN
        ROLLBACK TRANSACTION;
    END IF;
END;
4

2 に答える 2

0

次のようなことを試してください:

CREATE OR REPLACE TRIGGER TRG_MAXBOOKS
    BEFORE INSERT
    ON ISSUE
    FOR EACH ROW
BEGIN
    IF ( :NEW.BORROWERCOUNT > 2
        AND :NEW.SORF = 'STUDENT' )
       OR ( :NEW.BORROWERCOUNT > 3
          AND :NEW.SORF = 'FACULTY' )
    THEN
        RAISE_APPLICATION_ERROR (
                             -20001,
                             'Cannot issue beyond the limit, retry as per the limit' );
    END IF;
END;
/

トリガー内にコミットまたはロールバックがあってはなりません。論理例外は ROLLBACK と同等です

于 2013-10-15T13:31:53.263 に答える