Saklı Yordamlar / İşlevler Listesi Mysql Komut Satırı


Yanıtlar:


743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;

2
Mevcut saklı yordam adını bulmanın bir yolu var mı? object_name(@@procid) MySql'de SSMS'de böyle bir şey olduğuna inanıyorum ?
Mohammed Zameer

1
Kullanıcının ayrıcalık EXECUTEveya başka bir hakkı varsa , bu boş liste gösterir.
mjb

211
show procedure status

saklı yordamları gösterecektir.

show create procedure MY_PROC

size bir prosedürün tanımını gösterecektir. Ve

help show

size showkomut için kullanılabilir tüm seçenekleri gösterecektir .


1
Codler'ın işaret ettiği gibi, yardım bir mysql komut satırı talimatı olduğu için yardım gösterisi çalışmaz. SHOW komutu hakkında daha fazla bilgi almak için doğrudan şu adresteki
IvanD

2
Peki neden söylediğini bilmiyorum, yardım gösterisi benim için iyi çalışıyor centos 6.3 MySQL 5.0.95 kullanarak
h4unt3r

Eğer mysqls kendi komut satırı istemcisini kullanırsanız çalışır. Yapmıyorum, bu yüzden çevrimiçi referansı tercih ediyorum.
Ledhund

Bu en iyi cevap
Kolob Kanyonu

87

Akıllıca adlandırma prosedürü için

select name from mysql.proc 

Tüm prosedürleri listelemek için kullanılan aşağıdaki kod ve aşağıdaki kod, prosedür durumunu göster ile aynı sonucu verir

select * from mysql.proc 

4
Bu, özellikle daha küçük bir terminalde iseniz, diğerlerinden çok daha temiz bir sunumdur. Teşekkürler.
user1527227

Bu cevabı select db,name,type from mysql.proc where db<>'sys';biraz daha fazla bilgi ve daha az yerleşik sistem kruftu için geliştirdim.
pbnelson

47

Daha spesifik bir yol:

SHOW PROCEDURE STATUS 
WHERE Db = DATABASE() AND Type = 'PROCEDURE'

4
AND Type = 'PROCEDURE' kullanmadan da
çalışacaktır

33

Yukarıda da belirtildiği gibi,

show procedure status;

Gerçekten prosedürlerin listesi, ancak gösteriler gösterecek tüm bunların, sunucu genelinde.

Yalnızca tek bir veritabanında bulunanları görmek istiyorsanız şunu deneyin:

SHOW PROCEDURE STATUS WHERE Db = 'databasename';

Benzer şekilde, İŞLEV DURUMUNU NEREDE GÖSTER Db = 'veritabanıadı'; size fonksiyonları verir.
David A. Gray


21

Benim tercihim şudur:

  1. Hem fonksiyonları hem de prosedürleri listeler,
  2. Hangisinin hangisi olduğunu bilmeme izin verin,
  3. Prosedürlerin isimlerini ve türlerini verir, başka bir şey vermez ,
  4. Sonuçları geçerli tanımlayıcıya göre değil, geçerli veritabanına göre filtreler
  5. Sonucu sıralar

Bu konudaki diğer cevaplardan bir araya gelerek, sonunda

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

... sonuç olarak şöyle görünür:

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)

Yorumlar da faydalıdır.
dolmen


11

Saklı yordamların tümünü gösterir:

SHOW PROCEDURE STATUS;

Tüm işlevleri gösterir:

SHOW FUNCTION STATUS;

Belirtilen prosedürün tanımını gösterir:

SHOW CREATE PROCEDURE [PROC_NAME];

Verilen veritabanının tüm prosedürlerini gösterir:

SHOW PROCEDURE STATUS WHERE Db = '[db_name]';

9

Praveenkumar_V'un gönderisinde bir varyasyon:

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

..ve bu bazı temizlikten sonra zaman kazanmam gerektiğinden:

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';

8

Yalnızca sizinkileri göstermek için:

SELECT
  db, type, specific_name, param_list, returns
FROM
  mysql.proc
WHERE
  definer LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'));

3
Sütun adlarını, tablo adlarını vb. Küçük harflerle yazarken, SQL anahtar kelimelerini tüm büyük harflere koymak yaygın bir yöntemdir.
Sagar

8
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name'

5

Geçerli Seçili Veritabanı için Mağaza Yordamını listelemek istiyorsanız,

SHOW PROCEDURE STATUS WHERE Db = DATABASE();

mevcut seçili Veritabanına göre Rutinleri listeler

Veritabanınızdaki işlevleri listelemek için GÜNCELLENDİ

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

veritabanınızdaki rutinleri / saklama prosedürlerini listelemek,

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

veritabanınızdaki tabloları listelemek,

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

veritabanınızdaki görünümleri listelemek için,

Yöntem 1:

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

yöntem 2:

select * from information_schema.VIEWS WHERE TABLE_SCHEMA="YOUR DATABASE NAME";

1
                           show procedure status;

bu komutu kullanarak veritabanlarındaki tüm prosedürleri görebilirsiniz


0

Geçerli veritabanının yordamlar listesini en sevdiğim oluşturma: ad, parametre listesi, yorum

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

İşlevler için iade ekleyin:

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

0

Tüm veritabanları için kullanıcının prosedürlerini ve işlevlerini listeleyin :

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`
;

Kullanımdaki veritabanı için kullanıcının prosedürlerini ve işlevlerini listeleyin :

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`
;

-2

Tüm yordamlar için aşağıdaki sorguyu kullanın:

select * from sysobjects 
where type='p'
order by crdate desc
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.