如何知道在存储过程中插入查询是否成功?

jma*_*erx 1 mysql sql stored-procedures

我正在编写一个存储过程来创建一个播放器:

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
Run Code Online (Sandbox Code Playgroud)

假设我想让用户知道这个插入是否成功,我怎么知道它是否成功(受影响的行数)。我试图为插入语句设置一个整数变量 = 但这不起作用。

存储过程错误检查的典型方法是什么?

Rav*_*ddy 5

根据 MySQL 文档ROW_COUNT()

ROW_COUNT()如果最后一条语句是、 或UPDATE,则返回由最后一条语句更改、删除或插入的行数。对于其他语句,该值可能没有意义DELETEINSERT

insert语句之后,您可以读row_count()OUT参数resultresult在调用程序中使用相同的值让用户知道受影响的行数。

更改您的程序如下

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 ;
Run Code Online (Sandbox Code Playgroud)