Reputation: 43
i'am trying to create a Stored Procedure But Getting an error,can anyone tell what is Wrong in my code
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 ;
Upvotes: 1
Views: 40
Reputation: 780798
The following should work:
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 ;
You were missing the THEN
keywords in your IF
statements. And the SELECT
statements in the body of IF
need to end with ;
. You need to use a DELIMITER
statement first so that those inner ;
don't end the procedure.
You don't need BEGIN
and END
because IF
is a single statement.
And the test for both f_name
and l_name
being filled in needs to be first. Otherwise, it will just do the f_name
query.
Upvotes: 0
Reputation: 759
You can try this, mate:
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 ;
Upvotes: 1
Reputation: 4844
First and end to add delimiter. like this
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 ;
Upvotes: 0