Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не получается вставить обработчик ошибок в процедуру или
 
 автор: Win-ni   (17.01.2009 в 20:46)   письмо автору
 
 

Здравствуйте !

Никак не получается вставить обработчик ошибок в процедуру или
триггер. Вроде бы, все делаю в соответсвии с самоучителем
М.Кузнецова и И.Семдянова "MySQL5"

1. Запускаю клиента mysql (из комплекта Denwer3.):
C:\WebServers\usr\local\mysql5\bin>mysql -u root --default-character-set=cp1250
--delimiter=~

2. Подключаю свою БД:
mysql> use Apteka_MySQL~
Database changed

3. Пробую создать триггер:
mysql> CREATE TRIGGER t22_bi
-> BEFORE INSERT ON kategorii
-> FOR EACH ROW
-> BEGIN
-> DECLARE EXIT HANDLER
-> FOR SQLSTATE '23000';
-> END~
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near ';
END' at line 6

4. Пробую создать хранимую процедуру:
mysql> CREATE PROCEDURE t2()
-> BEGIN
-> DECLARE EXIT HANDLER
-> FOR SQLSTATE '23000';
-> END~
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near ';
END' at line 4

5. Если без обработчика, то похожий триггер создается
и даже нормально работает:
mysql> CREATE TRIGGER t2_bi
-> BEFORE DELETE ON kategorii
-> FOR EACH ROW
-> BEGIN
-> SET @bb = 'Deleted';
-> END~
Query OK, 0 rows affected (0.03 sec)

mysql> delete from kategorii
-> where id_kategor=11~
Query OK, 1 row affected (0.00 sec)

mysql> select @bb~
+---------+
| @bb |
+---------+
| Deleted |
+---------+
1 row in set (0.00 sec)

Если кто-то знает в чем тут собака порылась, помогите,
пожалуйста!

  Ответить  
 
 автор: ronin80   (19.01.2009 в 14:58)   письмо автору
 
   для: Win-ni   (17.01.2009 в 20:46)
 

вот так сработало

CREATE PROCEDURE t2()
BEGIN
DECLARE EXIT HANDLER
FOR SQLSTATE '23000'
BEGIN
END;
END//

надо просто добавить BEGIN END:

  Ответить  
 
 автор: Win-ni   (19.01.2009 в 15:58)   письмо автору
 
   для: ronin80   (19.01.2009 в 14:58)
 

Спасибо!
Действительно, здесь просто нарушение синтаксиса:
Declare .. handler должен завершатьмя оператором, хотя бы пустым.

Но до сих не могу побороть главного ворога: то есть отменить удаление записи
при помощи триггера BEFORE DELETE. Уж больно хорошо это работает
в Interbase ! Скачал мануал MySQL5.0 (англ ) на http://dev.mysql.com/doc/ . Там узнал, что есть
спец форум по триггерам. Попробую сходить туда.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования