任何想法?我今天问了"Is it possible to have a default parameter for a mysql stored procedure?"这个问题,答案是非常强烈的“不,这是不可能的。”
那我接下来的问题是你如何作为一个php / mysql开发人员处理这个问题?你传递null并且在SP中有一个IF块,如果它为null,它会设置变量吗?你在PHP中传递一个默认值吗?
感谢。
答案 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
值并让存储过程执行默认操作。