Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
ХРАНИМЫЕ ПРОЦЕДУМЫ В MySQL 5.0.15 (Алексей) 11/11/2005 - 13:24:25
      Re: ХРАНИМЫЕ ПРОЦЕДУМЫ В MySQL 5.0.15 (Dinky) 11/11/2005 - 19:12:51



From: Алексей - 11/11/2005 - 13:24:25
Subject:ХРАНИМЫЕ ПРОЦЕДУМЫ В MySQL 5.0.15
-----------------
Какая то фигня творится, процедура работает, напрмер такая:
CREATE PROCEDURE `sklad_spis`(_nakl_id_ INTEGER(11))
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT 'Ôóíêöèÿ ïðîèçâîäèò ñïèñàíèå íàêëàäíîé.'
BEGIN
DECLARE done INT DEFAULT 0;

DECLARE existId INT;

DECLARE artikul_id INT;
DECLARE section_id INT;

DECLARE rashod FLOAT DEFAULT 0;
DECLARE c_rashod INT DEFAULT 0;
DECLARE prihod FLOAT DEFAULT 0;
DECLARE c_prihod INT DEFAULT 0;
DECLARE total FLOAT SIGNED DEFAULT 0;

DECLARE artikul CURSOR FOR
SELECT dni.artikul_id, l.section
FROM docs_nakls_includes dni, list l
WHERE dni.nakl_id = _nakl_id_ AND l.id = dni.artikul_id;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

OPEN artikul;
REPEAT
FETCH artikul INTO artikul_id, section_id;

# Ïîëó÷àþ ÐÀÑÕÎÄ ïî ïîçèöèè
SELECT COUNT(*), SUM(dni.position) INTO c_rashod, rashod
FROM docs_nakls dn, docs_nakls_includes dni
WHERE dn.stage = 'S'
AND dni.nakl_id = dn.id
AND dni.artikul_id = artikul_id
AND dn.type = 'R';

# Ïîëó÷àþ ÏÐÈÕÎÄ ïî ïîçèöèè
SELECT COUNT(*), SUM(dni.position) INTO c_prihod, prihod
FROM docs_nakls dn, docs_nakls_includes dni
WHERE dn.stage = 'S'
AND dni.nakl_id = dn.id
AND dni.artikul_id = artikul_id
AND dn.type = 'P';

IF c_rashod = 0 THEN
SET rashod = 0;
END IF;

IF c_prihod = 0 THEN
SET prihod = 0;
END IF;

# Ðàñ÷èòûâàþ îñòàòîê
SET total = prihod - rashod;

# Ïðîâåðÿþ åñòü ëè çàïÿñü â òàâëèöå ïðåäâàðèòåëüíîãî ðàñ÷åòà
SELECT COUNT(*) INTO existId
FROM pre_calculation
WHERE artikul = artikul_id;

IF existId > 0 THEN

# Îáíîâëÿþ çíà÷åíèå ïîçèöèè (êîë-âî)
UPDATE pre_calculation
SET `value` = total
WHERE id = artikul_id;
ELSE
# Äîáàâëÿþ íîâóþ çàïèñü
INSERT INTO pre_calculation
( `section`, `artikul`, `value` )
VALUES
( `section_id`, `artikul_id`, total );
END IF;

UNTIL done END REPEAT;
CLOSE artikul;
END;

Но если я хочу сделать UPDATE или INSERT происходит ошибка, может запрос надо не просто писать а используя какой-то оперетор, хотя когда я делаю UPDATE или INSERT в цикле, то все работает отлично!


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
25028



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |