저장 프로 시저 / 함수 목록 Mysql Command Line


474

mysql 명령 줄 show tables;이나 show databases;명령 과 같은 저장 프로 시저 또는 저장 함수 목록을 어떻게 볼 수 있습니까 ?

답변:


743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;

2
현재 저장 프로 시저 이름을 찾는 방법이 있습니까? object_name(@@procid) MySql에서 SSMS에 있다고 생각 합니까?
Mohammed Zameer 2016 년

1
사용자에게의 권한이 EXECUTE있거나 그렇지 않으면 빈 목록이 표시됩니다.
mjb

211
show procedure status

저장 프로 시저가 표시됩니다.

show create procedure MY_PROC

절차의 정의를 보여줍니다. 과

help show

show명령에 사용 가능한 모든 옵션이 표시됩니다 .


1
Codler가 지적한 것처럼 help show는 mysql 명령 줄 명령이므로 help show가 작동하지 않습니다. show 명령에 대한 자세한 정보를 얻으려면에서 MySQL의 문서 페이지로 바로 이동합니다 dev.mysql.com/doc/refman/5.1/en/show.html
IvanD

2
글쎄, 왜 당신이 그렇게 말하는지 잘 모르겠습니다. centos 6.3에서 MySQL 5.0.95를 사용하여 show show me가 잘 작동합니다
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. Grey


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)

의견도 도움이됩니다.
고인돌


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 키워드를 모두 대문자로 입력하는 것이 일반적입니다.
Sagar

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

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

1
                           show procedure status;

이 명령을 사용하면 데이터베이스의 모든 절차를 볼 수 있습니다


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.