development

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

big-blog 2020. 2. 15. 23:17
반응형

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


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


SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;

show procedure status

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

show create procedure MY_PROC

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

help show

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


현명한보기 절차

select name from mysql.proc 

아래 코드는 모든 절차를 나열하는 데 사용되며 아래 코드는 절차 상태 표시와 동일한 결과를 제공합니다.

select * from mysql.proc 

보다 구체적인 방법 :

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

앞에서 말했다시피,

show procedure status;

실제로 절차 목록을 표시하지만 서버 전체 에서 모든 절차를 표시 합니다 .

단일 데이터베이스의 데이터베이스 만 보려면 다음을 시도하십시오.

SHOW PROCEDURE STATUS WHERE Db = 'databasename';

대안 :

SELECT * FROM INFORMATION_SCHEMA.ROUTINES

내가 선호하는 것은 다음과 같습니다.

  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)

이것을 사용하십시오 :

SHOW PROCEDURE STATUS;

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

당신만을 보여 주려면 :

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

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

모든 저장 프로 시저를 표시합니다.

SHOW PROCEDURE STATUS;

모든 기능을 보여줍니다 :

SHOW FUNCTION STATUS;

지정된 절차의 정의를 보여줍니다.

SHOW CREATE PROCEDURE [PROC_NAME];

주어진 데이터베이스의 모든 절차를 보여줍니다 :

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

현재 선택된 데이터베이스에 대한 저장 프로 시저를 나열하려면

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

                           show procedure status;

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


MySQL8

모든 데이터베이스에 대한 사용자 절차 및 기능을 나열하십시오 .

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

모든 절차에 대해 다음 쿼리를 사용하십시오.

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

참고 URL : https://stackoverflow.com/questions/733349/list-of-stored-procedures-functions-mysql-command-line



반응형