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

MySQLの「変数または新しい疑似変数ではありません」というメッセージ。ストアドプロシージャのこのエラーは何ですか?


このエラーメッセージを取り除くために、サンプルの例を見てみましょう。しかしその前に、それを修正するための概念を見ていきましょう。

変数を使用して、ストアドプロシージャから値を取得します。変数の前には@記号が付きます。構文は次のとおりです-

CALL yourStoredProcedureName(yourParameter1,yourParameter2,..........N,@yourVariableName);

変数の値を確認するには、selectステートメントを使用する必要があります。構文は次のとおりです-

SELECT @yourVariableName;

上記の構文を理解するために、テーブルを作成し、テーブルにいくつかのレコードを挿入しましょう。

テーブルを作成するためのクエリは次のとおりです-

mysql> create table StoredProcedureDemo
   -> (
   -> Id int,
   -> Name varchar(10)
   -> );
Query OK, 0 rows affected (1.20 sec)

次に、insertコマンドを使用してテーブルにいくつかのレコードを挿入します。クエリは次のとおりです-

mysql> insert into StoredProcedureDemo values(1,'John');
Query OK, 1 row affected (0.31 sec)
mysql> insert into StoredProcedureDemo values(2,'Carol');
Query OK, 1 row affected (0.19 sec)

selectステートメントを使用して、テーブルのすべてのレコードを表示します。クエリは次のとおりです-

mysql> select *from StoredProcedureDemo;

以下は出力です-

+------+-------+
| Id   | Name  |
+------+-------+
|    1 | John  |
|    2 | Carol |
+------+-------+
2 rows in set (0.00 sec)

値を返すストアドプロシージャは次のとおりです。ストアドプロシージャを作成するためのクエリは次のとおりです-

mysql> DELIMITER //
mysql> create procedure Update_table(IN Id int, IN Name VARCHAR(20),OUT message VARCHAR(50))
   -> BEGIN
   -> set message= 'DATABASE HAS BEEN UPDATED';
   -> INSERT INTO StoredProcedureDemo
   -> values (Id, Name);
   -> end;
   -> //
Query OK, 0 rows affected (0.67 sec)
mysql> DELIMITER ;

次に、いくつかの値を使用してストアドプロシージャを呼び出します-

mysql> call Update_table(3,'Larry',@UserMessage);

クエリOK、影響を受ける1行(0.13秒)

selectステートメントを使用して変数@UserMessageの値を確認します。クエリは次のとおりです-

mysql> select @UserMessage;

以下は出力です-

+---------------------------+
| @UserMessage              |
+---------------------------+
| DATABASE HAS BEEN UPDATED |
+---------------------------+
1 row in set (0.00 sec)

次に、テーブルレコードをもう一度確認します。クエリは次のとおりです-

mysql> select *from StoredProcedureDemo;

以下は出力です-

+------+-------+
| Id   | Name  |
+------+-------+
|    1 | John  |
|    2 | Carol |
|    3 | Larry |
+------+-------+
3 rows in set (0.00 sec)

上記のサンプル出力を見ると、ID3の新しいレコードが挿入されています。これで、エラーメッセージは表示されなくなります。


  1. MySQLストアドプロシージャ内に動的SQLクエリを実装しますか?

    ストアドプロシージャでの動的SQLクエリの場合は、PREPARESTATEMENTの概念を使用します。まずテーブルを作成しましょう- mysql> create table DemoTable2033    -> (    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,    -> Name varchar(20)    -> ); Query OK, 0 rows affected (1.61 sec) 挿入コマンド-を使用して、テーブ

  2. このクエリのMySQL構文エラーは何ですか–予約済みキーワードを使用してテーブルを作成しますか?

    MySQLで予約されたキーワードである「groups」という名前のテーブルを作成しようとしたとします。groupsはMySQLで予約されたキーワードであるため、「groups」は使用できません。 「groups」という名前のテーブルの作成中に次のエラーが発生しました- mysql> create table groups −> ( −> id int, −> name varchar(40) −> ); ERROR 1064 (42000): You have an error in your SQL syntax