powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не выполняется UPDATE
8 сообщений из 8, страница 1 из 1
Не выполняется UPDATE
    #39302912
Добрый день.
Вроде бы простой запрос
Код: sql
1.
2.
3.
4.
UPDATE document a
    INNER JOIN workshift b 
        ON a.workshiftid = b.workshiftid 
    SET a.identifier=b.shiftnum


дает ошибку
Error Code : 1442
Can't update table 'workshift' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
И так пробовал
Код: sql
1.
2.
UPDATE document,workshift SET document.identifier=workshift.shiftnum
WHERE document.workshiftid = workshift.workshiftid;


ошибка одна и та же. Ни триггеров ни хранимых процедур, вроде, нет.
...
Рейтинг: 0 / 0
Не выполняется UPDATE
    #39302915
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Жидков,

А где выполняется этот UPDATE? Не в триггере ли?
...
Рейтинг: 0 / 0
Не выполняется UPDATE
    #39302965
Открыл базу данных в SQLYog и пишу запрос.
...
Рейтинг: 0 / 0
Не выполняется UPDATE
    #39303011
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Жидков,

а на обеих таблицах точно триггеров нет?
...
Рейтинг: 0 / 0
Не выполняется UPDATE
    #39303576
Хотел было подтвердить, что триггеров нет, но взяло меня сомнение. В интерфейсе SQLYoga ни одного триггера не видно. В дампе, который он делает, тоже ни разу это слово не встречается. Но в дампе, который делается непосредственно на компе с базой (это касса) средствами mysqldump есть в тексте триггеры, но закомментированные. Этот как раз мог бы мешать

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `triggerAfterUpdate` AFTER UPDATE ON `document`
FOR EACH ROW BEGIN
    SET @oldfactor:=(SELECT moneyfactor FROM documenttype WHERE doctype = old.doctype);
    SET @newfactor:=(SELECT moneyfactor FROM documenttype WHERE doctype = new.doctype);
    SET @oldsumb=0;
    SET @oldsumcash=0;
    SET @newsumb=0;
    SET @newsumcash=0;

    IF old.closed = 1
    THEN
       SET @oldsumb=old.sumb;
       SET @oldsumcash=@oldfactor * old.sumcash;
    END IF;
    
    IF new.closed = 1 
    THEN
       SET @newsumb=new.sumb;
       SET @newsumcash=@newfactor * new.sumcash;
    END IF;

    UPDATE workshift 
    SET sumsale = COALESCE(sumsale, 0) + IF(new.doctype = 1, -@oldsumb + @newsumb, 0),
        sumgain = COALESCE(sumgain, 0) + IF(new.doctype IN (1, 2, 25), -@oldsumb + @newsumb, 0),
        sumdrawer = COALESCE(sumdrawer, 0) - @oldsumcash + @newsumcash
    WHERE workshiftid = new.workshiftid;
END */;;
DELIMITER ;     



И я так и не понял он есть или не есть. Я в этом деле новичок.
...
Рейтинг: 0 / 0
Не выполняется UPDATE
    #39303696
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Жидков,

триггер есть. /*!50003 - комментарий по стандарту, но не совсем комментарий для mysql. Mysql такое интерпретирует как проверку версии, если версия старше указанного числа (в более привычной трактовке это 5.0.3) - то это не комментарий, а исполняемый фрагмент. Если младше - то это комментарий и блок игнорируется.
http://dev.mysql.com/doc/refman/5.7/en/comments.html
...
Рейтинг: 0 / 0
Не выполняется UPDATE
    #39303736
Спасибо за разъяснение. И как мне теперь вырулить? Надо сделать одноразовое изменение данных.
...
Рейтинг: 0 / 0
Не выполняется UPDATE
    #39303957
Короче наваял вот чего. Удалил триггер, запустил апдейт, и создал триггер выдрав его кусок из исходного дампа базы.
Подтвердите кто-нибудь, верно ли я сделал?
Не всплывет что-то неучтенное?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
drop trigger IF EXISTS triggerAfterUpdate;
        
SET @shopnumber='100100001';
SET @cashnumber='1001000014';

UPDATE document,workshift SET document.identifier=CONCAT(
    @shopnumber,
    @cashnumber,
    RIGHT(CONCAT("0000",workshift.shiftnum),4),
    RIGHT(CONCAT("0000000",document.checknum),7)), document.cashcode=@cashnumber
WHERE document.workshiftid = workshift.workshiftid;

DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `triggerAfterUpdate` AFTER UPDATE ON `document`
FOR EACH ROW BEGIN
    SET @oldfactor:=(SELECT moneyfactor FROM documenttype WHERE doctype = old.doctype);
    SET @newfactor:=(SELECT moneyfactor FROM documenttype WHERE doctype = new.doctype);
    SET @oldsumb=0;
    SET @oldsumcash=0;
    SET @newsumb=0;
    SET @newsumcash=0;

    IF old.closed = 1
    THEN
       SET @oldsumb=old.sumb;
       SET @oldsumcash=@oldfactor * old.sumcash;
    END IF;

    IF new.closed = 1
    THEN
       SET @newsumb=new.sumb;
       SET @newsumcash=@newfactor * new.sumcash;
    END IF;

    UPDATE workshift
    SET sumsale = COALESCE(sumsale, 0) + IF(new.doctype = 1, -@oldsumb + @newsumb, 0),
        sumgain = COALESCE(sumgain, 0) + IF(new.doctype IN (1, 2, 25), -@oldsumb + @newsumb, 0),
        sumdrawer = COALESCE(sumdrawer, 0) - @oldsumcash + @newsumcash
    WHERE workshiftid = new.workshiftid;
END */;;
DELIMITER ;   
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не выполняется UPDATE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]