0

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

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

4

1 回答 1

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

于 2012-12-07T23:05:52.900 回答