MySQL/MariaDB 中的存储过程不允许使用 NULL 参数

Posted

技术标签:

【中文标题】MySQL/MariaDB 中的存储过程不允许使用 NULL 参数【英文标题】:Disallow NULL parameters to stored procedures in MySQL/MariaDB 【发布时间】:2015-08-16 21:36:25 【问题描述】:

我可以指定表列不为空,但是如何使存储过程或函数只与非空参数兼容?在参数名称后添加 NOT NULL 不起作用。

【问题讨论】:

@peterm 你是完全正确的,我错过了,并删除了我的评论。 【参考方案1】:

您需要自己验证传递的参数值。如果您使用的是 mysql 5.5 及更高版本,则可以使用SIGNAL

DELIMITER //
CREATE PROCEDURE my_procedure (IN param1 INT)
BEGIN
  IF param1 IS NULL THEN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'NULL is not allowed.';
  END IF;
  -- do whatever 
END//
DELIMITER ;

这是一个SQLFiddle演示

【讨论】:

谢谢。太糟糕了,没有更有效的方法可以做到这一点,因为当您必须为所有非空参数执行此操作时,这会给代码增加很多麻烦。

以上是关于MySQL/MariaDB 中的存储过程不允许使用 NULL 参数的主要内容,如果未能解决你的问题,请参考以下文章

将 SQL Server 存储过程重写为 MySQL(MariaDB)

仅在 MySQL / MariaDB 中将命令限制为过程

MySQL/MariaDB---查询缓存与存储引擎

MySQL / MariaDB 不区分大小写的排序规则仍然区分大小写吗?

SQL Server 2005 中的内置数据库角色允许执行存储过程?

如何从 MySQL/MariaDB 中的二进制列格式化 uuid 字符串