首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一个触发器读取两个表

一个触发器读取两个表
EN

Stack Overflow用户
提问于 2012-09-18 03:21:34
回答 2查看 651关注 0票数 0

我们可以在一个触发器中使用两个表吗?我有历史表,因为我需要从两个表中放置数据。

即。

代码语言:javascript
运行
复制
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除外)

我尝试创建下面的表,但它给出了错误,因为来宾表在这里没有被标记,但是我不确定应该放在哪里

代码语言:javascript
运行
复制
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‘

EN

回答 2

Stack Overflow用户

发布于 2012-09-18 03:29:28

首先,请解释触发器何时给出错误和错误的确切文本。正如我所看到的,触发器是不正确的: 1.如果更新-拼写问题+我不明白你为什么要使用它,如果触发器声明为更新2.如果你想检查:OLD.DATETO是否改变,只需将其与:new id进行比较。3.之后如果应该是那么

尝试添加这些修复并显示错误文本

BOOKING表上的触发器可以处理表BOOKING中存在的字段。您正在尝试处理来宾表的旧字段/新字段,这是不可能的。旧来宾和新来宾只能在来宾表上的触发器中访问。就这样。

票数 0
EN

Stack Overflow用户

发布于 2012-09-18 03:57:37

您的触发器当然可以查询定义它的表以外的表(尽管将这种逻辑放入触发器中很可能会使您将来返回并询问如何处理变异表异常)。

代码语言:javascript
运行
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12465797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档