Substring, Count и Concat в триггере перед вставкой?

AMPSYS спросил: 07 октября 2018 в 10:24 в: mysql

У меня есть дилемма, когда мне нужно, чтобы база данных MySQL создавала номер клиента на основе первых 3 символов введенного нового имени клиента и добавляла возрастающее значение. Например:

Таблица клиентов:

+----+----------------------------------------------+--------------+
| id | clientName                                   | clientNumber |
+----+----------------------------------------------+--------------+
|  1 | Accelerated Learning                         | ACC00        |
|  2 | Acceleration Systems                         | ACC01        |
|  3 | Acme,Inc.                                    | ACM00        |

Обычно я делаю это в форме представления на внешнем интерфейсе, но для Причины необъяснимые, спецификация хочет, чтобы это обрабатывалось БД. Я пытаюсь написать что-то вроде этого, но не могу понять это правильно:

Триггер:

CREATE DEFINER = CURRENT_USER TRIGGER `crmdev`.`clients_BEFORE_INSERT` BEFORE INSERT ON `clients` FOR EACH ROW
BEGIN
DECLARE prefix varchar(3);
DECLARE suffix INT(3);
SET prefix = SUBSTRING(NEW.clientName,1,3);
SET suffix = (
    SELECT COUNT(*),SUBSTRING(clientName,1,3) = prefix + 1;
SET NEW.clientNumber = CONCAT(prefix,suffix);
END

Спасибо в заранее за помощь / руководство!


0 ответов