我有一个应用程序,其中包含存储过程中的所有业务规则。 每个存储过程都调用一个称为verificaToken的存储过程。此过程的功能是验证会话令牌是否正确。 我想记录所有存储过程调用,并且我想使用此verificaToken,因为已经在所有存储过程中实现了。 无论如何,verificaToken是否可以识别它的调用方和参数?
谢谢!
答案 0 :(得分:1)
您正在请求类似于反射包的内容,以便verificaToken可以获取有关调用堆栈的信息。
否,MySQL存储过程中没有有关调用堆栈的信息功能。
您唯一可以做的是:
此处定义了用户定义的变量:https://dev.mysql.com/doc/refman/8.0/en/user-variables.html
示例:
mysql> delimiter ;;
mysql> create procedure myproc()
-> begin
-> set @mycaller='myproc';
-> call verificaToken();
-> end;;
mysql> create procedure verificaToken()
-> begin
-> select @mycaller;
-> end;;
mysql> delimiter ;
mysql> call myproc();
+-----------+
| @mycaller |
+-----------+
| myproc |
+-----------+
返回的结果集来自verificaToken()
。您可以在该过程的主体中使用该变量执行任何操作,例如按照您所说的进行记录。我只是在说明一个人可以在一个过程中设置一个变量,并且它对您调用的任何其他过程都是自动可见的。
这些变量在任何过程都可以读取的意义上是“全局”的,但仅限于您自己的MySQL会话,因此没有并行客户端可以读取该变量。