2012-12-08 43 views
1

我一直在MySQL中发出这个警告,并找不到原因。功能如下。MySQL - 没有数据 - 函数

Warning | 1329 | No data - zero rows fetched, selected, or processed 

功能:

CREATE FUNCTION CONTACT_INFO_EXISTS(
    hp VARCHAR(64), 
    wp VARCHAR(32), 
    mp VARCHAR(32), 
    f VARCHAR(32), 
    pe VARCHAR(64), 
    se VARCHAR(64), 
    c TIMESTAMP 
) 
RETURNS VARCHAR(36) 
READS SQL DATA 
BEGIN 
    DECLARE c_id CHAR(36); 

    SET c_id = NULL; 

    SELECT contact_infouuid INTO c_id FROM contact_info 
     WHERE (home_phone = hp OR hp IS NULL) 
      AND (work_phone = wp OR wp IS NULL) 
      AND (mobile_phone = mp OR mp IS NULL) 
      AND (fax = f OR f IS NULL) 
      AND (primary_email = pe OR pe IS NULL) 
      AND (secondary_email = se OR se IS NULL) 
      AND (last_updated = c OR c IS NULL) 
     LIMIT 1; 

    RETURN IF(c_id IS NOT NULL, c_id, '0'); 
END$$ 
+0

只是一个观察,SET C_ID = NULL;认为这是没有必要的。 – alditis

+0

评论:http://dev.mysql.com/doc/refman/5.0/en/declare-local-variable.html – alditis

+0

我知道,但它只是为了帮助我们的一些程序员保持清醒,他们只是学习SQL –

回答

0

试试这个:

CREATE FUNCTION CONTACT_INFO_EXISTS(
    hp VARCHAR(64), 
    wp VARCHAR(32), 
    mp VARCHAR(32), 
    f VARCHAR(32), 
    pe VARCHAR(64), 
    se VARCHAR(64), 
    c TIMESTAMP 
) 
RETURNS VARCHAR(36) 
READS SQL DATA 
BEGIN 
    DECLARE c_id CHAR(36); 

    SET c_id = NULL; 

    IF EXISTS (SELECT * FROM contact_info 
        WHERE (home_phone = hp OR hp IS NULL) 
         AND (work_phone = wp OR wp IS NULL) 
         AND (mobile_phone = mp OR mp IS NULL) 
         AND (fax = f OR f IS NULL) 
         AND (primary_email = pe OR pe IS NULL) 
         AND (secondary_email = se OR se IS NULL) 
         AND (last_updated = c OR c IS NULL)) THEN 
     SELECT contact_infouuid INTO c_id FROM contact_info 
       WHERE (home_phone = hp OR hp IS NULL) 
        AND (work_phone = wp OR wp IS NULL) 
        AND (mobile_phone = mp OR mp IS NULL) 
        AND (fax = f OR f IS NULL) 
        AND (primary_email = pe OR pe IS NULL) 
        AND (secondary_email = se OR se IS NULL) 
        AND (last_updated = c OR c IS NULL) 
       LIMIT 1; 
    END IF; 
    RETURN IF(c_id IS NOT NULL, c_id, '0'); 
END$$ 
+0

考虑到这个功能应该总是返回一些东西......我想我迷路了。 “检查存在”是什么意思? –