2

有任何想法吗?我问了一个问题“是否可以为 mysql 存储过程设置默认参数?” 今天,答案是非常强烈的“不,这是不可能的”。

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

谢谢。

4

3 回答 3

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 | 
+-------------+
于 2009-06-12T00:17:08.167 回答
1

为 MySQL 6 安排了可选参数。

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

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

于 2009-06-11T23:56:35.313 回答
0

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

于 2009-06-11T23:55:14.647 回答