2016-05-18 4 views
1

У меня ниже хранимые процедуры:ПОСЛЕДНИХ ВСТАВИТЬ ID SQL подзапрос возвращает более одной строки

DELIMITER $$ 
    DROP PROCEDURE IF EXISTS spCashDonation$$ 
    CREATE PROCEDURE spCashDonation(IN fname varchar(50),IN lname varchar(50),IN telNo bigint, IN pmode tinyint,IN amt decimal(8,2), OUT rno varchar(20)) 
    BEGIN 
    Set @rmain := (select trim(concat('DNB', DATE_FORMAT(CURRENT_DATE(), '%y'), DATE_FORMAT(CURRENT_DATE(), '%m')))); 

    IF ((trim(DATE_FORMAT(CURRENT_DATE(),'%m')) = 01) OR (trim(DATE_FORMAT(CURRENT_DATE(),'%m')) = 1)) THEN 
    Set @rpart = 1; 
END IF; 

IF ((trim(DATE_FORMAT(CURRENT_DATE(),'%m')) != 01) OR (trim(DATE_FORMAT(CURRENT_DATE(),'%m')) != 1)) THEN 
    Set @rpart := (select coalesce(max(ReceiptPart),0) from Donation) + 1; 
END IF; 

INSERT INTO Donation (ReceiptMain, ReceiptPart, firstName, lastName, telNo, payMode, Amount) VALUES (@rmain, @rpart, fname, lname, telNo, pmode, amt); 

Set @lid := (select LAST_INSERT_ID()from donation); 
select concat(ReceiptMain,ReceiptPart) into rno from donation where id = @lid; 

END$$ 
DELIMITER ; 

Call spCashDonation ('RAJIV','IYER',7506033048,0,1000,@rno); 
select @rno; 

Когда таблица не имеет никаких записей, первая вставка идет через штраф. На второй вставке он выдает ошибку, как код

Ошибка: 1242. Subquery возвращает более 1 ряд

Когда я запрашиваю для последней вставки идентификатора, я получаю больше, чем 1 значение. Таким образом, я изменил последнюю часть процедуры на:

Set @lid: = (выберите пожертвование (LAST_INSERT_ID());

Прошу совета, если это нормально, так как это не должно препятствовать одновременным вставкам и будущим операциям CRUD. Заранее спасибо.

ответ

0
Set @lid := (select LAST_INSERT_ID() from donation); 

В приведенной выше строке удалите заявление FROM. Если более чем одна запись в таблице пожертвований, она вернет то же количество раз значение LAST_INSERT_ID().

Просто используйте Set @lid := (SELECT LAST_INSERT_ID());, он будет работать в вашем случае.

+0

Спасибо, это работает – Rajiv

+0

Рад, это решило вашу проблему :) – Arulkumar

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