禁止对 MySQL/MariaDB 中的存储过程使用 NULL 参数

Dis*_*ame 2 mysql stored-procedures stored-functions mariadb

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

pet*_*erm 5

您需要自己验证传递的参数值。如果您使用的是 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 ;
Run Code Online (Sandbox Code Playgroud)

这是一个SQLFiddle演示

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