我一段时间以来一直在研究某些代码,但我遇到了一些问题。我有两个相同的表 - History和Checked_Out_Media - 我试图在Checked_Out_Media中获取指定的记录并将其移至History表。主键不会自动递增,因此我必须为最大历史记录表ID创建一个变量并将其递增一个。
我认为我的代码大多是正确的,可能需要一些分号放置?你能看看吗?
Create Procedure spMoveToHistory( IN UserID char(6), IN MediaBarcode varchar(50) )
BEGIN
SELECT @NextRow := (MAX(History_TUID) + 1)
From History
Insert into History
Values (@NextRow, COM.User_ID, COM.Media_Barcode, COM.Checked_Out_Date, COM.Return_Date)
From Checked_Out_Media as COM
Where COM.User_ID = UserID
AND (COM.Media_Barcode = MediaBarcode)
END
另外,我使用PHPMyAdmin,它允许我在代码之外将分隔符设置为//
。
答案 0 :(得分:0)
您应该命名参数,以便可以将它们与列名区分开来。此外,您需要insert . . . select
:
Create Procedure spMoveToHistory (
IN in_UserID char(6),
IN in_MediaBarcode varchar(50)
)
BEGIN
SELECT @NextRow := (MAX(History_TUID) + 1)
From History;
Insert into History
Select @NextRow, COM.User_ID, COM.Media_Barcode, COM.Checked_Out_Date, COM.Return_Date
From Checked_Out_Media COM
Where COM.User_ID = in_UserID AND COM.Media_Barcode = in_MediaBarcode;
END;
答案 1 :(得分:0)
这是我能够开始工作的最终代码。出于某种原因,戈登提供的代码没有......没有。它没有插入或删除。我确信这是有充分理由的。我做了,但重写我的代码工作:
Create Procedure spMoveToHistory( IN in_UserID char(6), IN in_MediaBarcode char(3) )
BEGIN
SELECT @NextRow := (MAX(History_TUID) + 1)
From History;
SELECT @COM_UserID := (User_ID),
@COM_MediaBarcode := (Media_Barcode),
@COM_COD := (Check_Out_Date),
@COM_RD := (Return_Date)
From Checked_Out_Media
Where User_ID = in_UserID AND Media_Barcode = in_MediaBarcode;
INSERT Into history
VALUES(@NextRow, @COM_UserID, @COM_MediaBarcode, @COM_COD, @COM_RD);
DELETE From checked_out_media
Where User_ID = in_UserID AND Media_Barcode = in_MediaBarcode;
END