3

commands.sqlSQL コマンドでいっぱいのSQL ファイルがあるとします。その意図は、ここでSOURCE説明されているコマンドを使用して、ユーザーがファイル内のコマンドを実行できるようにすることです。ただし、ユーザーがデータベースを選択していることを前提としています。ユーザーがデータベースを選択していない場合、多数の「データベースが選択されていません」というエラーが表示されます。

IF次のように、ステートメントを使用してデータベースが選択されているかどうかを確認する方法はありますか

IF a database is selected THEN
    (statements)
ELSE
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'You need to select a database';
END IF;
4

2 に答える 2

0

IF ... THEN ...単純なクエリではなく、ストアド プロシージャまたは関数でのみ使用できます。ストアド プロシージャを作成し、それを SQL ファイルから実行する必要があります。

データベースが選択されているかどうかを確認するには、次のようにします。

SELECT @is_selected:=database();
IF @is_selected IS NULL THEN ...
于 2012-09-03T16:11:53.567 に答える
0

スクリプトが最初のエラーに遭遇すると (forceオプションで呼び出されない限り) スクリプトが中止されるため、準備されたステートメントを使用して、ある程度のフロー制御を実現できます。

SET @sql := IF(
  DATABASE() IS NULL,
  "SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'You need to select a database'",
  "DO SELECT NULL"
);

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SIGNAL(ただし、準備されたステートメントを介してコマンドを実行できるとは思いません)。

于 2012-09-03T16:10:58.490 に答える