1

私は現在、Firebird、特にトリガーの初心者です。通常は手動でスクリプトを作成しますが、トリガーを使用して作成することに非常に魅力を感じています。

最初にテーブルについて説明させてください。

***STOCK***
CODE
NAME
TOTAL
GOOD
BROKEN
SERVICE
***DETAIL***
ID
STOCK_CODE
SERIAL
***BROKEN***
DETAIL_ID
MARK
***SERVICE***
DETAIL_ID
START_DATE
END_DATE
COST
***LOGS***
DETAIL_ID
MARK
START_DATE
END_DATE
COST

そして今私の問題:

  1. 新しいレコードを BROKEN に挿入した後、STOCK.GOOD および STOCK.BROKEN の値を変更する方法は? つまり、STOCK.GOOD-1、STOCK.BROKEN+1 になります。

  2. SERVICE の現在のレコードが削除される前に、BROKEN および SERVICE のすべてのレコードを LOGS に挿入する方法は?

私の質問が受け入れられることを願っています。

4

1 に答える 1

1

以下に 2 つのトリガーを示します。

CREATE TRIGGER bi_broken FOR broken
  BEFORE INSERT
  POSITION 0
AS
BEGIN
  UPDATE stock SET good = good - 1, broken = broken + 1
    WHERE code = (SELECT d.stock_code 
      FROM detail d WHERE d.id = NEW.detail_id);
END


CREATE TRIGGER bd_service FOR service
  BEFORE DELETE
  POSITION 0
AS
BEGIN
  INSERT INTO logs (detail_id, mark, start_date, end_date, cost)
  SELECT detail_id, (SELECT b.mark FROM broken b WHERE b.detail_id = OLD.detail_id),
    start_date, end_date, cost
  FROM service 
  WHERE detail_id = OLD.detail_id;
END

ところで、別表にマークを入れる理由は何ですか?STOCKのものですね。

于 2012-08-14T06:31:35.417 に答える