有任何想法吗?我问了一个问题“是否可以为 mysql 存储过程设置默认参数?” 今天,答案是非常强烈的“不,这是不可能的”。
那么我的下一个问题是,作为 php/mysql 开发人员,您如何处理这个问题?您是否传递 null 并且在 SP 中有一个 IF 块来设置变量是否为 null?你在 PHP 中传递一个默认值吗?
谢谢。
有任何想法吗?我问了一个问题“是否可以为 mysql 存储过程设置默认参数?” 今天,答案是非常强烈的“不,这是不可能的”。
那么我的下一个问题是,作为 php/mysql 开发人员,您如何处理这个问题?您是否传递 null 并且在 SP 中有一个 IF 块来设置变量是否为 null?你在 PHP 中传递一个默认值吗?
谢谢。
这是一种解决方案,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 |
+-------------+
为 MySQL 6 安排了可选参数。
您最简单的选择是编写一个添加默认值的包装器,或者为每种情况创建过程。
我会考虑您使用存储过程的理由。在绝大多数情况下,它们几乎没有什么好处,因为抽象可以在应用层执行,而减少网络流量通常是最不关心的问题。当然,这取决于您的应用程序。
这应该由数据库处理,而不是调用脚本。如果您无法定义默认参数,则传递NULL
值并让存储过程进行默认设置。