#database #triggers #db2 #database-trigger
#База данных #триггеры #db2 #база данных-триггер
Вопрос:
Я определил этот триггер
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:
ошибка 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