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の新しいレコードが挿入されています。これで、エラーメッセージは表示されなくなります。
-
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) 挿入コマンド-を使用して、テーブ
-
このクエリの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