我一直在研究一些代码,但是我遇到了一些问题。我有两个相同的表 - History和Checked_Out_Media - 我正在尝试在Checked_Out_Media中获取指定记录并将其移至History表。主键不会自动递增,因此我必须为最大历史表ID创建一个变量并将其递增1。
我想我的代码大多是正确的,可能需要一些分号放置?你能看看吗?
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,它允许我在代码之外将分隔符设置为//
。
您应该为参数命名,以便可以将它们与列名称区分开来。另外,你想要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;
这是我能够开始工作的最终代码。出于某种原因,戈登提供的代码没有......没有。它没有插入或删除。我确信这是有充分理由的。我做了,但重写我的代码工作:
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