尝试在 MySql 中创建存储过程但出现错误

Trying to create a stored procedure in MySql but getting an error

我正在尝试创建存储过程但出现错误,任何人都可以告诉我代码中有什么问题

DELIMITER //
        CREATE PROCEDURE search_contact_list(IN keyword varchar(255), IN key_country int(10),IN key_status int(10),IN key_religion varchar(100),IN acc_manager int(5),IN acc_position int(10))
        BEGIN
            SELECT contact.*,company.company_name,status.status_name,user.first_name as user_first_name,user.last_name as user_last_name,country.country_name

            FROM tbl_contact_master as contact 
            LEFT JOIN tbl_status_master as status ON status.status_id=contact.status_id 
            LEFT JOIN tbl_user_master as user ON user.login_id=contact.contact_owner_id 
            LEFT JOIN tbl_company_master as company ON company.company_id=contact.company_id
            LEFT JOIN tbl_country_master as country ON country.country_id=contact.country
            WHERE 
            CASE WHEN keyword IS NOT NULL THEN contact.first_name LIKE CONCAT('%', keyword ,'%' ) 
                    OR contact.last_name LIKE CONCAT('%', keyword ,'%' ) END
            AND CASE WHEN key_country IS NOT NULL THEN contact.country = key_country ELSE NULL END;
        END //
    DELIMITER ;

首尾加分隔符。像这样

DELIMITER //
    CREATE PROCEDURE new_pro
    (IN f_name VARCHAR(100),IN l_name VARCHAR(100))
    BEGIN
    IF (f_name != '')
     BEGIN
         SELECT * FROM tbl_contact_master
         WHERE first_name = f_name
     END
    ELSE IF (l_name != '')
     BEGIN
         SELECT * FROM tbl_contact_master
         WHERE last_name = l_name
     END
    ELSE IF (f_name != '' && l_name != '')
       BEGIN
         SELECT * FROM tbl_contact_master
         WHERE first_name = f_name AND last_name = l_name
       END
    END
    DELIMITER ;

你可以试试这个,伙计:

DELIMITER //
DROP PROCEDURE IF EXISTS new_pro //
CREATE PROCEDURE new_pro (
    IN f_name VARCHAR(100),
    IN l_name VARCHAR(100)
)
BEGIN
    CASE
        WHEN (f_name IS NOT NULL OR (f_name != '')) THEN
            SELECT * FROM tbl_contact_master WHERE first_name = f_name;
        WHEN (l_name IS NOT NULL OR (l_name != '')) THEN
            SELECT * FROM tbl_contact_master WHERE last_name = l_name;
        WHEN (
            (f_name IS NOT NULL OR (f_name != ''))
            AND (l_name IS NOT NULL OR (l_name != ''))
        ) THEN
            SELECT * FROM tbl_contact_master WHERE first_name = f_name AND last_name = l_name;  
    END CASE;
END //
DELIMITER ;

以下应该有效:

DELIMITER //
CREATE PROCEDURE new_pro
(IN f_name VARCHAR(100),IN l_name VARCHAR(100))
IF f_name != '' AND l_name != '' THEN
     SELECT * FROM tbl_contact_master
     WHERE first_name = f_name AND last_name = l_name;
ELSEIF f_name != '' THEN
     SELECT * FROM tbl_contact_master
     WHERE first_name = f_name;
ELSEIF l_name != '' THEN
     SELECT * FROM tbl_contact_master
     WHERE last_name = l_name;
END IF
//
DELIMITER ;

您的 IF 语句中缺少 THEN 关键字。并且 IF 正文中的 SELECT 语句需要以 ; 结尾。您需要先使用 DELIMITER 语句,以便那些内部 ; 不会结束该过程。

您不需要 BEGINEND,因为 IF 是单个语句。

并且 f_namel_name 的测试需要先填写。否则,它只会执行 f_name 查询。