Задавайте вопросы, мы ответим
Вы не зашли.
Нашел как дерево посадить, а в мускуле хп процедурами особо не пользовался
Помогите перевести процедуру в правильный синтаксис под MySQL, очень нужно
Отредактированно FreeRadio (09.09.2008 14:59:26)
Неактивен
Ну если вас интересует только синтаксис, то вот:
Неактивен
не подходит, пишет ошибка синтаксиса.
вот что ввожу
CREATE TABLE `bd_tema` ( `ID_TEMA` int(11) NOT NULL auto_increment, `PARENT` int(11) NOT NULL default '0', `LINE` tinytext NOT NULL, `CODE` varchar(100) NOT NULL default '', `lb` int(11) NOT NULL, `rb` int(11) NOT NULL, PRIMARY KEY (`ID_TEMA`), FOREIGN KEY (`PARENT`) REFERENCES bd_tema (`ID_TEMA`) ON UPDATE CASCADE ON DELETE CASCADE, CHECK (lb <= rb) ); CREATE FUNCTION EL_TEMA ( pparent INTEGER, DELTA INTEGER, LB2 INTEGER, RB2 INTEGER) RETURNS INTEGER BEGIN DECLARE R INTEGER; DECLARE L INTEGER; DECLARE R2 INTEGER; DECLARE MKey INTEGER; DECLARE MultiDelta INTEGER; SELECT t.rb, t.lb INTO R, L FROM bd_tema t WHERE ID_TEMA= pparent; SET R2 = NULL; SELECT MAX(rb) INTO R2 FROM bd_tema WHERE PARENT = pparent; IF R2 IS NULL THEN SET R2 = L; END IF; IF R - R2 < Delta THEN BEGIN SET MultiDelta = R - L + 100; IF (Delta > MultiDelta) THEN SET MultiDelta = Delta; END IF; IF (LB2 > -1) THEN UPDATE bd_tema SET rb = rb + MultiDelta WHERE lb <= L AND rb >= R AND NOT (lb >= LB2 AND rb <= RB2); ELSE UPDATE bd_tema SET rb = rb + MultiDelta WHERE lb <= L AND rb >= R; END IF; IF (LB2 > -1) THEN UPDATE bd_tema SET lb = lb + MultiDelta, rb = rb + MultiDelta WHERE lb > R AND NOT (lb >= LB2 AND rb <= RB2); ELSE UPDATE bd_tema SET lb = lb + MultiDelta, rb = rb + MultiDelta WHERE lb > R; END IF; END; END IF; RETURN R2 + 1; END;
ссылка на источник
Отредактированно FreeRadio (11.09.2008 11:05:51)
Неактивен
"Ошибка синтаксиса" - понятие растяжимое. Можете написать то, что конкретно
написано в ошибке?
В данном куске, например, не хватает разделителей правильных
DELIMITER ;;
CREATE TABLE .... ;;
CREATE FUNCTION ... ;;
DELIMITER ;
Неактивен
незнаю, и на нем сразу же ошибка:
[1064]: 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 'DELIMITER' at line 1
запрос:
DELIMITER ;;
стоит MySQL 5.2 может из-за версии
Неактивен
а какой клиент используете? Попробуйте из консоли mysql все это выполнить.
Неактивен
использую libmysql.dll и API функции из Delphi. в консоли выполняется без проблем, спасибо, но проблема все равно не решена. думал библиотека устаревшая, скопировал ту что с мускулом была, все равно та же ситуация.
Неактивен
DELIMITER - функция консоли, если работаете с библиотекой, то если она поддерживает создание хранимых процедур, то выполняйте просто запрос без ;; на конце.
Неактивен
Спасибо, теперь все ясно)
Неактивен
похоже что дерево как в статье реализовать не получится, там в update триггере замыкание на самом себе. похоже единственный вариант сделать отдельные процедуры на добавление и удаление узлов.
Неактивен