mysql 데이터베이스에 프로 시저 또는 함수가 있는지 어떻게 알 수 있습니까?


18

mysql 데이터베이스에 프로 시저 또는 함수가 있는지 어떻게 알 수 있습니까? 발견 옵션이 있습니까? 같은 show procedures;(예를 들어 show tables;)

답변:



26

이 유형의 질문에 대한 일반적인 대답은 모든 MySQL 데이터베이스에 모든 메타 데이터를 쿼리 할 수있는 테이블로 포함하는 information_schema 라는 데이터베이스가 포함되어 있다는 것 입니다.

원하는 정보는 ROUTINES 테이블에 있습니다. 예를 들면 다음과 같습니다.

SELECT ROUTINE_NAME 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE 
       ROUTINE_TYPE="PROCEDURE" 
   AND ROUTINE_SCHEMA="dbname"
;

4
이것은 Oracle 및 SQL Server에서도 작동합니다. 나는 그것이 ANSI 표준의 일부라고 생각합니다
Conrad Frix

1
권한에 의해 영향을받을 수 있습니다. 액세스 할 수있는 프로 시저 목록이 표시됩니다. 하나의 연결에 대한 부분 목록 (더 제한된 사용자 이름 사용)과 다른 연결에 대한 다른 목록을 얻었을 때 잠시 잠에서 벗어났습니다.
Geoffrey Wiseman

1

다음 기능을 사용하십시오.

DELIMITER $$

DROP FUNCTION IF EXISTS f_exists_procedure;$$
CREATE FUNCTION f_exists_procedure(in_name VARCHAR(255))
RETURNS BIT DETERMINISTIC
BEGIN
    SELECT COUNT(1) INTO @f_result
    FROM information_schema.ROUTINES as info
    WHERE info.ROUTINE_SCHEMA = DATABASE() AND info.ROUTINE_TYPE = 'PROCEDURE' AND info.ROUTINE_NAME = in_name;

    RETURN @f_result;

END;$$

DELIMITER ;

1
이것은 약간 복잡합니다. Gaius의 답변을 참조하십시오.
dezso

0

가이우스의 답변에서 분리

SELECT IF( COUNT(*) = 0, 'F' , 'T' ) AS ProcedureExists
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_SCHEMA = 'someDBName'
AND ROUTINE_TYPE = 'PROCEDURE'
AND UCASE(ROUTINE_NAME) = UCASE('someProcedureName');
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.