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

Форум MySQL

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

 

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

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

тема: Проблама с trigger ами в MySQL, Не получается создать триггер.
 
 автор: nutt   (18.04.2007 в 10:02)   письмо автору
 
 

У меня проблема. Не могу создать следующий триггер:


CREATE TRIGGER NodeInsert ON Node FOR insert AS
BEGIN
set nocount on

insert into Tree(NodeId, ParentId, Level)
select NodeId, NodeId, 0
from inserted

insert into Tree(NodeId, ParentId, Level)
select n.NodeId, t.ParentId, t.Level + 1
from inserted n, Tree t
where n.ParentId = t.NodeId
END


При создании выдает ошибку:"У вас синтаксич ошибка, проверьте в мануале , ошибка около 'ON'"


Пробывал создать на 5.0 и 5.2 версиях mysql. ни как. Также пытался использовать в Postgre... так же безуспешно. Помогите решить вопрос.

Заранее благодарен.

   
 
 автор: cheops   (18.04.2007 в 13:25)   письмо автору
 
   для: nutt   (18.04.2007 в 10:02)
 

У вас нет ни одной точки с запятой... это неправильно... обычно клиенты используют точку с запятой для разделения запросов и "режут" триггер на части. Для обхода такой ситуации необходимо если вы работаете в консольном клиенте переопределить разделитель. Т.е.,например, вместо ; использовать //. Для этого используется команда DELIMITER
DELIMITER //
CREATE TRIGGER NodeInsert ON Node FOR insert AS 
BEGIN 
set nocount on;

insert into Tree(NodeId, ParentId, Level) 
select NodeId, NodeId, 0 
from inserted ;

insert into Tree(NodeId, ParentId, Level) 
select n.NodeId, t.ParentId, t.Level + 1 
from inserted n, Tree t 
where n.ParentId = t.NodeId ;
END //

   
 
 автор: nutt   (18.04.2007 в 23:55)   письмо автору
 
   для: cheops   (18.04.2007 в 13:25)
 

Всервно безуспешно...

   
 
 автор: cheops   (19.04.2007 в 03:19)   письмо автору
 
   для: nutt   (18.04.2007 в 23:55)
 

А триггер откуда взяли? Дело в том, что конструкции "ON Node FOR insert AS" и "set nocount on" явно не из MySQL и их следует заменить... вы к какому событию хотите привязать триггер и что он должен делать?

   
 
 автор: nutt   (19.04.2007 в 22:13)   письмо автору
 
   для: cheops   (19.04.2007 в 03:19)
 

Ммм... да вы правы... я прочитал стстью про построение деревьев... там в качетсве примера использовали MS SQL Server... Вот я и маюсь теперь как сделать на mysql... =(

Вот статья.

   
 
 автор: cheops   (18.04.2007 в 13:26)   письмо автору
 
   для: nutt   (18.04.2007 в 10:02)
 

Если используется phpMyAdmin, то следует использовать последние версии, которые, также позволяют переопределить разделитель запросов.

   
 
 автор: nutt   (05.05.2007 в 08:29)   письмо автору
 
   для: cheops   (18.04.2007 в 13:26)
 

Но теперь стоит вопрос с переделываением запрса, дело в том, что в MSSQL можно использовать конструкцию select при insert:

insert into Tree(NodeId, ParentId, Level)
select n.NodeId, t.ParentId, t.Level + 1
from inserted n, Tree t
where n.ParentId = t.NodeId

Сдесь идея в том чтобы вставить в таблицу Tree значения NodeId, ParentId, Level. При этом идет выборка этих значений из только что вставленных и из таблицы tree с условием что ParentId из новых будет равен NodeId из таблицы tree.

MsSQL вроде все просто. Но как в мускле? Подскажите ваши варианты...

   
 
 автор: cheops   (05.05.2007 в 13:53)   письмо автору
 
   для: nutt   (05.05.2007 в 08:29)
 

В MySQL такой запрос тоже имеет место быть... в принципе всё должно работать
insert into Tree(NodeId, ParentId, Level)
select n.NodeId, t.ParentId, t.Level + 1
from inserted as n, Tree as t
where n.ParentId = t.NodeId

Если не работает сообщите пожалуйста какую ошибку выдаёт MySQL-сервер?

   
Rambler's Top100
вверх

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