これは、入力パラメータを使用することができ、9.4 User-Defined Variablesを使用する必要はありませんか13.6.4.1 Local Variable DECLARE Syntax:
mysql> DELIMITER //
mysql> CREATE PROCEDURE `INCREMENT_IDENTIFIERS`(
-> `in_key_name` VARCHAR(30)
->)
-> BEGIN
-> UPDATE `APS_IDENTIFIERS`
-> SET `COUNTER` = `COUNTER` + 1
-> WHERE `KEY_NAME` = `in_key_name`;
-> SELECT `KEY_NAME`, `COUNTER`
-> FROM `APS_IDENTIFIERS`
-> WHERE `KEY_NAME` = `in_key_name`;
-> END//
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> CALL `INCREMENT_IDENTIFIERS`('urn');
+----------+---------+
| KEY_NAME | COUNTER |
+----------+---------+
| urn | 3 |
+----------+---------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
はdb-fiddleを参照してください。パラメータ名として列名を使用して
UPDATE
避けてください:
mysql> DELIMITER //
mysql> CREATE PROCEDURE `INCREMENT_IDENTIFIERS`(
-> `key_name` VARCHAR(30) -- CHANGE NAME
->)
-> BEGIN
-> SET @`keyName` := `key_name`;
-> UPDATE `APS_IDENTIFIERS`
-> SET `COUNTER` = `COUNTER` + 1
-> WHERE `KEY_NAME` = @`keyName`;
-> SELECT `KEY_NAME`, `COUNTER`
-> FROM `APS_IDENTIFIERS`
-> WHERE `KEY_NAME` = @`keyName`;
-> END//
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> CALL `INCREMENT_IDENTIFIERS`('urn');
+------------+---------+
| `KEY_NAME` | COUNTER |
+------------+---------+
| urn | 69 |
| urn | 3 |
+------------+---------+
2 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
新しいパラメータ名:
mysql> DELIMITER //
mysql> CREATE PROCEDURE `INCREMENT_IDENTIFIERS`(
-> `_key_name` VARCHAR(30) -- NEW NAME
->)
-> BEGIN
-> SET @`keyName` := `_key_name`;
-> UPDATE `APS_IDENTIFIERS`
-> SET `COUNTER` = `COUNTER` + 1
-> WHERE `KEY_NAME` = @`keyName`;
-> SELECT `KEY_NAME`, `COUNTER`
-> FROM `APS_IDENTIFIERS`
-> WHERE `KEY_NAME` = @`keyName`;
-> END//
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> CALL `INCREMENT_IDENTIFIERS`('urn');
+----------+---------+
| KEY_NAME | COUNTER |
+----------+---------+
| urn | 3 |
+----------+---------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
db-fiddleを参照してください。
13.6.4.2 Local Variable Scope and Resolutionを確認してください。
mysql> DELIMITER //
mysql> CREATE PROCEDURE `INCREMENT_IDENTIFIERS`(
-> `key_name` VARCHAR(30)
->)
-> BEGIN
-> SET @`keyName` := `key_name`;
-> UPDATE `APS_IDENTIFIERS`
-> SET `COUNTER` = `COUNTER` + 1
-> WHERE `APS_IDENTIFIERS`.`KEY_NAME` = @`keyName`;
-> SELECT `KEY_NAME`, `COUNTER`
-> FROM `APS_IDENTIFIERS`
-> WHERE `APS_IDENTIFIERS`.`KEY_NAME` = @`keyName`;
-> END//
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> CALL `INCREMENT_IDENTIFIERS`('urn');
+------------+---------+
| `KEY_NAME` | COUNTER |
+------------+---------+
| urn | 3 |
+------------+---------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
db-fiddleを参照してください:
UPDATE 2
別のオプション(以下を推奨)が修飾された列名(APS_IDENTIFIERS.KEY_NAME
)を使用することです。
9.2.1 Identifier Qualifiersを確認してください。
[9.4ユーザ定義変数](https://dev.mysql.com/doc/refman/5.7/en/user-variables.html)を使用する必要はなく、入力パラメータまたは[ 13.6.4.1ローカル変数DECLARE構文](https://dev.mysql.com/doc/refman/5.7/en/declare-local-variable.html)。 – wchiquito
@wchiquitoあなたは詳細を教えてください。実際には、Javaコードからこのプロシージャを呼び出す必要があります。したがって、増分したい特定のキーに対してユーザー定義変数を定義する必要があります。 –