Як дізнатись, чи існує процедура чи функція в базі даних mysql?


18

Як дізнатись, чи існує процедура чи функція в базі даних mysql? і чи є варіант відкриття? як show procedures;(наприклад, як show tables;)

Відповіді:



26

Узагальненою відповіддю на цей тип запитань є те, що всі бази даних MySQL містять базу даних під назвою information_schema, яка включає всі метадані у вигляді таблиць, до яких можна просто запитувати.

Інформація, яку ви хочете, знаходиться в таблиці під назвою РОТИНИ . Наприклад:

SELECT ROUTINE_NAME 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE 
       ROUTINE_TYPE="PROCEDURE" 
   AND ROUTINE_SCHEMA="dbname"
;

4
Це також працює в Oracle і SQL Server. Я думаю, що його частина стандарту ANSI
Конрад Фрікс

1
Майте на увазі, що на це можуть вплинути дозволи - ви побачите список процедур, до яких у вас є доступ. Це на короткий час мене відкинуло, коли я отримав частковий список одного з'єднання (використовуючи обмежене ім’я користувача) та іншого списку для іншого з'єднання.
Джеффрі Вісман

1

використовувати наступну функцію:

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 ;

1
Це трохи складніше, дивіться відповідь Гая.
dezso

0

Відкрутити відповідь від Гая

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');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.