【问题标题】:trigger help on db2在 db2 上触发帮助
【发布时间】:2015-12-08 14:32:26
【问题描述】:

大家好,我已经写了一个触发器,我希望它会生成一条消息说

“坐在拖车上的人已经死了,继续吗?”

在用户更新表trip 之后。

为了符合失效卫星的资格,我们使用了一个名为trailer 的表格,其中显示了最后的卫星日期。如果 sat 超过 8 天没有 ping,那么它被认为是死的。

active in disp 表示预告片仍然是公司资产。

这就是我所在的地方,你们可以给我反馈吗?也许有一些建议?提前致谢!

CREATE TRIGGER MISSING_TRAILERS
AFTER UPDATE OF TRAILER ON TRIP 
REFERENCING NEW AS N OLD AS O 
FOR EACH ROW
BEGIN ATOMIC

DECLARE DEAD_SAT VARCHAR(10); 
DECLARE MSG VARCHAR(70); 

SET DEAD_SAT = COALESCE((SELECT TRAILER_ID FROM TRAILER WHERE LAST_SAT_DATE < CURRENT TIMESTAMP - 8 DAYS AND ACTIVE_IN_DISP = 'True'),'OK')

IF DEAD_SAT <> 'OK' THEN
SET MSG = 'SAT ON TRAILER IS DEAD, PROCEED?'  
END IF;
END

【问题讨论】:

  • 这听起来像是应用程序逻辑,而不是属于触发器的东西。触发器通常用于维护数据完整性和维护汇总表。它们通常不用于将消息发送回用户。
  • 我知道,但我们也有将消息发送回用户的触发器
  • CREATE TRIGGER BT_CU_BEFORE_UPDATE_BROKER_RATE NO CASCADE BEFORE UPDATE OF DECLARED_VALUE ON TLORDER REFERENCING NEW AS NOLD AS O FOR EACH MODE DB2SQL BEGIN ATOMIC DECLARE CUST_GROUP VARCHAR(10);声明 FSC VARCHAR(3); DECLARE DETAIL_LINE VARCHAR(3);声明 MSG VARCHAR(70);
  • SET CUST_GROUP = COALESCE((SELECT CUSTOMER_GROUP FROM CLIENT WHERE CLIENT_ID = N.BILL_TO_CODE),'NONE'); SET FSC = COALESCE((从 ACHARGE_TLORDER A 中选择“YES”,其中 A.DETAIL_LINE_ID = N.DETAIL_LINE_ID AND CHARGE_AMOUNT 0 AND ACODE_ID LIKE 'FS_%' AND MANUAL_AMT = 'False' FETCH FIRST 1 ROW ONLY),'NO') ; SET DETAIL_LINE = COALESCE((SELECT 'YES' FROM TLDTL WHERE ORDER_ID = N.DETAIL_LINE_ID AND PICK_ID = 0 FETCH FIRST 1 ROW ONLY),'NO');
  • @GordonLinoff 是对的。即使触发器引发错误消息,您的应用程序仍然需要知道如何处理错误并将其转换为询问用户是否继续的提示,并决定如何处理用户的响应。

标签: sql triggers db2


【解决方案1】:
CREATE TRIGGER DEAD_TRAILERS_NOTIFY
AFTER UPDATE OF TRAILER ON TRIP 
REFERENCING NEW AS N OLD AS O 
FOR EACH ROW
BEGIN ATOMIC

DECLARE DEAD_SAT VARCHAR(10); 
DECLARE MSG VARCHAR(70); 

SET DEAD_SAT = COALESCE((SELECT TRAILER_ID FROM TRAILER WHERE LAST_SAT_DATE < CURRENT TIMESTAMP - 8 DAYS AND N.TRAILER = TRAILER_ID),'OK');



    IF DEAD_SAT <> 'OK' AND USER NOT IN ('VISTAR','TM4WIN') THEN
    SET MSG = 'SAT ON TRAILER IS DEAD. PLEASE GET IT REPLACED'; 
    SIGNAL SQLSTATE '75010' SET MESSAGE_TEXT = MSG;
    END IF;
END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    相关资源
    最近更新 更多