0

1 つのトリガーで 2 つのテーブルを使用できますか? 2 つのテーブルからデータを配置する必要があるという点で履歴テーブルがあります。

すなわち。

Guest (Guestno, firstname,lastname,address,city, state, zip.....)
Booking (BookingId, Hotelno, Guestno, datefrom, datefrom)
Boogking history (bookingid,guestno, fristname,lastname, address, city, state, zip, hotelno, datefrom, dateto)

したがって、作成したいトリガーは、予約テーブルのdatefromが更新されるたびに、booking_historyテーブルのすべての情報を更新する必要があることです(datetoが入力されていない場合はdatetoを除く)

以下を作成しようとしましたが、ゲストテーブルがこれに記載されていないためエラーが発生しますが、どこに配置すればよいかわかりません

CREATE OR REPLACE TRIGGER BOOKING_DATETO_UPDATE
AFTER UPDATE OF DATETO ON BOOKING
FOR EACH ROW
BEGIN 


INSERT INTO BOOKINGHISTORY
(BOOKINGID, GUETNO, FIRSTNAME, LASTNAME, ADDRESS, CITY, STATE, ZIP, HOTELNO, DATETO, DATFROM)

VALUES (:OLD.bookingid,:OLD.guestno, :OLD.FirstName, :OLD.LastName,
:OLD.Address, :OLD.City, :OLD.State, :OLD.Zip, :OLD,Hotelno, :OLD.Dateto, :OLD.Datefrom);


end;

私が得るエラーは以下です。以下はサンプルですが、Guest テーブルのすべてのフィールド (guestno、firstname、lastname、ADDRESS、CITY、STATE)

エラー (9,38): PLS-00049: バインド変数 'OLD.FIRSTNAME' が正しくありません

4

2 に答える 2

0

まず、トリガーがいつエラーを発生させるか、およびエラーの正確なテキストを説明してください。私が見ることができたように、トリガーが正しくない: 1. IF UPDATEING - スペルの問題 + トリガーが ON UPDATE として宣言されている場合、なぜそれを使用するのかわかりません:new id と比較してください。3. IF の後は THEN にする必要があります

これらの修正を追加して、エラー テキストを表示してみてください

BOOKING テーブルのトリガーは、テーブル BOOKING に存在するフィールドを処理できます。IMPOSSIBLE である GUEST テーブルの古い/新しいフィールドを操作しようとしています。古い GUEST と新しい GUEST は、GUEST テーブルのトリガーでのみアクセスできます。それでおしまい。

于 2012-09-17T19:29:27.743 に答える
0

トリガーは、それが定義されているテーブル以外のテーブルをクエリすることもできます (ただし、この種のロジックをトリガーに入れると、後で変更テーブルの例外を回避する方法について質問する可能性が高くなります) )。

CREATE OR REPLACE TRIGGER BOOKING_DATETO_UPDATE
  AFTER UPDATE OF DATETO ON BOOKING
  FOR EACH ROW
DECLARE
  l_guest_rec guest%rowtype;
BEGIN 
  -- If `guestno` can change, you'll need to tell us whether you want to use the old or the 
  -- new `guestno` to look up the appropriate row in the `guest` table.
  SELECT *
    INTO l_guest_rec
    FROM guest
   WHERE guestno = :old.guestno;

  INSERT INTO BOOKINGHISTORY( BOOKINGID, 
                              GUESTNO, 
                              FIRSTNAME, 
                              LASTNAME, 
                              ADDRESS, 
                              CITY, 
                              STATE, 
                              ZIP, 
                              HOTELNO, 
                              DATETO, 
                              DATFROM)
   VALUES (:OLD.bookingid,
           :OLD.guestno, 
           l_guest_rec.FirstName, 
           l_guest_rec.LastName,
           l_guest_rec.Address, 
           l_guest_rec.City, 
           l_guest_rec.State, 
           l_guest_rec.Zip, 
           :OLD,Hotelno, 
           :OLD.Dateto, 
           :OLD.Datefrom);
end;
于 2012-09-17T19:57:36.930 に答える