1
複数の行を返す私は、以下のストアドプロシージャを持っている:表が記録されていない場合はLAST INSERT 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;
、最初のインサートは罰金を通過します。 2番目の挿入時にそれが
エラーコードなどのエラーがスローされます:1242サブクエリは、私が最後に挿入IDを照会するとき、私は1つの以上の値を取得超える1行
に戻ります。そこで、手順の最後の部分を次のように変更しました。
@lid:=(寄付からmax(LAST_INSERT_ID()を選択);
同時挿入と今後のCRUD操作を妨げてはいけないので、これが問題なければ助言してください。前もって感謝します。
ありがとう、それは – Rajiv
うれしい、それはあなたの問題を解決:) – Arulkumar