【问题标题】:Get current executing stored procedure name in MySQL?在 MySQL 中获取当前正在执行的存储过程名称?
【发布时间】:2012-07-28 03:32:28
【问题描述】:

我需要一个我在 MySQL 中编写的存储过程的日志。 我知道这在 MS SQL Server 中以@@procid 的形式提供。

MySQL 中的等价物是什么?

我将使用时间戳、connection_id、database()。

如何获取我正在执行的 sp 的名称? 那个叫我的sp呢?

谢谢, 亚当

【问题讨论】:

  • 试试CALL procedureName

标签: mysql function stored-procedures information-schema


【解决方案1】:

您可以将过程名称作为 IN 参数传递给被调用的过程,并从这些过程中记录此信息。

例如-

DELIMITER $$

CREATE PROCEDURE procedure1(IN proc_name VARCHAR(255))
BEGIN
  INSERT INTO proc_log VALUES('procedure1', proc_name, NOW());
END$$

CREATE PROCEDURE procedure2(IN proc_name VARCHAR(255))
BEGIN
  INSERT INTO proc_log VALUES('procedure2', proc_name, NOW());
  CALL procedure1('procedure2');
END$$

DELIMITER ;

CALL procedure2(NULL);

SELECT * FROM proc_log;
+------------+----------------+---------------------+
| proc_name  | call_proc_name | call_ts             |
+------------+----------------+---------------------+
| procedure2 | NULL           | 2012-07-30 16:17:53 |
| procedure1 | procedure2     | 2012-07-30 16:17:53 |
+------------+----------------+---------------------+

【讨论】:

  • 了解,但您仍需要将 'prcodure2' 作为硬编码字符串传递。我想要一个系统函数,它将返回我正在运行的 proc 的名称,类似于 connection_id() 或 database() 或 now()
  • 目标是在不进行任何硬编码的情况下获取此信息
  • 我知道最好使用服务器的逻辑,但是我在MySQL中没有找到这样的功能,建议这样。
猜你喜欢
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 2010-10-03
  • 2023-03-10
相关资源
最近更新 更多