Se estamos falando de dois bancos de dados no mesmo servidor:sim, um procedimento armazenado pode acessar outro banco de dados. Você deve certificar-se de que o usuário sob cujos privilégios o procedimento está sendo executado tenha os privilégios necessários em cada banco de dados.
Por exemplo, suponha que você tenha dois bancos de dados no mesmo servidor,
mydb1 e mydb2 , e que cada um contém uma tabela chamada messages com a mesma estrutura. Suponha que você queira adicionar um procedimento armazenado em mydb2 que esvazia as messages tabela em mydb2 e copia o conteúdo das messages tabela em mydb1 . Você poderia fazer isso:CREATE PROCEDURE `SynchroniseMessages` ()
LANGUAGE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY DEFINER
BEGIN
DELETE FROM `mydb2`.`messages`;
INSERT INTO
`mydb2`.`messages`
SELECT * FROM `mydb1`.`messages`;
END
Veja como qualifiquei totalmente as tabelas com os bancos de dados aos quais pertencem. Na verdade, você pode argumentar que estou sendo muito zeloso aqui, porque especificamos que esse procedimento armazenado pertencerá a
mydb2 . Não preciso adicionar o mydb2 . qualificador. Se o procedimento armazenado estivesse no mydb1 banco de dados, eu precisaria desses qualificadores, mas, por outro lado, não precisaria do mydb1 . onde aparece. Para poder executar este procedimento (possivelmente para poder defini-lo?), preciso ter certeza de que meu usuário tem
DELETE e INSERT privilégios em mydb2 , e também SELECT privilégios em mydb1 . Bancos de dados em diferentes servidores soam bem mais complicados.