2013-05-09 5 views
1

Я пытаюсь получить следующий доступный идентификатор с помощью хранимой процедуры, но до сих пор я не могу заставить это работать. Это моя хранимая процедураРезультат состоял из более чем одной ошибки строки mysql

DELIMITER $$ 

USE `devt`$$ 

DROP PROCEDURE IF EXISTS `updateid`$$ 

CREATE DEFINER=`root`@`%` PROCEDURE `updateid`(IN `tran_id` VARCHAR(15), IN `typ` VARCHAR(15), OUT `lid` VARCHAR(15)) 
BEGIN 
DECLARE id VARCHAR(15); 
SET id = ''; 
SELECT TranID FROM journal WHERE TranID = tranid INTO id; 
read_loop: LOOP 
      SELECT TranID FROM journal WHERE TranID = id INTO id; 
    IF id = tran_id THEN 
     UPDATE journaltype SET journaltype.NextRefNbr = journaltype.NextRefNbr + 1 WHERE journaltype.JournalType = typ; 
     SELECT journaltype.NextRefNbr FROM journaltype WHERE journaltype.JournalType = typ INTO id; 
     ITERATE read_loop; 
    ELSE 
     SET lid= id; 
     LEAVE read_loop; 
    END IF; 
END LOOP; 
END$$ 

DELIMITER ;**strong text** 

, когда я запустить ВЫЗОВ запрос UpdateID («17000001», «GJ», @test) я получаю результат ошибки состояла из более чем одной строки

ответ

3

Эта ошибка, вероятно, означает что у вас есть несколько записей с одинаковыми TranID в таблице journal или несколько записей с одинаковыми JournalType в таблице journaltype.

При использовании синтаксиса SELECT...INTO... вы должны быть уверены, что возвращенный набор результатов будет не состоят из нескольких строк.

+1

Im довольно уверен, что значение, которое будет извлечено, - это всего лишь одна запись. колонка tranid - это уникальный ключ. То же самое относится к типу – John

+0

Вы пытались запустить операторы 'SELECT' вручную? (и без' INTO'-part) и посмотреть, что возвращается? – gkalpak

+1

yup. он возвратил одно значение. – John