mysql.proc 테이블로 저장 함수 전체 정보 조회하기
MySQL에서 특정 데이터베이스에 등록된 저장 함수(Stored Function)의 목록과 상세 정보를 동시에 확인하려면 mysql.proc 테이블을 조회하면 됩니다. 이 테이블에는 함수 이름은 물론 매개변수, 반환 타입, 함수 본문, 작성자, 생성 일시까지 모든 메타데이터가 저장되어 있습니다.
다음 쿼리는 'query'라는 데이터베이스에 포함된 모든 저장 함수의 전체 정보를 세로 형태로 출력하는 예시입니다.
mysql> SELECT * FROM mysql.proc WHERE db = 'query' AND type = 'FUNCTION' \G
실행 결과 예시
*************************** 1. row ***************************
db: query
name: factorial
type: FUNCTION
specific_name: factorial
language: SQL
sql_data_access: CONTAINS_SQL
is_deterministic: YES
security_type: DEFINER
param_list: n DECIMAL(3,0)
returns: decimal(20,0)
body: BEGIN
DECLARE factorial DECIMAL(20,0) DEFAULT 1;
DECLARE counter DECIMAL(3,0);
SET counter = n;
factorial_loop: REPEAT
SET factorial = factorial * counter;
SET counter = counter - 1;
UNTIL counter = 1
END REPEAT;
RETURN factorial;
END
definer: root@localhost
created: 2021-11-16 14:04:48
modified: 2021-11-16 14:04:48
sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
comment:
character_set_client: cp850
collation_connection: cp850_general_ci
db_collation: latin1_swedish_ci
body_utf8: BEGIN
DECLARE factorial DECIMAL(20,0) DEFAULT 1;
DECLARE counter DECIMAL(3,0);
SET counter = n;
factorial_loop: REPEAT
SET factorial = factorial * counter;
SET counter = counter - 1;
UNTIL counter = 1
END REPEAT;
RETURN factorial;
END
*************************** 2. row ***************************
db: query
name: Hello
type: FUNCTION
specific_name: Hello
language: SQL
sql_data_access: CONTAINS_SQL
is_deterministic: YES
security_type: DEFINER
param_list: s CHAR(20)
returns: char(50) CHARSET latin1
body: RETURN CONCAT('Hello, ',s,'!')
definer: root@localhost
created: 2017-11-12 11:42:31
modified: 2017-11-12 11:42:31
sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
comment:
character_set_client: cp850
collation_connection: cp850_general_ci
db_collation: latin1_swedish_ci
body_utf8: RETURN CONCAT('Hello, ',s,'!')
2 rows in set (0.06 sec)
주요 컬럼 의미
출력 결과의 주요 컬럼은 다음과 같습니다.
- db: 함수가 속한 데이터베이스 이름
- name / specific_name: 저장 함수의 이름
- type: 루틴 유형(FUNCTION 또는 PROCEDURE)
- param_list: 입력 매개변수 정의
- returns: 반환값의 데이터 타입
- body: 실제 실행되는 함수 본문(SQL 코드)
- definer: 해당 함수를 생성한 계정
- created / modified: 생성일시와 마지막 수정일시
- sql_mode: 함수 생성 당시 적용된 SQL 모드
MySQL 8.0 이상 버전 참고 사항
mysql.proc 테이블은 MySQL 5.7에서 지원 중단(deprecated)되었으며, MySQL 8.0부터는 완전히 제거되었습니다. 따라서 최신 버전 환경에서는 information_schema.ROUTINES 뷰를 사용하는 것이 좋습니다.
SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = 'query' AND ROUTINE_TYPE = 'FUNCTION'\G
함수 이름과 생성 정보만 간단히 확인하고 싶다면 다음 명령어를 사용할 수도 있습니다.
SHOW FUNCTION STATUS WHERE Db = 'query';