Там в поддельной больше, чем символ (символ >
) на линии с последней вставкой. Вероятно, это приведет к ошибке.
Также, на этой последней строке, поставьте промежуток DELIMITER
и точка с запятой. (Мое личное предпочтение, чтобы иметь DELIMITER
заявление предшествовало и за которым следует пустая строка.)
Примечание: Обычно, когда MySQL генерирует ошибку синтаксиса, то сообщение об ошибке обычно включает в себя указание о том, где MySQL считает проблему является. Это может помочь нам сузить место, где находится реальная проблема; но нам нужно фактическое сообщение об ошибке.
Там же ссылка на необъявленную переменную type
в формулировках IF, что также приведет к ошибке.
Имена переменных выглядят одинаковыми с именами столбцов. Это разрешено, но когда есть столкновение (когда ссылка может быть в любом случае), важно отметить, что в MySQL приоритет присваивается имени переменной. Обычно мы избегаем этого: 1) сопоставляя ссылки столбцов с псевдонимом таблицы и 2) называем переменные таким образом, чтобы они не вызывали столкновений.
Основываясь на определении триггера О.П., я бы рекомендовал что-то вроде этого:
DELIMITER $$
CREATE TRIGGER cheque_update_trigger
AFTER INSERT ON cheque_details
FOR EACH ROW
BEGIN
DECLARE v_banktype TEXT;
DECLARE v_branchrefno INT;
SELECT a.branch_ref_no
INTO v_branchrefno
FROM customer_account a
WHERE a.acct_no = NEW.acct_no
LIMIT 1;
SELECT b.type
INTO v_banktype
FROM branch_table b
WHERE b.branch_ref_no = v_branchrefno
LIMIT 1;
IF (v_banktype = 'ab') THEN
INSERT INTO ab_cheque_register (cheque_no, branch_ref_no, fbank_ref_no, amount)
VALUES (NEW.cheque_no, v_branchrefno, NEW.fbank_ref_no, NEW.amount);
ELSE
IF (v_banktype = 'nab') THEN
INSERT INTO nab_cheque_register (cheque_no, branch_ref_no)
VALUES (NEW.cheque_no, v_branchrefno);
END IF;
INSERT INTO osb_cheque_register (cheque_no, branch_ref_no)
VALUES (NEW.cheque_no, v_branchrefno);
END IF;
END$$
DELIMITER ;
Этот стиль форматирования делает НАМНОГО легче на бедной душе, которая должна читать и расшифровывать определение триггера.
(Is «banktype
» на самом деле определяется как TEXT
тип данных? Кажется, гораздо более вероятно, эта колонка будет определяться как VARCHAR, CHAR или ENUM.)
Если вы разделяете ошибку, было бы проще, чтобы помочь ... – Mureinik
Пожалуйста, уточните вопрос с более подробной информацией. В другом случае это будет отмечено как низкое качество –
** «Я получаю сообщение об ошибке» ** не является достаточным описанием проблемы. Сообщение об ошибке MySQL содержит * details *, которые описывают фактическую проблему, а не только туманную «ошибку». У вас есть * вопрос *, который вы хотели спросить? – spencer7593