所以说我有一个用户定义的功能:
CREATE FUNCTION ADDRESS_EXISTS_FULL (
line_1 VARCHAR(64),
line_2 VARCHAR(64),
city VARCHAR(64),
state VARCHAR(32),
zip VARCHAR(10),
type INT(3)
)
RETURNS INT(1)
DETERMINISTIC
READS SQL DATA
BEGIN
DECLARE aid INT;
SET aid = NULL;
SELECT addressid INTO aid FROM dlp.address as a
WHERE a.line_1 = line_1
AND a.line_2 = line_2
AND a.city = city
AND a.state = state
AND a.zip = zip
AND a.address_type = type
LIMIT 1;
RETURN IF(aid IS NOT NULL, 1, 0);
END$$
如何制作以便其中一些不是必需的?比如说如果不需要类型,无论如何都要调用
SELECT ADDRESS_EXISTS_FULL(l1,l2,c, s, z)
还是会失败?我该如何使这个功能起作用?
感谢。
注意:我不需要存储此函数,它是一个关闭所以它在一个大的mysql脚本文件中。
答案 0 :(得分:0)
您可以将存储的函数体内的查询重写为
SELECT addressid INTO aid FROM dlp.address as a
WHERE (a.line_1 = p_line_1 OR p_line_1 IS NULL)
AND (a.line_2 = p_line_2 OR p_line_2 IS NULL)
--.... etc
LIMIT 1;
因此,如果您为特定参数传递null
,它将被忽略。此外,我建议避免命名参数与表中的字段完全相同 - 这可能会导致非常微妙的错误(在上面的查询中,我将'p_'添加到每个参数)。
最后,我不会将DETERMINISTIC
关键字用于本质上不确定的函数。