JohnSparrow
Новичок
Перехват сообщений об ошибках на сервере
Я пытаюсь вставить в таблицу одни и те же данные, нарушая тем самым ограничение на уникальность:
Дело в том, что возможных ограничений масса (внешние ключи, ограничение на длину строки или размер числа) и предполагается, что клиенты могут быть разные (настольное Windows-приложение и web-интерфейс), поэтому кажется не лучшим вариант реализовывать проверку ошибок на стороне клиента.
А, ну так вот, можно ли получить сообщение об ошибке непосредственно после выполнения манипуляций с данными в хранимой процедуре и, если да, то как?
---
MySQL - 5.1
Я пытаюсь вставить в таблицу одни и те же данные, нарушая тем самым ограничение на уникальность:
В ответ на вторую попытку вставки в клиент приходит сообщение об ошибке, что и показано ниже:-- создаем таблицу
CREATE TABLE radcdb.cloudness (
INTERNAL_ID BIGINT(20) AUTO_INCREMENT COMMENT 'Уникальный код',
TITLE VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'Наименование',
PRIMARY KEY (INTERNAL_ID),
UNIQUE INDEX INDX_CLOUDNESS_TITLE USING BTREE (TITLE)
)
ENGINE = INNODB
AUTO_INCREMENT = 17
CHARACTER SET utf8 COLLATE utf8_general_ci;
-- пытаемся вставить в нее два раза одно и то же
insert into CLOUDNESS(TITLE) values('Clear');
insert into CLOUDNESS(TITLE) values('Clear');
Идея заключается в том, чтобы:------ Выполнение начато: SQL1.sql ------
Таблица создана [0,057 c]
1 Строка вставлена [0,014 c]
Ошибка (17,1): Duplicate entry 'Clear' for key 'INDX_CLOUDNESS_TITLE'
------------ Готово: SQL1.sql -------------
- Для вставки данных создать хранимую процедуру на сервере.
- В этой процедуре перехватывать ошибки (получать сообщение об ошибке в том виде, в котором оно приведено выше).
- По маске выделять из них "виновника" (в данном конкретном случае - уникальный индекс).
- Зная виновника, возвращать в клиент "вменяемое" сообщение об ошибке (в данном случае - "Тип облачности /Clear/ уже зарегистрирован"), которое будет ясно оператору.
Дело в том, что возможных ограничений масса (внешние ключи, ограничение на длину строки или размер числа) и предполагается, что клиенты могут быть разные (настольное Windows-приложение и web-интерфейс), поэтому кажется не лучшим вариант реализовывать проверку ошибок на стороне клиента.
А, ну так вот, можно ли получить сообщение об ошибке непосредственно после выполнения манипуляций с данными в хранимой процедуре и, если да, то как?
---
MySQL - 5.1