程序中的MySQL分号放置

问题描述 投票:0回答:2

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

mysql variables syntax phpmyadmin procedure
2个回答
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;

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
© www.soinside.com 2019 - 2024. All rights reserved.