2015-07-10 2 views
1

Допустим, у нас есть 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, но я не могу вспомнить, где я видел его ...

+0

Я думаю, что ваш запрос прав. и он должен работать. Вы уже пробовали. –

+0

@AnkitBajpai, no. Как я понимаю, результатом запроса является таблица с одной строкой и одним столбцом «id». Но мне нужно точное целочисленное значение, вероятно, должно быть похоже (абстрактный код) 'RETURN temp_table [1] ['id']', и там должно быть 'INTO temp_table' после оператора SELECT' – FiftyStars

ответ

1

Вы можете попробовать это, а в вашем втором процессе пластической деформации

SELECT id = (SELECT `t1`.`id` 
      FROM table1 AS `t1` 
      WHERE `t1`.`name` = `name_to_find' 
      LIMIT 1;) 
+0

, он все равно возвращает одну строку и одна таблица столбцов. Правильно? – FiftyStars

+0

Я не думаю, что он вернет таблицу. теперь id должен возвращать только одно значение. –

Смежные вопросы