Pokud mluvíme o dvou databázích na stejném serveru:ano, uložená procedura může přistupovat k jiné databázi. Musíte se ujistit, že uživatel, pod jehož právy se procedura spouští, má potřebná oprávnění ke každé databázi.
Předpokládejme například, že máte dvě databáze na stejném serveru, mydb1 a mydb2 a že každý obsahuje tabulku s názvem messages se stejnou strukturou. Předpokládejme, že chcete přidat uloženou proceduru do mydb2 tím se vyprázdní messages tabulky v mydb2 a zkopíruje obsah messages tabulky v mydb1 . Můžete to udělat takto:
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
Podívejte se, jak jsem plně kvalifikoval tabulky s databázemi, ke kterým patří. Ve skutečnosti můžete namítnout, že jsem zde příliš horlivý, protože jsme určili, že tato uložená procedura bude patřit do mydb2 . Nepotřebuji přidávat kvalifikátor. Pokud by uložená procedura byla v mydb2 .mydb1 databáze, potřeboval bych tyto kvalifikátory, ale naopak bych nepotřeboval kde se objeví.mydb1 .
Aby bylo možné spustit tuto proceduru (možná, abych ji mohl definovat?), musel bych se ujistit, že můj uživatel má DELETE a INSERT oprávnění na mydb2 a také SELECT oprávnění na mydb1 .
Databáze na různých serverech zní poněkud komplikovaněji.