我经常发现自己需要执行类似批处理的 MySQL 操作。现在我需要使用参数 0、1、2、... 1,000 调用存储例程 1,000 次。我可以创建一个带有LOOP
构造的存储例程来执行此操作,或者编写
CALL MyStoredRoutine(0);
CALL MyStoredRoutine(1);
...
CALL MyStoredRoutine(1000);
我认为这两个选项都很麻烦。我想知道是否有更简单的方法可以做到这一点?
我经常发现自己需要执行类似批处理的 MySQL 操作。现在我需要使用参数 0、1、2、... 1,000 调用存储例程 1,000 次。我可以创建一个带有LOOP
构造的存储例程来执行此操作,或者编写
CALL MyStoredRoutine(0);
CALL MyStoredRoutine(1);
...
CALL MyStoredRoutine(1000);
我认为这两个选项都很麻烦。我想知道是否有更简单的方法可以做到这一点?
假设要求只传递一个 INT 参数,如果您使用 *nix(使用由 ~/.mylogin.cnf 提供的 mysql 用户凭据),则可以在 shell 中使用 bash 单行。
$ for i in {1..1000}; do mysql -e "call `db`.`selecta`($i)"; done
+------+
| a |
+------+
| 1 |
+------+
+------+
| a |
+------+
| 2 |
+------+
...
在这里,过程selecta
只是对传递给过程的参数执行 SELECT,但您可以将该技术应用于任何例程。