Danh sách các thủ tục / chức năng được lưu trữ Dòng lệnh Mysql


474

Làm thế nào tôi có thể xem danh sách các thủ tục được lưu trữ hoặc các hàm được lưu trữ trong dòng lệnh mysql như show tables;hoặc show databases;các lệnh.

Câu trả lời:


743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;

2
Có cách nào để tìm tên thủ tục lưu trữ hiện tại? Tôi tin rằng nó có object_name(@@procid) trong SSMS bất cứ thứ gì như thế này trong MySql?
Mohammed Zameer

1
Nếu người dùng có đặc quyền EXECUTE, hoặc nếu không, điều này sẽ hiển thị danh sách trống.
mjb

211
show procedure status

sẽ chỉ cho bạn các thủ tục được lưu trữ.

show create procedure MY_PROC

sẽ cho bạn thấy định nghĩa của một thủ tục. Và

help show

sẽ hiển thị cho bạn tất cả các tùy chọn có sẵn cho showlệnh.


1
Như Codler đã chỉ ra, chương trình trợ giúp không hoạt động vì trợ giúp là một hướng dẫn dòng lệnh mysql. Để có thêm thông tin về lệnh SHOW, hãy truy cập thẳng vào trang tài liệu MySQL tại: dev.mysql.com/doc/refman/5.1/en/show.html
IvanD

2
Chà, tôi không chắc tại sao bạn nói vậy, giúp trình diễn hoạt động tốt với tôi khi sử dụng MySQL 5.0.95 trên centos 6.3
h4unt3r

Nó hoạt động nếu bạn sử dụng máy khách dòng lệnh riêng của mysqls. Tôi không, vì vậy tôi thích tham khảo trực tuyến.
Ledhund

Đây là câu trả lời hay nhất
Kolob Canyon

87

Để xem thủ tục trong tên khôn ngoan

select name from mysql.proc 

mã bên dưới được sử dụng để liệt kê tất cả các thủ tục và mã bên dưới có cùng kết quả như hiển thị trạng thái thủ tục

select * from mysql.proc 

4
đây là một bản trình bày sạch sẽ hơn nhiều so với những cái khác đặc biệt là nếu bạn đang ở trong một thiết bị đầu cuối nhỏ hơn. cảm ơn.
dùng1527227

Tôi đã phát triển câu trả lời này thành select db,name,type from mysql.proc where db<>'sys';một chút thông tin và ít tích hợp hệ thống tích hợp.
pbnelson

47

Một cách cụ thể hơn:

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

4
nó cũng sẽ hoạt động mà không cần sử dụng AND Type = 'PROCEDURE',
normalUser

33

Như được đề cập ở trên,

show procedure status;

Thực sự sẽ hiển thị một danh sách các thủ tục, nhưng hiển thị tất cả chúng, trên toàn máy chủ.

Nếu bạn chỉ muốn xem những cái trong một cơ sở dữ liệu, hãy thử điều này:

SHOW PROCEDURE STATUS WHERE Db = 'databasename';

Tương tự, SHOW STATUS STATUS WHERE Db = 'databasename'; cung cấp cho bạn các chức năng.
David A. Gray


21

Sở thích của tôi là một cái gì đó:

  1. Liệt kê cả chức năng và thủ tục,
  2. Cho tôi biết đó là cái gì,
  3. Cung cấp tên và loại thủ tục và không có gì khác ,
  4. Lọc kết quả theo cơ sở dữ liệu hiện tại, không phải bộ lọc hiện tại
  5. Sắp xếp kết quả

Khâu lại với nhau từ các câu trả lời khác trong chủ đề này, tôi kết thúc với

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

... Kết thúc bạn với kết quả như thế này:

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)

Bình luận cũng hữu ích.
heo


11

Hiển thị tất cả các thủ tục được lưu trữ:

SHOW PROCEDURE STATUS;

Hiển thị tất cả các chức năng:

SHOW FUNCTION STATUS;

Hiển thị định nghĩa của thủ tục được chỉ định:

SHOW CREATE PROCEDURE [PROC_NAME];

Hiển thị cho bạn tất cả các thủ tục của cơ sở dữ liệu đã cho:

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

9

Một biến thể trên bài đăng của Praveenkumar_V:

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

.. và điều này bởi vì tôi cần tiết kiệm thời gian sau khi dọn phòng:

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

Để chỉ hiển thị của bạn:

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

3
Đó là quy ước chung để đặt các từ khóa SQL trong tất cả các chữ hoa, trong khi đặt tên cột, tên bảng, v.v.
Sagar

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

5

Nếu bạn muốn liệt kê Quy trình lưu trữ cho Cơ sở dữ liệu được chọn hiện tại,

SHOW PROCEDURE STATUS WHERE Db = DATABASE();

nó sẽ liệt kê các Routine dựa trên cơ sở dữ liệu được chọn hiện tại

CẬP NHẬT để liệt kê các chức năng trong cơ sở dữ liệu của bạn

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

để liệt kê các thói quen / thủ tục lưu trữ trong cơ sở dữ liệu của bạn,

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

để liệt kê các bảng trong cơ sở dữ liệu của bạn,

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

để liệt kê các khung nhìn trong cơ sở dữ liệu của bạn,

phương pháp 1:

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

phương pháp 2:

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

1
                           show procedure status;

sử dụng lệnh này, bạn có thể thấy tất cả các thủ tục trong cơ sở dữ liệu


0

Kết xuất ưa thích của tôi về danh sách thủ tục của cơ sở dữ liệu hiện tại: tên, danh sách tham số, nhận xét

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

Thêm trả về cho các chức năng:

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

0

Danh sách các quy trình và chức năng của người dùng cho tất cả các cơ sở dữ liệu :

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

Liệt kê các quy trình và chức năng của người dùng cho cơ sở dữ liệu đang sử dụng :

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

Sử dụng truy vấn sau đây cho tất cả các thủ tục:

select * from sysobjects 
where type='p'
order by crdate desc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.