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.