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.