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

レコードが更新されたときにMySQLストアドプロシージャの変数値が変更されないようにするにはどうすればよいですか?


値が更新されるたびに変数値を変更しないストアドプロシージャを作成します。

まずテーブルを作成しましょう-

mysql> create table DemoTable
   (
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   Value int
   );
Query OK, 0 rows affected (0.63 sec)

挿入コマンド-

を使用して、テーブルにいくつかのレコードを挿入します
mysql> insert into DemoTable(Value) values(100);
Query OK, 1 row affected (0.13 sec)
Display all records from the table using select statement :
mysql> select *from DemoTable;

出力

+----+-------+
| Id | Value |
+----+-------+
| 1 | 100    |
+----+-------+
1 row in set (0.00 sec)

以下は、更新後の古い値を示すストアドプロシージャです-

mysql> DELIMITER //
   mysql> CREATE PROCEDURE updateValue100()
   BEGIN
      DECLARE myValue int;
      select @myValue :=(select Value from DemoTable where Id=1);
      select @myValue;
      update DemoTable set Value=200 where Id=1;
      select @myValue :=(select Value from DemoTable where Id=1);
      select @myValue;
   END
   //
   Query OK, 0 rows affected (0.21 sec)
mysql> DELIMITER ;

これで、CALLコマンドを使用してストアドプロシージャを呼び出すことができます-

mysql> call updateValue100();

出力

+-------------------------------------------------------+
| @myValue :=(select Value from DemoTable where Id=1)   |
+-------------------------------------------------------+
| 100                                                   |
+-------------------------------------------------------+
1 row in set (0.00 sec)
+----------+
| @myValue                                              |
+----------+
| 100                                                   |
+----------+
1 row in set (0.01 sec)
+-------------------------------------------------------+
| @myValue :=(select Value from DemoTable where Id=1)   |
+-------------------------------------------------------+
| 200                                                   |
+-------------------------------------------------------+
1 row in set (0.16 sec)
+----------+
| @myValue |
+----------+
| 200      |
+----------+
1 row in set (0.17 sec)
Query OK, 0 rows affected (0.18 sec)

  1. 列の値をMySQLストアドプロシージャの変数に格納します

    変数を宣言するには、MySQLストアドプロシージャでDECLAREを使用します。まずテーブルを作成しましょう- mysql> create table DemoTable2034    -> (    -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,    -> StudentName varchar(20),    -> StudentAge int    -> ); Query OK, 0 rows

  2. MySQLのデータベースに挿入するときにdecimal(19、2)の値を変更しますか?

    正確な実際の値を格納するには、小数点以下2桁のtruncate()を使用する必要があります。テーブルを作成しましょう- 以下は、テーブルを作成するためのクエリです。 mysql> create table demo59 −> ( −> price decimal(19,2) −> ); Query OK, 0 rows affected (1.12 sec) 挿入コマンド-を使用して、いくつかのレコードをテーブルに挿入します。 mysql> insert into demo59 values(truncate(15.346,