How to know if insert query succeeded in stored proceedure?
mysql, sql, stored-procedures
Solution
As per MySQL documentation on `ROW_COUNT()`,
`ROW_COUNT()` returns the number of rows changed, deleted, or inserted by the last statement if it was an `UPDATE`, `DELETE`, or `INSERT`. For other statements, the value may not be meaningful
After `insert` statement you can read `row_count()` into `OUT` parameter `result`. Use the same `result` value in the calling program to let the user know the number of rows affected.
Change your procedure as follows:
DROP PROCEDURE IF EXISTS `create_player`;
delimiter //
CREATE PROCEDURE `create_player` (
firstName TEXT CHARACTER SET utf8,
lastName TEXT CHARACTER SET utf8,
username TEXT CHARACTER SET utf8,
password TEXT CHARACTER SET utf8,
email TEXT CHARACTER SET utf8,
gender ENUM('m','f'),
avatar INTEGER,
OUT result INTEGER )
BEGIN
DECLARE insertVal INTEGER DEFAULT 0;
INSERT INTO `Players`(
`PlayerFirstName`,
`PlayerLastName`,
`PlayerName`,
`PlayerPassword`,
`PlayerEmail`,
`PlayerGender`,
`PlayerAvatar`,
`PlayerJoinDate`)
VALUES (
firstName, lastName, username,
player_hash_password( password ),
email, gender, avatar, NOW() );
SELECT ROW_COUNT() INTO result;
END;
//
delimiter ;
Problem
I am writing a stored procedure to create a player: ``` CREATE PROCEDURE `create_player` ( firstName TEXT CHARACTER SET utf8, lastName TEXT CHARACTER SET utf8, username TEXT CHARACTER SET utf8, password TEXT CHARACTER SET utf8, email TEXT CHARACTER SET utf8, gender ENUM('m','f'), avatar INTEGER, OUT result INTEGER) BEGIN DECLARE insertVal INTEGER DEFAULT 0; INSERT INTO `Players` (`PlayerFirstName`, `PlayerLastName`, `PlayerName`, `PlayerPassword`, `PlayerEmail`, `PlayerGender`, `PlayerAvatar`, `PlayerJoinDate`) VALUES ( firstName,lastName,username,player_hash_password(password),email,gender,avatar,NOW()); END ``` Say I wanted to let the user know if this insert succeeded or not, how can I find out if it succeeded or not (number of rows affected). I tried to set an integer variable = to the insert statement but that did not work. What is the typical way of error checking for stored procedures?