Sql 在触发器中调用过程!DB2
您好,我已经创建了一个程序和一个触发器,这两个程序的目的是通知我的调度员,当他们使用的资产中有一颗死卫星时。 这是我的程序Sql 在触发器中调用过程!DB2,sql,triggers,db2,procedure,Sql,Triggers,Db2,Procedure,您好,我已经创建了一个程序和一个触发器,这两个程序的目的是通知我的调度员,当他们使用的资产中有一颗死卫星时。 这是我的程序 CREATE OR REPLACE PROCEDURE DEAD_TRAILERS ( OUT oMSG_TYPE INTEGER, OUT oERROR_MSG VARCHAR(255) ) LANGUAGE SQL SPECIFIC SP_DEAD_TRAILERS MAIN: BEGIN --// 1 - warning message SET oMSG
CREATE OR REPLACE PROCEDURE DEAD_TRAILERS (
OUT oMSG_TYPE INTEGER,
OUT oERROR_MSG VARCHAR(255)
)
LANGUAGE SQL
SPECIFIC SP_DEAD_TRAILERS
MAIN: BEGIN
--// 1 - warning message
SET oMSG_TYPE = 1;
SET oERROR_MSG = 'SAT ON TRAILER IS DEAD. PLEASE GET IT REPLACED';
END
这是我的扳机
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
CALL DEAD_TRAILERS();
END IF;
END
提前谢谢 您已经用两个(输出)参数定义了过程,但在触发器中您调用的是其他一些没有参数的过程。正如@mustaccio所述,这只是未定义过程时的错误消息。它与在触发器内部调用无关。但是,我们也不清楚您希望该代码如何“通知[您的]调度员”,因为错误消息不会传递到任何地方。您能解释一下所需的通知行为吗?我希望查询在其试图使用的资产满足无故障sat的条件时发送通知
-- [IBM][CLI Driver][DB2/NT64] SQL0440N
No authorized routine named "DEAD_TRAILERS" of type "PROCEDURE"
having compatible arguments was found.
LINE NUMBER=13. SQLSTATE=42884