2017-03-04 5 views
1

あるストアドプロシージャが別のストアドプロシージャから特に呼び出されているかどうかを知る方法はありますか?あるストアドプロシージャが別のストアドプロシージャから呼び出されているかどうかを確認する

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

ルーチンテーブルを使用して、以下の答えを確認してください。プロシージャの定義にアクセスし、sp_1が使用されているかどうかを確認しますが、sp_1が呼び出されるかどうかは保証されません。 –

+0

私はあなたの目的に合った答えを試みましたが、残念ながらこれは望みどおりには機能しません。 sp_1がsp_2から呼び出されたかどうかを確認する必要があります – MTK

+1

MySQLのinformation_schemaデータベースにオブジェクトの依存性のデータがありませんでした。以下の条件をROUTINE_DEFINITION LIKE '%CALL sp_1%'に変更する必要があります。より良い方法を見つけるまで、SPが呼び出されるようにします。 –

答えて

2

INFORMATION_SCHEMA.ROUTINESというテーブルがプロシージャの内容を持っている、あなたは与えられたストアドプロシージャがあっ呼ばれているかどうかをチェックするような句を行うことができます。ここ

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がコメントされている場合でも、カウントを与えるだろう。だから、より良い条件のようです。

これは方法の1つですが、より良い方法があるかもしれません。

関連する問題