그래, 테이블에있는 information_scheme
데이터베이스의 테이블에는 모든 데이터베이스 목록이 포함되어 있습니다. 따라서, 당신이 절차를에 실행하려는 모든 데이터베이스의 목록을 얻기 위해, 당신은 할 수 있습니다 :
SELECT schema_name FROM information_schema.schemata
WHERE schema_name LIKE 'application_%';
다음 단계는 절차의 일종으로이 일을하는 것입니다. 불행하게도, MySQL은 프로 시저를 생성하는 경우 동적으로 생성 된 SQL을 실행하는 것이 효율적이지 않습니다. 따라서 필자가 생각해 낸 순수 SQL 버전은 약간 지저분하다. 그것은 먼저 호출 후, '발전기'절차를 작성하고, 마지막으로 발전기의 결과를 실행에 온다 :
CALL create_procedures();
이 :
delimiter //
DROP PROCEDURE IF EXISTS create_procedures//
CREATE PROCEDURE create_procedures()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE db VARCHAR(255);
DECLARE appDBs CURSOR FOR SELECT schema_name FROM information_schema.schemata WHERE schema_name LIKE 'application_%';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
SET @procName = "simpleproc"; -- Change this to your proc name
SET @output = "delimiter //";
OPEN appDBs;
REPEAT
FETCH appDBs INTO db;
IF NOT done THEN
-- Replace this procedure declaration with your procedure.
-- Make sure to keep the ',db,' syntax there.
-- You should really only have to change the parameters
-- and the stuff between the BEGIN and END clauses.
SET @output = CONCAT(@output,'
DROP PROCEDURE IF EXISTS ',db,'.',@procName,'//
CREATE PROCEDURE ',db,'.',@procName,'()
BEGIN
SELECT 1;
END//');
END IF;
UNTIL done END REPEAT;
CLOSE appDBs;
SET @output = CONCAT(@output,'\ndelimiter ;');
SELECT @output AS procs;
END//
delimiter ;
이 절차가 생성 된 후를, 프로 시저를 호출 모든 application_%
테이블에 대한 프로 시저를 만드는 데 필요한 SQL이 포함 된 단일 열을 출력합니다. 전체 열을 선택하고 (오히려 길어질 것입니다) 새 SQL 쿼리로 실행하십시오.
필자는 SQLyog를 한번도 사용해 본 적이 없지만 제대로 작동하지 않으면 MySQL의 명령 줄 인터페이스를 사용해야 할 수도 있습니다. (<dbname>
는 사용자가 액세스 권한을 가진 모든 데이터베이스 수 있습니다) 적절한 값으로 <username>
및 <dbname>
을 변경
mysql -u <username> -p --database=<dbname> -N -r -B <input.sql> proc.sql
mysql -u <username> -p --database=<dbname> < proc.sql
:
CALL create_procedures();
그런 다음 다음 명령을 실행합니다 : 첫째, 파일 포함 input.sql
를 생성합니다. 오류가 발생하지 않으면 모든 데이터베이스에 대해 정의 된 저장 프로 시저가 있어야합니다.
대단히 감사합니다. SQLyog에서이 작업을 수행하면 시간이 많이 절약됩니다. –