私は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
リンクされた参照を見てください。あなたはおそらく望んでいます:SQLEXCEPTIONのためのDECLARE CONTINUE HANDLER –
SQLSTATESはリテラルです( '45000'、 '42S01'など)。http://dev.mysql.com/doc/refman/5.5/en/error-messages-server.htmlを参照してください。 )、それらを比較演算子を持つクラスにグループ化することはサポートされていません。他の唯一のオプションは、SQLEXTENTIONが余りに包括的である場合、SQLSTATE '45000'、SQLSTATE '42S01'、SQLSTATE ....のDECLARE CONTINUE HANDLERです。これは単体テストなので、実際にこのテストで発生するエラーを知った後、単一のSQLSTATEをテストしたいと思っています。 –