3

これは関連しています: 実行時にエラーを生成する短い文法的に正しいクエリを作成する方法?

しかし、クエリ全体の代わりに、評価時に実行時エラーを生成する単純な文法的に正しい式はありますか?

何かのようなもの:

SELECT IF(1=1, 1, <runtime_error_expression>); // successfully run
SELECT IF(1=2, 1, <runtime_error_expression>); // runtime error
4

2 に答える 2

1

更新しました

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' が存在しません
于 2013-09-10T05:57:46.267 に答える
0

エラーを発生させるプロシージャとSIGNALステートメントを使用できます (MySQL 5.5)。例えば ​​-

CREATE PROCEDURE procedure1()
BEGIN

  IF @var = 1 THEN
    SELECT * FROM DUAL;
  ELSE
    SIGNAL SQLSTATE '02001'; -- Error
  END IF;

END
于 2013-09-10T06:07:06.550 に答える