Почему этот триггер mysql выдает ошибку?

0

Я пытаюсь перевести мой триггер оракула на MySQL, но я получаю ошибку. Это мой триггер mysql:

delimiter //
CREATE TRIGGER z_asdsdas BEFORE UPDATE ON PRODUCT
FOR EACH ROW
BEGIN
DECLARE v_result INT;
SET v_result = 0;
      IF 'BETWEEN' = 'BETWEEN' THEN
        IF NEW.PRIJS >= 1 AND NEW.PRIJS <= 10 THEN
            SET v_result = 1;
        END IF;
      ELSE
        IF NEW.PRIJS < 1 OR NEW.PRIJS > 10 THEN
            SET v_result = 1;
        END IF;
      END IF;

      IF v_result = 0 THEN
        signal sqlstate -20000 set msgtext = 'error here...';
      END IF;
END //

DELIMITER ;

Сначала я дал статическим значениям триггера mysql, чтобы проверить, должен ли он работать. Это мой триггер оракула:

CREATE OR REPLACE TRIGGER BRG_<code>_<attribute_table>_TRG
BEFORE DELETE OR INSERT OR UPDATE
ON <attribute_table>
FOR EACH ROW
DECLARE
  L_OPER        VARCHAR2(3);
  L_ERROR_STACK VARCHAR2(4000);
BEGIN
  IF INSERTING
  THEN
    L_OPER := 'INS';
  ELSIF UPDATING
    THEN
      L_OPER := 'UPD';
  END IF;
  DECLARE
    L_PASSED BOOLEAN := TRUE;
  BEGIN
    IF L_OPER IN ('INS', 'UPD')
    THEN
      IF '<operator>' = 'BETWEEN' THEN
        L_PASSED := :NEW.<attribute_column> <GreaterOrEqual> <range_min> AND :NEW.<attribute_column> <LessOrEqual> <range_max>;
      ELSE
        L_PASSED := :NEW.<attribute_column> <LessThen> <range_min> OR :NEW.<attribute_column> <GreaterThen> <range_max>;
      END IF;

      IF NOT L_PASSED
      THEN
        raise_application_error(-20000, '<error>');
      END IF;
    END IF;
  END;
END;

Компилятор выдает красные строки в операторах if и сообщение: синтаксическая ошибка в строке 17. Есть идеи, что я делаю неправильно? Mysql довольно новый для меня.

Теги:
triggers

1 ответ

1

Попробуйте исправить строку сигнализации:

...
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'error here...';
...
  • 0
    Вау .. удивительно, это решило мою проблему! Большое спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню