MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLストアドプロシージャでNULLまたは空の変数をチェックする方法

MySQLのストアドプロシージャ内で、変数がNULLまたは空文字列であるかどうかを判定するには、IF条件を使用します。NULLチェックには「IS NULL」、空文字列のチェックには「= ''」を組み合わせることで、どちらのケースにも対応できます。

それでは、実際にストアドプロシージャを作成してみましょう。

mysql> delimiter //
mysql> create procedure checkingForNullDemo(Name varchar(20))
     begin
     if Name is NULL OR Name='' then
     select 'Adam Smith';
     else
     select Name;
     end if ;
     end
     //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;

このプロシージャでは、引数「Name」がNULLまたは空文字列の場合にデフォルト値として「Adam Smith」を返し、それ以外の場合は渡された値をそのまま返します。

ケース1:NULLを渡した場合

引数にNULLを指定して、CALLコマンドでストアドプロシージャを呼び出します。

mysql> call checkingForNullDemo(NULL);

実行結果は以下のとおりです。

+------------+
| Adam Smith |
+------------+
| Adam Smith |
+------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.00 sec)

NULLが渡されたため、IF条件が真と判定され、デフォルト値の「Adam Smith」が出力されました。

ケース2:値を渡した場合

次に、通常の文字列値を指定してCALLコマンドで呼び出します。

mysql> call checkingForNullDemo('John Doe');

実行結果は以下のとおりです。

+----------+
| Name     |
+----------+
| John Doe |
+----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

このように、有効な値が渡された場合は、ELSEブロックが実行され、入力された値「John Doe」がそのまま返されます。

ポイントまとめ

  • NULL判定には「IS NULL」を使用する(「= NULL」では正しく判定できない)。
  • 空文字列との両方をチェックしたい場合は、「OR Name = ''」のように条件を組み合わせる。
  • ストアドプロシージャを作成する際は、あらかじめ「delimiter //」で区切り文字を変更し、作成後に「delimiter ;」で元に戻す。
  1. MySQLでNULL値を1として表示・更新する方法

    MySQLでは、テーブル内のNULL値を別の値(たとえば「1」)に置き換えて扱いたい場面があります。この記事では、IFNULL関数とUPDATE文を組み合わせて、NULL値を1に変換する具体的な手順をサンプルコード付きで解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成します。 mysql> create table DemoTable1963 ( Counter int ); Query OK, 0 rows affected (0.00 sec) 2. レコードを挿入する INSERT文を使って、NULLを含む複数のレコードを

  2. MySQLストアドプロシージャでカラムの値を変数に格納する方法

    MySQLのストアドプロシージャ内で変数を宣言するには、DECLARE文を使用します。さらにSELECT ~ INTO構文を組み合わせることで、テーブルのカラム値を変数に格納することができます。ここでは、実際にサンプルテーブルを作成し、ストアドプロシージャ経由でカラムの値を変数に取得する手順を解説します。1. サンプルテーブルの作成まず、以下のようにテーブルを作成します。mysql> create table DemoTable2034-> (-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,-> StudentN