mysql可选变量函数

时间:2012-12-07 22:55:37

标签: mysql function parameters optional

所以说我有一个用户定义的功能:

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脚本文件中。

1 个答案:

答案 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关键字用于本质上不确定的函数。