รายการของกระบวนงาน / ฟังก์ชันที่เก็บบรรทัดคำสั่ง Mysql


474

ฉันจะดูรายการของโพรซีเดอร์ที่เก็บไว้หรือฟังก์ชั่นที่เก็บไว้ใน mysql เช่นบรรทัดคำสั่งshow tables;หรือshow databases;คำสั่ง

คำตอบ:


743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;

2
มีวิธีการค้นหาชื่อขั้นตอนการจัดเก็บปัจจุบันหรือไม่? ฉันเชื่อว่ามันobject_name(@@procid) อยู่ใน SSMS อะไรเช่นนี้ใน MySql?
Mohammed Zameer

1
หากผู้ใช้มีสิทธิ์EXECUTEหรืออื่น ๆ สิ่งนี้จะแสดงรายการที่ว่างเปล่า
mjb

211
show procedure status

จะแสดงขั้นตอนการจัดเก็บ

show create procedure MY_PROC

จะแสดงคำจำกัดความของขั้นตอน และ

help show

จะแสดงตัวเลือกทั้งหมดที่มีให้สำหรับshowคำสั่ง


1
ดังที่ Codler ชี้ให้เห็นว่าวิธีใช้ไม่ทำงานเนื่องจากวิธีใช้เป็นคำสั่ง mysql หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับคำสั่ง SHOW ให้ไปที่หน้าเอกสารของ MySQL ที่: dev.mysql.com/doc/refman/5.1/en/show.html
IvanD

2
ฉันไม่แน่ใจว่าทำไมคุณถึงพูดอย่างนั้นช่วยโชว์ได้ผลดีสำหรับฉันด้วย MySQL 5.0.95 บน centos 6.3
h4unt3r

มันทำงานได้ถ้าคุณใช้ไคลเอนต์บรรทัดคำสั่งของ mysqls ฉันทำไม่ได้ดังนั้นฉันจึงชอบการอ้างอิงออนไลน์
Ledhund

นี่เป็นคำตอบที่ดีที่สุด
Kolob Canyon

87

สำหรับขั้นตอนการดูในชื่อฉลาด

select name from mysql.proc 

โค้ดด้านล่างที่ใช้เพื่อแสดงรายการขั้นตอนทั้งหมดและโค้ดด้านล่างให้ผลเหมือนกับการแสดงสถานะขั้นตอน

select * from mysql.proc 

4
นี่เป็นการนำเสนอที่สะอาดกว่ามาก ๆ โดยเฉพาะอย่างยิ่งถ้าคุณอยู่ในอาคารขนาดเล็ก ขอบคุณ
user1527227

ฉันพัฒนาคำตอบนี้select db,name,type from mysql.proc where db<>'sys';เพื่อให้ได้ข้อมูลมากขึ้นและระบบ kruft ในตัวน้อยลง
pbnelson

47

วิธีเฉพาะเจาะจงมากขึ้น:

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

4
มันจะทำงานโดยไม่ใช้ AND Type = 'PROCEDURE' เช่นกัน
normalUser

33

ดังกล่าวข้างต้น

show procedure status;

จะแสดงรายการของโพรซีเดอร์ แต่จะแสดงทั้งหมดในเซิร์ฟเวอร์

ถ้าคุณต้องการที่จะเห็นเพียงคนเดียวในฐานข้อมูลเดียวลองนี้:

SHOW PROCEDURE STATUS WHERE Db = 'databasename';

ในทำนองเดียวกันแสดงสถานะการทำงานที่ Db = 'databasename'; ให้ฟังก์ชั่น
David A. Gray


21

ความชอบของฉันสำหรับสิ่งที่:

  1. แสดงรายการฟังก์ชั่นและขั้นตอน
  2. ให้ฉันรู้ว่าอันไหน
  3. จะช่วยให้ขั้นตอนชื่อและประเภทและไม่มีอะไรอื่น ,
  4. กรองผลลัพธ์ตามฐานข้อมูลปัจจุบันไม่ใช่ตัวกำหนดปัจจุบัน
  5. เรียงลำดับผลลัพธ์

ฉันต่อท้ายคำตอบอื่น ๆ เข้าด้วยกันในหัวข้อนี้

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

... ซึ่งลงท้ายด้วยผลลัพธ์ที่มีลักษณะเช่นนี้:

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)

ความเห็นก็มีประโยชน์เช่นกัน
dolmen


11

แสดงกระบวนงานที่เก็บไว้ทั้งหมด:

SHOW PROCEDURE STATUS;

แสดงฟังก์ชั่นทั้งหมด:

SHOW FUNCTION STATUS;

แสดงนิยามของโพรซีเดอร์ที่ระบุ:

SHOW CREATE PROCEDURE [PROC_NAME];

แสดงขั้นตอนทั้งหมดของฐานข้อมูลที่ระบุ:

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

9

รูปแบบที่โพสต์ของ Praveenkumar_V:

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

.. และนี่เป็นเพราะฉันต้องการประหยัดเวลาหลังจากการดูแลทำความสะอาด:

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

หากต้องการแสดงเฉพาะของคุณ:

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

3
เป็นเรื่องธรรมดาที่จะใส่คำหลัก SQL ลงในตัวพิมพ์ใหญ่ทั้งหมดในขณะที่ใส่ชื่อคอลัมน์ชื่อตาราง ฯลฯ เป็นตัวพิมพ์เล็ก
ซาก้า


5

หากคุณต้องการแสดงขั้นตอนการจัดเก็บสำหรับฐานข้อมูลที่เลือกในปัจจุบัน

SHOW PROCEDURE STATUS WHERE Db = DATABASE();

มันจะแสดงรายการงานประจำตามฐานข้อมูลที่เลือกในปัจจุบัน

อัปเดต เพื่อแสดงรายการฟังก์ชันในฐานข้อมูลของคุณ

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

เพื่อแสดงรายการขั้นตอนการปฏิบัติ / การจัดเก็บในฐานข้อมูลของคุณ

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

เพื่อแสดงรายการตารางในฐานข้อมูลของคุณ

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

เพื่อแสดงรายการมุมมองในฐานข้อมูลของคุณ

วิธีที่ 1:

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

วิธีที่ 2:

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


0

การแสดงที่ชื่นชอบของรายการขั้นตอนของฐานข้อมูลปัจจุบัน: ชื่อรายการพารามิเตอร์ความคิดเห็น

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

เพิ่มผลตอบแทนสำหรับฟังก์ชั่น:

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

0

ทำรายการขั้นตอนและฟังก์ชั่นของผู้ใช้สำหรับฐานข้อมูลทั้งหมด :

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

ทำรายการขั้นตอนและฟังก์ชั่นของผู้ใช้สำหรับฐานข้อมูลที่ใช้งานอยู่ :

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

ใช้แบบสอบถามต่อไปนี้สำหรับขั้นตอนทั้งหมด:

select * from sysobjects 
where type='p'
order by crdate desc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.