DB2引发应用程序触发器

时间:2019-04-10 08:18:46

标签: database triggers db2 database-trigger

我已经定义了此触发器

CREATE TRIGGER actualizarSaldoRetirada
BEFORE INSERT ON Retirada
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
BEGIN
    IF (SELECT Saldo FROM Cuenta WHERE IBAN = N.Cuenta_IBAN) - N.Cantidad >= 0 THEN
        UPDATE Cuenta SET Saldo = Saldo - N.Cantidad WHERE IBAN = N.Cuenta_IBAN;
    ELSE
        RAISE_APPLICATION_ERROR(-20000, 'El saldo de la cuenta no puede ser negativo');
    END IF;
END@

但是db2返回以下错误

An unexpected token "RAISE_APPLICATION_ERROR" was found following ".Cuenta_IBAN; ELSE "

有什么办法解决吗?

1 个答案:

答案 0 :(得分:3)

RAISE_APPLICATION_ERROR仅在pl / sql上下文中可用。 考虑改用SIGNAL

例如(从有效范围中选择自己合适的SQLSTATE值):

CREATE TRIGGER actualizarSaldoRetirada
BEFORE INSERT ON Retirada
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
BEGIN 
    IF (select saldo from cuenta where iban = N.cuenta_iban  ) - N.Cantidad >= 0 THEN
        UPDATE Cuenta SET Saldo = Saldo - N.Cantidad WHERE IBAN = N.Cuenta_IBAN;
    ELSE
        SIGNAL SQLSTATE '75002' set message_text= 'El saldo de la cuenta no puede ser negativo';
    END IF;
END