你如何处理Mysql SP无法使用默认参数的事实?

时间:2009-06-11 23:31:45

标签: php mysql stored-procedures default-value

任何想法?我今天问了"Is it possible to have a default parameter for a mysql stored procedure?"这个问题,答案是非常强烈的“不,这是不可能的。”

那我接下来的问题是你如何作为一个php / mysql开发人员处理这个问题?你传递null并且在SP中有一个IF块,如果它为null,它会设置变量吗?你在PHP中传递一个默认值吗?

感谢。

3 个答案:

答案 0 :(得分:4)

这是一个解决方案,使用COALESCE()设置存储过程中局部变量的值:

DELIMITER !!

CREATE PROCEDURE dflt (IN param1 INT)
BEGIN
 DECLARE param1_dflt INT DEFAULT 456
 SET param1_dflt = COALESCE(param1, param1_dflt);

 SELECT param1_dflt;
END!!

DELIMITER ;

CALL dflt(123);
+-------------+
| param1_dflt |
+-------------+
|         123 | 
+-------------+


CALL dflt(NULL);
+-------------+
| param1_dflt |
+-------------+
|         456 | 
+-------------+

答案 1 :(得分:1)

为MySQL 6安排了可选参数。

最简单的选择是编写一个添加默认值的包装器,或者为每种情况创建过程。

我会考虑您使用存储过程的原因。在绝大多数情况下,它们几乎没有什么好处,因为可以在应用层中执行抽象,并且减少网络流量通常是最不重要的。当然,这取决于您的应用程序。

答案 2 :(得分:0)

这应由数据库处理,而不是调用脚本。如果您无法定义默认参数,则传递NULL值并让存储过程执行默认操作。