In the procedure definition, you need to save all your IN/OUT variables.
Edit:
CREATE PROCEDURE `lms`.`leads_to_bak` ()
in
CREATE PROCEDURE `lms`.`leads_to_bak` ( IN table1 varchar(32), IN table2 varchar(32), )
Then call this:
CALL `lms`.`leads_to_bak`('table1', 'table2')
replacing the lines with yours.
The purpose of using stored procedures is to prevent SQL injection using strongly typed data. Technically, you donβt need to prepare it in a stored procedure if you ONLY send strongly typed input variables to the parameter list.
This way you process string operations before calling the stored procedure. Keep your saved props skinny!
Here is an example of one of my stored procedures:
DELIMITER ; DROP PROCEDURE IF EXISTS `save_player`; DELIMITER // CREATE PROCEDURE `save_player` ( IN uid int(15) UNSIGNED, IN email varchar(100), IN name varchar(100), IN passwd char(96), IN state ENUM('active','suspended','deleted'), IN user_role ENUM('gamemaster','moderator','player'), IN locale ENUM('en','fr'), IN lvl tinyint(1), IN hp bigint(20), IN reborn tinyint(1), IN cross_ref varchar(12), IN email_verified tinyint(1), OUT new_id int(15) UNSIGNED ) BEGIN DECLARE date_deleted timestamp DEFAULT NULL; IF uid > 0 AND EXISTS (SELECT id FROM user WHERE `id`= uid) THEN IF state = 'deleted' THEN SET date_deleted = CURRENT_TIMESTAMP; END IF ; UPDATE `user` SET `email` = email, `name` = name, `passwd` = passwd, `state` = state, `user_role` = user_role, `locale` = locale, `lvl` = lvl, `hp` = hp, `reborn` = reborn, `cross_ref` = cross_ref, `email_verified` = email_verified, `date_deleted` = date_deleted WHERE `id` = uid; SET new_id = uid; ELSE INSERT INTO user (`email`, `name`, `passwd`, `state`, `user_role`, `locale`, `lvl`, `hp`, `reborn`, `cross_ref`, `email_verified`, `date_created`) VALUES (email, name, passwd, state, user_role, locale, lvl, hp, reborn, cross_ref, email_verified, NOW()); SELECT LAST_INSERT_ID() INTO new_id; END IF; END // DELIMITER ;