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

アンパサンド(&)付きの値を使ったクエリがOracleでは動作し、MySQLでは動作しない理由と対処法

Oracleの「&」変数とMySQLの違い

Oracleでは、&変数名のようにアンパサンド(&)を付けた置換変数をSQL内で利用できます。しかし、同じ構文をMySQLで実行してもエラーになってしまいます。これは、MySQLにはOracleのような置換変数の仕組みがなく、代わりにユーザー定義変数として「@(アットマーク)」を先頭に付けた変数を使用するためです。

MySQLで変数を使う方法:@変数の基本構文

MySQLで変数に値を設定してINSERT文に使うには、以下の構文に従います。

SET @yourVariableName1 = yourValue, @yourVariableName2 = yourValue, @yourVariableName3 = yourValue, ...N;
INSERT INTO yourTableName VALUES(@yourVariableName1, @yourVariableName2, @yourVariableName3, ...N);

実際にテーブルを作って確認してみよう

まず、動作を理解するためにサンプル用のテーブルを作成します。テーブル作成のクエリは次のとおりです。

mysql> CREATE TABLE Student_Information
    -> (
    -> StudentId int,
    -> StudentName varchar(100),
    -> StudentAge int,
    -> StudentMarks int,
    -> StudentCountryName varchar(10)
    -> );
Query OK, 0 rows affected (0.75 sec)

@変数に値を設定してINSERTする

続いて、「@」を先頭に付けた変数に値を設定し、INSERTコマンドでレコードを登録します。

mysql> SET @Id = 10001, @Name = 'Carol', @Age = 23, @Marks = 89, @CountryName = 'US';
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO Student_Information VALUES(@Id, @Name, @Age, @Marks, @CountryName);
Query OK, 1 row affected (0.19 sec)

SELECT文で結果を確認する

最後に、SELECT文ですべてのレコードを表示して、正しく挿入されたかを確認します。

mysql> SELECT * FROM Student_Information;

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

+-----------+-------------+------------+--------------+--------------------+
| StudentId | StudentName | StudentAge | StudentMarks | StudentCountryName |
+-----------+-------------+------------+--------------+--------------------+
| 10001     | Carol       | 23         | 89           | US                 |
+-----------+-------------+------------+--------------+--------------------+
1 row in set (0.00 sec)

まとめ

このように、Oracleのアンパサンド(&)による置換変数はMySQLでは使えません。MySQLで同様のことを行う場合は、SET文で「@」付きのユーザー定義変数に値を代入し、その変数をINSERT文などで参照します。両者の構文の違いを理解しておくと、データベース間の移行やSQLの書き換えがスムーズになります。

  1. MySQLでテーブルに存在しない値だけを抽出する方法(UNION ALLとNOT EXISTSの活用)

    MySQLでテーブルに存在しない値を照会するには? MySQLで「テーブルにまだ登録されていない値だけ」を取得したい場合、UNION ALLとWHERE NOT EXISTSを組み合わせるのが有効です。サブクエリで候補となる値をUNION ALLで列挙し、NOT EXISTSによって既にテーブル内に存在する値を除外することで、存在しない値のみを抽出できます。 ここでは、実際の手順をサンプルコードとともに解説します。 1. サンプルテーブルを作成する まず、自動採番(AUTO_INCREMENT)のカラムを持つテーブルを作成します。 mysql> create table DemoTab

  2. MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法

    はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実