Допустим, у нас есть 2 таблицы: table1
с полями id(INT)
, name(VARCHAR)
и table2
с полями id(A_I, INT)
, id_from_t1(INT)
, vc_for_t2(VARCHAR)
.Возврат INT значение из 'SELECT' хранимой процедуры
Я хранимые процедуры:
DELIMITER $$
CREATE PROCEDURE `procedure_one`(IN `name_to_find` VARCHAR(45), IN `varchar_for_table2` VARCHAR(45))
BEGIN
SET @foundId = `function_two`(`name_to_find`);
CALL `procedure_three`(`varchar_for_table2`, @foundId);
END$$
CREATE FUNCTION `function_two`(`name_to_find` VARCHAR(45))
RETURNS INT(11)
BEGIN
DECLARE varResult INT(11);
DECLARE myCursor CURSOR FOR(
SELECT
`t1`.`id`
FROM table1 AS `t1`
WHERE `t1`.`name` = `name_to_find`
LIMIT 1);
OPEN myCursor;
FETCH myCursor INTO varResult;
RETURN varResult;
END$$
CREATE PROCEDURE `procedure_three`(IN `varchar_for_table2` VARCHAR(45), IN `id_from_table1` INT(11))
BEGIN
INSERT INTO `table2`(`vc_for_t2`, `id_from_t1`)
VALUES(`varchar_for_table2`, `id_from_table1`);
END$$
Так проблема заключается в function_two. Теперь им с помощью курсора, но, как я помню, там был более быстрым способом извлечения результирующего набора SELECT, но я не могу вспомнить, где я видел его ...
Я думаю, что ваш запрос прав. и он должен работать. Вы уже пробовали. –
@AnkitBajpai, no. Как я понимаю, результатом запроса является таблица с одной строкой и одним столбцом «id». Но мне нужно точное целочисленное значение, вероятно, должно быть похоже (абстрактный код) 'RETURN temp_table [1] ['id']', и там должно быть 'INTO temp_table' после оператора SELECT' – FiftyStars