在 MySQL 中获取当前正在执行的存储过程名称?

ada*_*dam 5 mysql stored-procedures function information-schema

我需要我在 MySQL 中编写的存储过程的日志。我知道这在 MS SQL Server 中是可用的 @@procid。

MySQL 中的等价物是什么?

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

如何获得我正在执行的 sp 的名称?那个叫我的 SP 怎么样?

谢谢,亚当

Dev*_*art 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 |
+------------+----------------+---------------------+
Run Code Online (Sandbox Code Playgroud)

  • 理解,但您仍然需要将“prcodure2”作为硬编码字符串传递。我想要一个系统函数,它将返回我正在运行的进程的名称,类似于connection_id()或database()或now() (4认同)
  • 目标是无需任何硬编码即可获取此信息 (2认同)
  • 我明白最好使用服务器的逻辑,但我在MySQL中没有找到这样的功能,并建议采用这种方式。 (2认同)