#mysql #database-trigger
#mysql #база данных-триггер
Вопрос:
Я все еще новичок в триггере базы данных msyql. Я хотел бы спросить о моих строках:
CREATE TRIGGER secure_dml3
BEFORE DELETE ON t_pembelian
BEGIN
IF (SELECT TO_CHAR (SYSDATE,'DY') IN ('SUN')) OR
(SELECT TO_CHAR (SYSDATE, 'HH24:MI') NOT BETWEEN '09.45' AND '20.30')
THEN
IF DELETING THEN
CALL RAISE_APPLICATION_ERROR (-20502,'Perubahan pada data hanya dapat dilakukan hanya pada jam kerja.');
END IF;
END IF;
END
Mysql всегда говорит, что есть ошибка около
‘НАЧАТЬ, ЕСЛИ (ВЫБЕРИТЕ TO_CHAR (SYSDATE,’DY’) В (‘SUN’)) ИЛИ (ВЫБЕРИТЕ TO_CHAR (SYSD’ в строке 3.
Мне действительно нужна ваша помощь. Спасибо
Комментарии:
1. Во-первых, вам не хватает разделителя. Итак, добавьте следующее в начале,
delimiter //
и последнееEND
должно быть какEND //
Next в mysql нет функцииTO_CHAR
, и похоже, что вы скопировали какой-то триггер oracle. И в mysqlRAISE_APPLICATION_ERROR
недоступен, и его вызываетсяSIGNAL
2. Большое вам спасибо за ваш ответ. Я хотел бы спросить еще раз, to_char следует заменить на какой синтаксис? И мне нужно только изменить raise_application_error с помощью signal?
3. Проверьте документы mysql для
date_format
иSIGNAL
для получения ошибки из триггера.
Ответ №1:
Я думаю, вы путаете oracle с MySQL. В MySQL не существует TO_CHAR
вы можете использовать DATE_FORMAT(SYSDATE,'DY')