Daftar Prosedur / Fungsi Disimpan Baris Perintah Mysql

474

Bagaimana saya bisa melihat daftar prosedur tersimpan atau fungsi yang tersimpan di baris perintah mysql suka show tables;atau show databases;perintah.

kesalahan sistem
sumber

Jawaban:

743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
fredrik
sumber
2
Apakah ada cara untuk menemukan nama prosedur tersimpan saat ini? Saya percaya object_name(@@procid) dalam SSMS hal seperti ini di MySql?
Mohammed Zameer
1
Jika pengguna memiliki hak istimewa EXECUTE, atau yang lain, ini akan menampilkan daftar kosong.
mjb
211
show procedure status

akan menunjukkan kepada Anda prosedur yang tersimpan.

show create procedure MY_PROC

akan menunjukkan kepada Anda definisi prosedur. Dan

help show

akan menampilkan semua opsi yang tersedia untuk showperintah.


sumber
1
Seperti yang ditunjukkan oleh Codler, help show tidak berfungsi karena help adalah instruksi baris perintah mysql. Untuk mendapatkan info lebih lanjut tentang perintah SHOW, langsung ke halaman dokumentasi MySQL di: dev.mysql.com/doc/refman/5.1/id/show.html
IvanD
2
Yah saya tidak yakin mengapa Anda mengatakan itu, tolong tunjukkan bekerja dengan baik untuk saya menggunakan MySQL 5.0.95 pada centos 6.3
h4unt3r
Ini berfungsi jika Anda menggunakan klien baris perintah mysqls sendiri. Saya tidak, jadi saya lebih suka referensi online.
Ledhund
Ini adalah jawaban terbaik
Kolob Canyon
87

Untuk prosedur tampilan dalam nama bijaksana

select name from mysql.proc 

kode di bawah ini digunakan untuk membuat daftar semua prosedur dan kode di bawah ini memberikan hasil yang sama dengan menunjukkan status prosedur

select * from mysql.proc 
Praveenkumar_V
sumber
4
ini adalah presentasi yang jauh lebih bersih daripada yang lain terutama jika Anda berada di terminal yang lebih kecil. Terima kasih.
user1527227
Saya mengembangkan jawaban ini menjadi select db,name,type from mysql.proc where db<>'sys';sedikit lebih banyak info, dan lebih sedikit sistem bawaan kruft.
pbnelson
47

Cara yang lebih spesifik:

SHOW PROCEDURE STATUS 
WHERE Db = DATABASE() AND Type = 'PROCEDURE'
sassman
sumber
4
itu akan bekerja tanpa menggunakan DAN Ketik = 'PROSEDUR' juga,
normalUser
33

Seperti disebutkan di atas,

show procedure status;

Memang akan menampilkan daftar prosedur, tetapi menunjukkan semuanya , di seluruh server.

Jika Anda hanya ingin melihat yang ada di satu basis data, coba ini:

SHOW PROCEDURE STATUS WHERE Db = 'databasename';
Drarok
sumber
Demikian juga, SHOW STATUS FUNGSI DI MANA Db = 'databasename'; memberi Anda fungsi.
David A. Gray
29

Alternatif:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
macio.Jun
sumber
21

Preferensi saya adalah untuk sesuatu yang:

  1. Daftar fungsi dan prosedur,
  2. Biarkan saya tahu yang mana,
  3. Memberi nama dan jenis prosedur dan tidak ada yang lain ,
  4. Memfilter hasil dengan database saat ini, bukan definisi saat ini
  5. Urutkan hasilnya

Menjahit bersama dari jawaban lain di utas ini, saya berakhir dengan

select 
  name, type 
from 
  mysql.proc 
where 
  db = database() 
order by 
  type, name;

... yang mengakhiri Anda dengan hasil yang terlihat seperti ini:

mysql> select name, type from mysql.proc where db = database() order by type, name;
+------------------------------+-----------+
| name                         | type      |
+------------------------------+-----------+
| get_oldest_to_scan           | FUNCTION  |
| get_language_prevalence      | PROCEDURE |
| get_top_repos_by_user        | PROCEDURE |
| get_user_language_prevalence | PROCEDURE |
+------------------------------+-----------+
4 rows in set (0.30 sec)
John Haugeland
sumber
Komentar juga membantu.
dolmen
15

Gunakan ini:

SHOW PROCEDURE STATUS;
Kode L ღ ver
sumber
11

Menunjukkan semua prosedur yang tersimpan:

SHOW PROCEDURE STATUS;

Memperlihatkan semua fungsi:

SHOW FUNCTION STATUS;

Menunjukkan definisi prosedur yang ditentukan:

SHOW CREATE PROCEDURE [PROC_NAME];

Menampilkan semua prosedur dari basis data yang diberikan:

SHOW PROCEDURE STATUS WHERE Db = '[db_name]';
Pengoptimal
sumber
9

Variasi pada posting Praveenkumar_V:

SELECT `name` FROM mysql.proc WHERE db = 'dbname' AND `type` = 'PROCEDURE';
SELECT `name` FROM mysql.proc WHERE db = 'dbname' AND `type` = 'FUNCTION';

..dan ini karena saya perlu menghemat waktu setelah melakukan pembersihan:

SELECT CONCAT(
     "GRANT EXECUTE ON PROCEDURE `"
    ,`name`
    ,"` TO username@'%'; -- "
    ,`comment`
)
FROM mysql.proc
WHERE db = 'dbname'
AND `type` = 'PROCEDURE';

SELECT CONCAT(
     "GRANT EXECUTE ON FUNCTION `"
    ,`name`
    ,"` TO username@'%'; -- "
    ,`comment`
)
FROM mysql.proc
WHERE db = 'dbname'
AND `type` = 'FUNCTION';
trapper_hag
sumber
8

Untuk menunjukkan milik Anda:

SELECT
  db, type, specific_name, param_list, returns
FROM
  mysql.proc
WHERE
  definer LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'));
Charlie Skilbeck
sumber
3
Sudah menjadi kebiasaan umum untuk menempatkan kata kunci SQL di semua huruf besar, sambil menempatkan nama kolom, nama tabel, dll dalam huruf kecil.
Sagar
8
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name'
Sunil Kumar
sumber
5

Jika Anda ingin membuat daftar Prosedur Store untuk Database Pilihan Saat Ini,

SHOW PROCEDURE STATUS WHERE Db = DATABASE();

itu akan mendaftar Rutinitas berdasarkan pada Database yang dipilih saat ini

DIPERBARUI untuk mencantumkan fungsi dalam basis data Anda

select * from information_schema.ROUTINES where ROUTINE_SCHEMA="YOUR DATABASE NAME" and ROUTINE_TYPE="FUNCTION";

untuk daftar prosedur rutin / toko di database Anda,

select * from information_schema.ROUTINES where ROUTINE_SCHEMA="YOUR DATABASE NAME" and ROUTINE_TYPE="PROCEDURE";

untuk membuat daftar tabel di database Anda,

select * from information_schema.TABLES WHERE TABLE_TYPE="BASE TABLE" AND TABLE_SCHEMA="YOUR DATABASE NAME";

untuk daftar tampilan dalam database Anda,

metode 1:

select * from information_schema.TABLES WHERE TABLE_TYPE="VIEW" AND TABLE_SCHEMA="YOUR DATABASE NAME";

metode 2:

select * from information_schema.VIEWS WHERE TABLE_SCHEMA="YOUR DATABASE NAME";
Mohideen bin Mohammed
sumber
1
                           show procedure status;

menggunakan perintah ini Anda bisa melihat semua prosedur di database

Karan
sumber
0

Render favorit saya dari daftar prosedur database saat ini: nama, daftar parameter, komentar

SELECT specific_name AS name, param_list AS params, `comment`
FROM mysql.proc
WHERE db = DATABASE()
AND type = 'PROCEDURE';

Tambahkan pengembalian untuk fungsi:

SELECT specific_name AS name, param_list AS params, `returns`, `comment`
FROM mysql.proc
WHERE db = DATABASE()
AND type = 'FUNCTION';
dolmen
sumber
0

Daftar pengguna ini prosedur dan fungsi untuk semua database :

SELECT 
    `ROUTINE_SCHEMA` AS `database`
    ,`ROUTINE_TYPE` AS `type`
    ,`SPECIFIC_NAME` AS `name`
    ,`DTD_IDENTIFIER` AS `data_type`
FROM 
    `INFORMATION_SCHEMA`.`ROUTINES`
WHERE
  `definer` LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'))
ORDER BY
    `database`
    ,`type`
    ,`name`
;

Daftar pengguna ini prosedur dan fungsi untuk database yang digunakan :

SELECT 
    `ROUTINE_SCHEMA` AS `database`
    ,`ROUTINE_TYPE` AS `type`
    ,`SPECIFIC_NAME` AS `name`
    ,`DTD_IDENTIFIER` AS `data_type`
FROM 
    `INFORMATION_SCHEMA`.`ROUTINES`
WHERE
  `definer` LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'))
AND
   `ROUTINE_SCHEMA` = DATABASE()
ORDER BY
    `type`
    ,`name`
;
Jimmix
sumber
-2

Gunakan kueri berikut untuk semua prosedur:

select * from sysobjects 
where type='p'
order by crdate desc
mwesigwa
sumber