2012-01-27 7 views
1

Я запускаю хранимую процедуру. Кажется, проблема заключается в том, что она войдет в инструкцию if. Также по тем или иным причинам, независимо от того, сколько выборок я использую, оно вернет только первое. Я скопировал это из другой хранимой процедуры, которая работает как шарм, но этого просто не будет. Есть идеи?Mysql хранимые процедуры множественные выборки

DROP PROCEDURE IF EXISTS genSelPriceTier; 
DELIMITER $$ 
CREATE PROCEDURE genSelPriceTier(tier_id INT, default_id INT) 
    BEGIN 
     DECLARE rowCount INT DEFAULT 0; 
      SELECT * FROM price_tier WHERE price_tier_id = tier_id; 
      SET rowCount = FOUND_ROWS(); 
     IF rowCount < 1 THEN 
      SELECT * FROM price_tier WHERE price_tier_id = default_id; 
      END IF; 
    END$$ 
DELIMITER ; 

ответ

1

Существует bug сообщил, связанные с использованием FOUND_ROWS(). Поэтому я рекомендую использовать Count (*) для числа возвращаемых строк. Что-то вроде следующего должно работать.

DROP PROCEDURE IF EXISTS genSelPriceTier; 
DELIMITER $$ 
CREATE PROCEDURE genSelPriceTier(tier_id INT, default_id INT) 
    BEGIN 
     DECLARE rowCount INT DEFAULT 0; 
      SELECT COUNT(*) INTO rowCount FROM price_tier WHERE price_tier_id = tier_id 
     IF rowCount < 1 THEN 
      SELECT * FROM price_tier WHERE price_tier_id = default_id; 
      END IF; 
    END$$ 
DELIMITER ; 
+0

Да certianly менее 1 или rowCount = 0 будет работать, но, к сожалению, этот ответ не работает. Очень озадачен –

+0

Нет ошибки, она просто не входит в оператор If и возвращает второй выбор, если ничего не найдено в первом выборе, например. если rowCount возвращает значение меньше 1 –

+0

Если посмотреть на него больше, оно должно возвращать значение, превышающее 1 в найденных строках. У меня только 2 реконструированных в DB id 1 и 2 соответственно. поэтому, если я пройду (0,2), я должен вернуть запись 2 по умолчанию, но это не –