过程

时间:2016-04-13 03:24:11

标签: mysql variables syntax phpmyadmin procedure

我一段时间以来一直在研究某些代码,但我遇到了一些问题。我有两个相同的表 - 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,它允许我在代码之外将分隔符设置为//

2 个答案:

答案 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