これは関連しています: 実行時にエラーを生成する短い文法的に正しいクエリを作成する方法?
しかし、クエリ全体の代わりに、評価時に実行時エラーを生成する単純な文法的に正しい式はありますか?
何かのようなもの:
SELECT IF(1=1, 1, <runtime_error_expression>); // successfully run
SELECT IF(1=2, 1, <runtime_error_expression>); // runtime error
これは関連しています: 実行時にエラーを生成する短い文法的に正しいクエリを作成する方法?
しかし、クエリ全体の代わりに、評価時に実行時エラーを生成する単純な文法的に正しい式はありますか?
何かのようなもの:
SELECT IF(1=1, 1, <runtime_error_expression>); // successfully run
SELECT IF(1=2, 1, <runtime_error_expression>); // runtime error
更新しました
SELECT IF(1=1, 1, 9223372036854775807 + 1);
SELECT IF(1=2, 1, 9223372036854775807 + 1);
出力:
mysql> SELECT IF(1=1, 1, 9223372036854775807 + 1); +-------------------------------------+ | | IF(1=1, 1, 9223372036854775807 + 1) | +-------------------------------------+ | | 1 | +-------------------------------------+ セットで 1 行 (0.00 秒) mysql> SELECT IF(1=2, 1, 9223372036854775807 + 1); エラー 1690 (22003): BIGINT 値が '(9223372036854775807 + 1)' の範囲外です
頻繁に使用する場合は、エラーを生成する関数を作成することを検討してください。
CREATE FUNCTION GEN_ERROR() RETURNS INT
RETURN (SELECT a FROM non_table);
MySql 5.5 以降を使用している場合はSIGNAL
、代わりに関数をラップできます
DELIMITER $$
CREATE FUNCTION GEN_ERROR() RETURNS INT
BEGIN
SIGNAL SQLSTATE '02000';
RETURN 1;
END$$
DELIMITER ;
そして、それを使用してください
SELECT IF(1=1, 1, GEN_ERROR());
SELECT IF(1=2, 1, GEN_ERROR());
出力:
mysql> SELECT IF(1=1, 1, GEN_ERROR()); +------------------------+ | | IF(1=1, 1, GEN_ERROR()) | +------------------------+ | | 1 | +------------------------+ セットで 1 行 (0.00 秒) mysql> SELECT IF(1=2, 1, GEN_ERROR()); エラー 1146 (42S02): テーブル 'test.non_table' が存在しません
エラーを発生させるプロシージャとSIGNALステートメントを使用できます (MySQL 5.5)。例えば -
CREATE PROCEDURE procedure1()
BEGIN
IF @var = 1 THEN
SELECT * FROM DUAL;
ELSE
SIGNAL SQLSTATE '02001'; -- Error
END IF;
END