MySQL에서 저장 프로 시저 / 함수 정의보기


79

sp_helptextMicrosoft SQL Server 와 유사한 저장 프로 시저 또는 함수의 정의를 보는 MySQL 명령은 무엇입니까 ?

SHOW PROCEDURE STATUS사용 가능한 절차 목록이 표시 된다는 것을 알고 있습니다. 단일 절차의 정의를 확인해야합니다.


2
SELECT * FOM mysql.proc \ G;
— zloctb

답변:


123
SHOW CREATE PROCEDURE <name>

CREATE PROCEDURE문을 사용하여 만든 이전에 정의 된 저장 프로 시저의 텍스트를 반환합니다 . 스왑 PROCEDURE에 대한 FUNCTION저장 기능.


내가 받고 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
— 있어요

+1 이제 세 번이나 도움이되었습니다. 언젠가는 그 명령을 마음으로 기억할 것입니다.
— 등록 된 사용자

3
Mysql이 --with-debug로 컴파일되지 않으면 작동하지 않습니다. 따라서 AWS RDS 인스턴스에서는 작동하지 않습니다. show create 절차 'xxxx'를 시도하십시오. 아래 @valli로
— ChrisR

39

이것을 사용할 수 있습니다 :

SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";

9
불행히도 ROUTINE_DEFINITION은 저장 프로 시저의 IN / OUT 매개 변수 나 반환 값을 포함하지 않습니다 (SHOW CREATE PROCEDURE는 포함). 이를 얻으려면 mysql.proc에 대해 직접 쿼리 할 수 ​​있습니다. 예를 들어 SELECT param_list, returns, body FROM mysql.proc WHERE db = 'yourdb'AND type = 'PROCEDURE'및 name = 'procedurename';
— GregW 2011

에서 해당 쿼리를 @GregW mysql.proc에 대한 반환 모양 param_list, returns그리고 body... 난 ... 당신이 그것을 어떻게 읽을 수없는 짓을 해요?
— Dmitry Efimenko 2015 년

NVM 발견 대답 여기
— 드미트리 에피 멘코

2
쿼리를 실행하는 사용자가 DEFINER가 아니고 보안이 DEFINER로 설정된 경우 ROUTINE_DEFINITION은 null이됩니다. 보안이 INVOKER로 설정되어 있으면 문제가 없습니다. 매개 변수를 가져올 수도 있습니다 SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_SCHEMA='$dbName' AND SPECIFIC_NAME=\"{$row['ROUTINE_NAME']}\" AND NOT PARAMETER_MODE IS NULL ORDER BY ORDINAL_POSITION;
— Peter Brand

정정, 보안이 INVOKER로 설정되어 있어도 쿼리를 실행하는 사용자가 정의 자와 동일하지 않으면 정의가 널이됩니다.
— Peter Brand

10
SHOW CREATE PROCEDURE proc_name;

정의를 반환합니다. proc_name


이것은 절차의 텍스트도 표시하지 않습니다.
— posfan12

나를 위해 작동합니다. AWS / RDS 서버리스를 사용하고 있습니다. Proc 텍스트는 Create Procedure 열을 표시합니다.
— KingAndrew

10

절차 목록을 알고 싶다면 다음 명령을 실행할 수 있습니다.

show procedure status;

프로 시저 및 해당 정의 자 목록을 제공합니다. 그런 다음 show create procedure <procedurename>;


7

mysql 데이터베이스에서 table proc 을 사용할 수 있습니다 .

mysql> SELECT body FROM mysql.proc
WHERE db = 'yourdb' AND name = 'procedurename' ;

mysql.proc에 대한 선택 권한이 있어야합니다 .

mysql> GRANT SELECT ON mysql.proc TO 'youruser'@'yourhost' IDENTIFIED BY 'yourpass' ;

5

같은 것 :

DELIMITER //

CREATE PROCEDURE alluser()
BEGIN
   SELECT *
   FROM users;
END //

DELIMITER ;

보다:

SHOW CREATE PROCEDURE alluser

결과를 제공합니다.

'alluser', 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER', 'CREATE DEFINER=`root`@`localhost` PROCEDURE `alluser`()
BEGIN
   SELECT *
   FROM users;
END'

3

모든 절차에 대한 개요를 얻거나 SHOW CREATE PROCEDURE에 표시된 절차 헤더 만 가져 오는 문제에 직면 한 경우 신속하고 해킹 된 대안 솔루션 :

mysqldump --user=<user> -p --no-data --routines <database>

테이블 설명도 내보내지만 데이터는 내 보내지 않습니다. 알 수 없거나 잊혀진 스키마를 스니핑하는 데 적합합니다 ...;)


-2

완벽합니다.

SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
    WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";

2
SE에 오신 것을 환영합니다! 귀하의 답변, 특히 기존의 다른 답변과 다른 점에 대해 설명해주십시오.
— anderas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.