有没有办法知道是否从另一个存储过程调用了一个存储过程?
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;
答案 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被评论,这也会给出计数。所以有一个更好的条件。
这是其中一种方式,可能有更好的方法。