Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по триггеру MySQL 
V
    Опции темы
TimeKeeper
Дата 31.10.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 4.9.2008

Репутация: нет
Всего: нет



Нужен триггер BEFORE INSERT ON table1, который проверяет одно из вставляемых полей (table1.name) в другой (table2) таблице, если поле там есть, то вытаскивает id из table2 и заменяет вставляемое значение (table1.name) на этот id, если нет, то заносит name в table2, вытаскивает id и заменяет.

Вот сам триггер:

Код

create trigger Trigger1 BEFORE INSERT on table1 
for each row BEGIN
    DECLARE id INTEGER DEFAULT 0;
    SELECT table2.id INTO id FROM table2
    WHERE table2.name = new.name;
    IF id > 0 THEN SET new.name = id;
    ELSE INSERT INTO table2 (name) VALUE (new.name);
         SELECT table2.id INTO id FROM table2 
         WHERE table2.name = new.id;
         SET new.id = id;
    END IF;
END;


Но при проверке, т.е. когда заношу данные в таблицу tanble1, выдает следующее сообщение:

Error Code : 1172
Result consisted of more than one row
(0 ms taken)

Проверяю отдельно 

Код

SELECT table2.id INTO id FROM table2
WHERE table2.name = new.name;


Выдает только одно значение, как и должен.
Вот не знаю что оделать -


PM MAIL   Вверх
skyboy
Дата 31.10.2008, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(TimeKeeper @  31.10.2008,  10:57 Найти цитируемый пост)
Выдает только одно значение, как и должен.

потенциально запрос может вернуть несколько значений.
воспользуся агрегирующей функцией(min/max) или попробуй применить limit 1(в успехе использования последнего не уверен)

Добавлено через 39 секунд
кстати, проблема не в триггере. в ХП или даже при непосредственном выполнении запроса 
Цитата(TimeKeeper @  31.10.2008,  10:57 Найти цитируемый пост)
SELECT table2.id INTO id FROM table2 
         WHERE table2.name = new.id;

должна такая ошибка вываливаться...
PM MAIL   Вверх
TimeKeeper
Дата 1.11.2008, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 4.9.2008

Репутация: нет
Всего: нет



Всем спасибо, вопрос закрыт -)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.