|
|
|
| Доброе утро)
имеем mysql v. 5.0.45
есть нехитрая процедурка:
CREATE DEFINER=`user`@`localhost` PROCEDURE `SaveKP`(IN poligonName TEXT, IN x_c int, IN y_c int, IN x_m int, IN y_m int)
BEGIN
declare id_poligon, id_kp int;
set id_poligon = -1;
set id_kp = 0;
select ID into id_poligon from Poligon where name = poligonName;
Select id_poligon,id_kp;
select COUNT(ID) into id_kp from KP where ID_Poligon = id_poligon;
Select id_poligon,id_kp;
if id_kp>0 then
update KP Set x_cur = x_c, y_cur = y_c, x_map = x_m, y_map = y_m where ID_Poligon = id_poligon;
else
insert into KP(ID_Poligon, x_cur, y_cur, x_map, y_map) Values(id_poligon, x_c,y_c,x_m,y_m);
end if;
END
|
суть ее в том, что она должна проверить, есть ли запись в таблице с таким-то ID, если есть, то произвести update, иначе - insert...
все вроде замечательно, если не одно НО.
пока в таблице KP нет записей запрос в процедуре "select COUNT(ID) into id_kp from KP where ID_Poligon = id_poligon;"
возвращает 0, как только записей становиться больше, то id_kp =1;
если все вручную делать, т.е.
select ID into id_poligon from Poligon where name = 'test2' (вернет 46)
|
select COUNT(ID) into id_kp from KP where ID_Poligon = 46 (вернет 0)
|
то получается все верно... а вот в процедуре фигня какая-то.
пробовал через
if exists (Select ID from KP where ID_Poligon = id_poligon)
|
тоже саме.
прошу Вашей помощи. спасибо | |
|
|
|
|
|
|
|
для: HardCore_Solder
(14.05.2008 в 10:05)
| | Не очень понятно, в чём проблема, что не так работает? | |
|
|
|
|
|
|
|
для: cheops
(14.05.2008 в 10:57)
| | не верно записывается результат в перменную id_kp.
в процедуре, если количество записей в таблице KP больше 0, то id_kp будет равен всегда 1.
если смотреть вручную запросом, то возвращается значение 0.
я тут поколдовал немного и после изменении id_poligon на @id_poligon. процедура стала работать корректно...
в чем разница в вызове id_poligon и @id_poligon я так и не понял? | |
|
|
|