Bagaimana saya mengetahui jika ada prosedur atau fungsi dalam database mysql?

18

Bagaimana saya mengetahui jika ada prosedur atau fungsi dalam database mysql? dan apakah ada opsi penemuan? seperti show procedures;(misalnya suka show tables;)

xenoterracide
sumber

Jawaban:

26

Jawaban umum untuk jenis pertanyaan ini adalah bahwa semua database MySQL menyertakan database yang disebut information_schema yang mencakup semua metadata sebagai tabel yang bisa Anda query.

Informasi yang Anda inginkan ada dalam tabel yang disebut ROUTINES . Sebagai contoh:

SELECT ROUTINE_NAME 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE 
       ROUTINE_TYPE="PROCEDURE" 
   AND ROUTINE_SCHEMA="dbname"
;
Gayus
sumber
4
Ini juga berfungsi di Oracle dan SQL Server. Saya pikir ini adalah bagian dari standar ANSI
Conrad Frix
1
Ketahuilah bahwa ini dapat dipengaruhi oleh izin - Anda akan melihat daftar prosedur yang dapat Anda lihat. Ini membuat saya singkat ketika saya mendapat daftar parsial pada satu koneksi (menggunakan nama pengguna yang lebih terbatas) dan daftar yang berbeda pada koneksi lain.
Geoffrey Wiseman
1

gunakan fungsi berikut:

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 ;
sassman
sumber
1
Ini agak rumit, lihat jawaban Gayus.
dezso
0

Putar jawaban dari Gayus

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');
pengguna2242225
sumber