Si on parle de deux bases de données sur le même serveur :oui, une procédure stockée peut accéder à une autre base de données. Vous devez vous assurer que l'utilisateur sous les privilèges duquel la procédure est exécutée dispose des privilèges nécessaires sur chaque base de données.
Par exemple, supposons que vous ayez deux bases de données sur le même serveur, mydb1
et mydb2
, et que chacun contient une table nommée messages
avec la même structure. Supposons que vous souhaitiez ajouter une procédure stockée à mydb2
qui vide les messages
table dans mydb2
et copie le contenu des messages
table dans mydb1
. Vous pouvez faire ceci :
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
Voyez comment j'ai entièrement qualifié les tables avec les bases de données auxquelles elles appartiennent. En fait, vous pourriez dire que je suis trop zélé ici, car nous avons spécifié que cette procédure stockée appartiendra à mydb2
. Je n'ai pas besoin d'ajouter le
qualificatif. Si la procédure stockée était dans le mydb2
.mydb1
base de données, j'aurais besoin de ces qualificateurs, mais à l'inverse je n'aurais pas besoin du
où il apparaît.mydb1
.
Afin de pouvoir exécuter cette procédure (éventuellement afin de pouvoir la définir ?), Je dois m'assurer que mon utilisateur a DELETE
et INSERT
privilèges sur mydb2
, et aussi SELECT
privilèges sur mydb1
.
Les bases de données sur différents serveurs semblent un peu plus compliquées.