我们可以在一个触发器中使用两个表吗?我有历史表,因为我需要从两个表中放置数据。
即。
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)所以我想要创建的触发器是,每当在booking表中的datefrom被更新时,它应该更新booking_history表中的所有信息(如果没有输入dateto,则dateto....in case除外)
我尝试创建下面的表,但它给出了错误,因为来宾表在这里没有被标记,但是我不确定应该放在哪里
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‘
发布于 2012-09-18 03:29:28
首先,请解释触发器何时给出错误和错误的确切文本。正如我所看到的,触发器是不正确的: 1.如果更新-拼写问题+我不明白你为什么要使用它,如果触发器声明为更新2.如果你想检查:OLD.DATETO是否改变,只需将其与:new id进行比较。3.之后如果应该是那么
尝试添加这些修复并显示错误文本
BOOKING表上的触发器可以处理表BOOKING中存在的字段。您正在尝试处理来宾表的旧字段/新字段,这是不可能的。旧来宾和新来宾只能在来宾表上的触发器中访问。就这样。
发布于 2012-09-18 03:57:37
您的触发器当然可以查询定义它的表以外的表(尽管将这种逻辑放入触发器中很可能会使您将来返回并询问如何处理变异表异常)。
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;https://stackoverflow.com/questions/12465797
复制相似问题