Làm cách nào để tìm hiểu xem một thủ tục hoặc hàm có tồn tại trong cơ sở dữ liệu mysql không? và có bất kỳ lựa chọn khám phá? như một show procedures;
(ví dụ như show tables;
)
Làm cách nào để tìm hiểu xem một thủ tục hoặc hàm có tồn tại trong cơ sở dữ liệu mysql không? và có bất kỳ lựa chọn khám phá? như một show procedures;
(ví dụ như show tables;
)
Câu trả lời:
SHOW PROCEDURE STATUS
SHOW FUNCTION STATUS
Một câu trả lời chung cho loại câu hỏi này là tất cả các cơ sở dữ liệu MySQL bao gồm một cơ sở dữ liệu gọi là information_schema bao gồm tất cả các siêu dữ liệu dưới dạng bảng mà bạn có thể truy vấn.
Thông tin bạn muốn có trong một bảng có tên ROUTINES . Ví dụ:
SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE
ROUTINE_TYPE="PROCEDURE"
AND ROUTINE_SCHEMA="dbname"
;
sử dụng chức năng sau:
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 ;
Quay lại câu trả lời từ 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');