我有一個MySQL數據庫和一堆存儲過程。如果子查詢失敗,可以讓MySQL成功嗎?如果子查詢成功,我可以失敗嗎?
我有一個測試SQL文件,它調用存儲過程來檢查它們在樣本數據上是否成功,並使用示例記錄填充測試數據庫。
我也想有一組語句其中,在僞代碼,將
SELECT (CALL SomeProc('invalid argument') EMITS ERROR) AS SomeProcCheck;
在這個假想的例子,SomeProc寫成
CREATE STORED PROCEDURE SomeProc (arg TEXT)
BEGIN
IF (IsNotValid(arg))
THEN
SIGNAL SQLSTATE '45000';
END IF;
INSERT INTO Foo (...);
END
我希望我的測試數據庫初始化腳本來驗證失敗分支在正確的情況下被擊中。
我可以在MySQL中執行此操作嗎?
謝謝。是否有一個版本可以捕獲所有錯誤,而不管SQLSTATE?或者一個範圍,例如SQLSTATE> 45000? – spraff
查看鏈接的參考。你可能想要:DECLARE CONTINUE HANDLER FOR SQLEXCEPTION –
SQLSTATES是文字('45000','42S01'等,參見http://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html ),並且不支持將它們與比較運算符分組成類。您唯一的選擇是SQLSTATE'45000',SQLSTATE'42S01',SQLSTATE ....的DECLARE CONTINUE HANDLER ....如果SQLEXTENTION過於寬泛。由於這是一個單元測試,您實際上只需要測試一個SQLSTATE,因爲您知道該測試應該拋出什麼錯誤。 –