[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ошибка при вызове процедуры
l@pteff
Здравствуйте, есть процедура, которая по имени товарной позиции возвращает название и id каталога, к которому относится товар.

create procedure catalog_by_prod (IN product TINYTEXT, OUT id_cat INT, OUT catalog TINYTEXT)
SELECT`id_cat`, `cat_name` INTO catalog FROM `products` JOIN `catalog` USING (`id_cat`) WHERE `prod_name`='product';
//


При вызове

CALL catalog_by_prod ('Celeron D 320 2.4GHz', id_cat, catalog)//
select id_cat, catalog//

выводится ошибка:
Цитата

#1414 - OUT or INOUT argument 2 for routine shop.catalog_by_prod is not a variable or NEW pseudo-variable in BEFORE trigger

в чем здесь может быть дело?



Спустя 4 часа, 15 минут, 15 секунд (12.10.2011 - 16:18) SlavaFr написал(а):
CALL catalog_by_prod ('Celeron D 320 2.4GHz', @id_cat, @catalog)

select @id_cat, @catalog

Спустя 1 день, 8 часов, 3 минуты, 42 секунды (14.10.2011 - 00:21) l@pteff написал(а):
Такая процедура работает:

delimiter //
CREATE procedure catalog_by_prod (IN product TINYTEXT, OUT catalog TINYTEXT)
SELECT `cat_name` INTO catalog FROM `products` JOIN `catalog` USING (`id_cat`)
WHERE `prod_name`= product; //
delimiter ;

Вызов:

CALL catalog_by_prod ('Celeron D 320 2.4GHz', @catalog);
select @catalog;


А такая, где нужно вернуть два значения, выдает ошибку:

delimiter //
CREATE procedure catalog_by_prod (IN product TINYTEXT, OUT id_cat INT, OUT catalog TINYTEXT)
SELECT `id_cat`, `cat_name` INTO catalog FROM `products` JOIN `catalog` USING (`id_cat`)
WHERE `prod_name`= product; //
delimiter ;


CALL catalog_by_prod ('D 320 2.4GHz', @id, @catalog);
select @id, @catalog;

Ошибка:
Цитата

#1222 - The used SELECT statements have a different number of columns

Как можно её исправить?

Спустя 12 часов, 50 минут, 59 секунд (14.10.2011 - 13:12) SlavaFr написал(а):
ну так он же тебе пишит, что ему не нравится.
та селектируеш 2 столба но пытаешся записать результат в одну переменную catalog.

Спустя 36 минут, 3 секунды (14.10.2011 - 13:48) l@pteff написал(а):
Если пишу запрос так:

SELECT `id_cat` INTO id_cat, `cat_name` INTO catalog FROM `products` JOIN `catalog` USING (`id_cat`)
WHERE `prod_name`= product;

выскакивает ошибка:
Цитата

Undeclared variable: cat_name

Неправильно написан запрос?

Спустя 7 часов, 2 минуты, 24 секунды (14.10.2011 - 20:51) l@pteff написал(а):
Сделал курсором, ошибок не выдаёт, но на выходе NULL. Вот использование курсора:

CREATE procedure catalog_by_prod (IN product TINYTEXT, OUT id_cat INT, OUT catalog TINYTEXT)
BEGIN
DECLARE product TINYINT;
DECLARE id_cat INT;
DECLARE catalog TINYINT;
DECLARE is_end INT DEFAULT 0;
DECLARE curcat CURSOR FOR SELECT `id_cat`, `cat_name` FROM `products` JOIN `catalog` using (`id_cat`) WHERE `prod_name`=product;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET is_end=1;
OPEN curcat;
wet: LOOP
FETCH curcat INTO id_cat, catalog;
IF is_end THEN LEAVE wet;
END IF;
END LOOP wet;
CLOSE curcat;
END//

При попытке вывести название и id каталога, к которому относится товар

CALL catalog_by_prod ('Celeron D 320 2.4GHz', @id, @catalog);
select @id, @catalog;

Вывод:
Цитата

@id  @catalog
NULL         NULL

Обычным запросом:

SELECT `id_cat`, `cat_name` FROM `products` JOIN `catalog` using (`id_cat`) WHERE `prod_name`='Celeron';

выводится правильно:
Цитата

id_cat  cat_name
3         Processors

Почему там NULL?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.