我查看了这里的帖子和mysql手册,得到了部分答案。
问:我有一些可能导致错误的查询,我想处理它们,并有一个消息,说明发生的第一个错误+行号+回滚(如果有错误)。
我的答案是:
返回代码和错误消息。
如果出现错误,则回滚所有查询。
我没有答案的那部分
第一个错误(代码返回最后一个错误)。
行号。
我知道代码中有一些错误,因为我从一个站点得到了每个部分,并将它们混合在一起
代码:
DELIMITER $$
CREATE PROCEDURE prod()
BEGIN
DECLARE is_rolback BOOL DEFAULT 0;
DECLARE resultError TEXT;
DECLARE errorCode CHAR(5) DEFAULT '00000';
DECLARE errorMsg TEXT;
DECLARE ErrorRows INT;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
errorCode = RETURNED_SQLSTATE, errorMsg = MESSAGE_TEXT;
SET is_rolback = 1;
END;
START TRANSACTION;
SET autocommit = 0;
-- The codes for checking the errors possible
-- Start
insert into table1 values (2, 'B'); -- Correct
insert into table1 values (1, 'A'); -- Error id 1 is already in database;
insert into table1 values ('C'); -- Error should pass also the ID
-- End
IF is_rolback THEN
ROLLBACK;
GET DIAGNOSTICS ErrorRows = ROW_COUNT;
SET resultError = CONCAT('Failed, error = ',errorCode,', line = ', ErrorRows, ', message = ',errorMsg);
select resultError;
select * from table1;
ELSE
COMMIT;
END IF;
END$$
DELIMITER ;
CALL prod();
DROP PROCEDURE IF EXISTS prod;
输出:
Failed, error = 21S01, line = 0, message = Column count doesn't match value count at row 1
id name
1 A
暂无答案!
目前还没有任何答案,快来回答吧!