Si estamos hablando de dos bases de datos en el mismo servidor:sí, un procedimiento almacenado puede acceder a otra base de datos. Debe asegurarse de que el usuario bajo cuyos privilegios se ejecuta el procedimiento tenga los privilegios necesarios en cada base de datos.
Por ejemplo, suponga que tiene dos bases de datos en el mismo servidor, mydb1
y mydb2
, y que cada uno contiene una tabla llamada messages
con la misma estructura. Suponga que desea agregar un procedimiento almacenado a mydb2
que vacía los messages
tabla en mydb2
y copia el contenido de los messages
tabla en mydb1
. Podrías hacer esto:
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
Vea cómo he calificado completamente las tablas con las bases de datos a las que pertenecen. De hecho, podría argumentar que estoy siendo demasiado entusiasta aquí, porque especificamos que este procedimiento almacenado pertenecerá a mydb2
. No necesito agregar
Calificatorio. Si el procedimiento almacenado estuviera en mydb2
.mydb1
base de datos, necesitaría esos calificadores, pero a la inversa no necesitaría
donde aparece.mydb1
.
Para poder ejecutar este procedimiento (¿posiblemente para poder definirlo?), necesito asegurarme de que mi usuario tiene DELETE
y INSERT
privilegios en mydb2
, y también SELECT
privilegios en mydb1
.
Las bases de datos en diferentes servidores suenan bastante más complicadas.