Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не выполняется UPDATE / 8 сообщений из 8, страница 1 из 1
02.09.2016, 19:09
    #39302912
Не выполняется UPDATE
Добрый день.
Вроде бы простой запрос
Код: 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
02.09.2016, 19:12
    #39302915
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выполняется UPDATE
Сергей Жидков,

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

а на обеих таблицах точно триггеров нет?
...
Рейтинг: 0 / 0
05.09.2016, 08:46
    #39303576
Не выполняется UPDATE
Хотел было подтвердить, что триггеров нет, но взяло меня сомнение. В интерфейсе 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
05.09.2016, 11:30
    #39303696
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выполняется UPDATE
Сергей Жидков,

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

Код: 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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не выполняется UPDATE / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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