我不太明白MariaDB如何发挥作用。
我有一个以字符串作为输入的存储过程。我正在测试有效字符的字符串。如果找到无效字符,那么我想发送错误无效的信号。如果引发SIGNAL SQLSTATE '......' SET MESAGE_TEXT='......'
,存储过程是否会立即退出?或者它会在发出信号之前完成程序吗?
答案 0 :(得分:1)
仅使用IF...THEN
语句时,它似乎无效。
CREATE PROCEDURE `testP`()
BEGIN
IF testStringSecurity('he;llo world') != 0 THEN
SELECT 'INVALID CHARACTERS';
END IF;
SELECT 'GOOD TO GO';
END;
始终返回GOOD TO GO
。看来你必须像IF ... THEN ... ELSE
这样包装以获得有效的案例。虽然设置信号是不同的。
CREATE PROCEDURE `testP`()
BEGIN
IF testStringSecurity('he;llo') != 0 THEN
SELECT 'INVALID CHARACTERS';
ELSE
SELECT 'GOOD TO GO';
END IF;
END
使用SIGNAL
确实会立即中断执行。
CREATE PROCEDURE `testP`()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE,
@errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
SET @full_error = CONCAT("ERROR ", @errno, " (", @sqlstate, "): ", @text);
SELECT @full_error;
END;
DECLARE EXIT HANDLER FOR NOT FOUND
BEGIN
SELECT CONCAT('ERROR: ',@str,' RETRUNED NOT FOUND EXCEPTION.');
END;
IF testStringSecurity('he;llo') != 0 THEN
SIGNAL SQLSTATE '42000'
SET MESSAGE_TEXT = 'ERROR: Invalid string';
END IF;
SELECT 'GOOD TO GO';
END
返回'ERROR 1644 (42000): ERROR: Invalid string'