How do I find out if a procedure or function exists in a mysql database? and is there any discovery option? like a show procedures; (e.g. like show tables;)
Asked
Active
Viewed 5.0k times
20
xenoterracide
- 2,921
- 5
- 31
- 33
6 Answers
30
A generic answer to this type of question is that all MySQL databases include a database called information_schema which includes all the metadata as tables you can just query.
The information you want is in a table called ROUTINES. For example:
SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE
ROUTINE_TYPE="PROCEDURE"
AND ROUTINE_SCHEMA="dbname"
;
Nick Chammas
- 14,810
- 17
- 76
- 124
Gaius
- 11,238
- 3
- 32
- 64
22
SHOW PROCEDURE STATUS
SHOW FUNCTION STATUS
1
use the following function:
DELIMITER $$
DROP FUNCTION IF EXISTS f_exists_procedure;$$
CREATE FUNCTION f_exists_procedure(in_name VARCHAR(255))
RETURNS BIT DETERMINISTIC
BEGIN
SELECT COUNT(1) INTO @f_result
FROM information_schema.ROUTINES as info
WHERE info.ROUTINE_SCHEMA = DATABASE() AND info.ROUTINE_TYPE = 'PROCEDURE' AND info.ROUTINE_NAME = in_name;
RETURN @f_result;
END;$$
DELIMITER ;
5422m4n
- 111
- 1
0
If you just want one specific procedure:
SHOW PROCEDURE STATUS WHERE `name` = 'value'
mustaccio
- 28,207
- 24
- 60
- 76
Chris Baaijens
- 1
- 1
0
Spin Off of the answer from Gaius
SELECT IF( COUNT(*) = 0, 'F' , 'T' ) AS ProcedureExists
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'someDBName'
AND ROUTINE_TYPE = 'PROCEDURE'
AND UCASE(ROUTINE_NAME) = UCASE('someProcedureName');
user2242225
- 1
- 1