Mysql检查是否从另一个存储过程调用了一个存储过程

时间:2017-03-04 18:24:19

标签: mysql stored-procedures

有没有办法知道是否从另一个存储过程调用了一个存储过程?

CREATE PROCEDURE `sp_1`(
  IN invar_one VARCHAR(32),
  OUT outvar_one VARCHAR(32)
)
BEGIN   
  /*I want some condition like this:*/
  IF (/*Is called from sp_2 */) THEN
    SET outvar_one = "OK";
  ELSE
    SET outvar_one = "NOT OK";
  END IF;
END;

CREATE PROCEDURE `sp_2`(
  IN invar_two VARCHAR(32),
  OUT outvar_two VARCHAR(32)
)
BEGIN   
  CALL sp_1(invar_two,@outvar_two);
END;

1 个答案:

答案 0 :(得分:2)

名为INFORMATION_SCHEMA.ROUTINES的表具有过程的内容。您可以执行like子句来检查是否在那里引用了给定的存储过程。

SELECT COUNT(1)
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_DEFINITION LIKE '%sp_1%' 
    AND ROUTINE_TYPE='PROCEDURE'
    AND ROUTINE_NAME = 'sp_2';

此处的详细信息 - routines table

但是,即使过程sp_1被评论,这也会给出计数。所以有一个更好的条件。

这是其中一种方式,可能有更好的方法。