2012-07-30 67 views
3

我需要一個日誌來存儲我在MySQL中編寫的存儲過程。 我知道這在MSSQL Server中可用作@@ procid。在MySQL中獲取當前正在執行的存儲過程名稱?

MySQL中的等價物是什麼?

我打算使用timestamp,connection_id,database()。

我怎樣才能得到正在執行的sp的名稱? 那叫我的sp呢?

感謝, 亞當

+0

嘗試'CALL procedureName' – diEcho 2012-07-30 13:14:23

回答

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 | 
+------------+----------------+---------------------+ 
+2

理解,但你仍然需要通過 'prcodure2' 作爲硬編碼字符串。我想要一個系統函數,它將返回我正在運行的proc的名稱,類似於connection_id()或database()或now() – adam 2012-07-30 14:37:30

+1

目標是在沒有任何硬編碼的情況下獲取此信息 – adam 2012-07-30 14:45:46

+2

我知道它更好使用服務器的邏輯,但我還沒有在MySQL中找到這樣的功能,並建議這樣。 – Devart 2012-07-30 14:50:53

相關問題