尝试在 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
语句,以便那些内部 ;
不会结束该过程。
您不需要 BEGIN
和 END
,因为 IF
是单个语句。
并且 f_name
和 l_name
的测试需要先填写。否则,它只会执行 f_name
查询。
我正在尝试创建存储过程但出现错误,任何人都可以告诉我代码中有什么问题
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
语句,以便那些内部 ;
不会结束该过程。
您不需要 BEGIN
和 END
,因为 IF
是单个语句。
并且 f_name
和 l_name
的测试需要先填写。否则,它只会执行 f_name
查询。