我在mysql数据库中编写了一个存储过程,如下所示:
CREATE PROCEDURE sp_Test(
IN Mode VARCHAR(50),
IN UserID INT,
....
....
)
BEGIN
SET @sqlQuery = "";
IF (Mode = 'Select') THEN
//Select query
ELSEIF (Mode = 'Update') THEN
//update query
ELSEIF (Mode = 'Delete') THEN
//Delete query
END
END
根据我的需要,我可以这样称呼它
CALL sp_Test("Select", 1, ...)
OR
CALL sp_Test("Update", 1, ...)
OR
CALL sp_Test("Delete", 1, ...)
性能还可以吗?或者我应该为每个模式编写单独的存储过程,如
用于SELECT
CREATE PROCEDURE sp_Test_Select(
IN UserID INT,
....
....
)
BEGIN
//Select query
END
for UPDATE
CREATE PROCEDURE sp_Test_Update(
IN UserID INT,
....
....
)
BEGIN
//Select query
END
答案 0 :(得分:0)
在我看来,这些程序的性能没有显着差异(除非您每秒24x7每秒使用它们数百次)。
但可读性存在差异。这是一个显着的差异。 test_DELETE(item)
比test("delete", item)
更容易理解。请记住,您不仅要为机器编写代码,还要为将要处理项目的下一个人编写代码。使用你的第二种选择。
答案 1 :(得分:0)
除了性能限制(如果有的话);始终建议为单独的操作(select
/ insert
/ update
/ delete
)定义单独的过程,因为
它增加了可重复性。
- 醇>
可维护性。如果将来需要做任何改变,可以很好地保持单独的程序。
考虑一下,为不同的操作传递参数。对于select
,您很可能不需要将任何参数传递给该过程,但对于insert
,update
和delete
,您必须传递参数。在单个程序体内区分它们不会是一团糟吗?