Jeśli mówimy o dwóch bazach danych na tym samym serwerze:tak, procedura składowana może uzyskać dostęp do innej bazy danych. Musisz upewnić się, że użytkownik, z którego uprawnień jest uruchamiana procedura, ma niezbędne uprawnienia w każdej bazie danych.
Załóżmy na przykład, że masz dwie bazy danych na tym samym serwerze, mydb1 i mydb2 i że każda zawiera tabelę o nazwie messages o tej samej strukturze. Załóżmy, że chcesz dodać procedurę składowaną do mydb2 który opróżnia messages tabela w mydb2 i kopiuje zawartość messages tabela w mydb1 . Możesz to zrobić:
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
Zobacz, jak w pełni zakwalifikowałem tabele z bazami danych, do których należą. W rzeczywistości można argumentować, że jestem tutaj nadgorliwy, ponieważ określiliśmy, że ta procedura składowana będzie należeć do mydb2 . Nie muszę dodawać kwalifikator. Jeśli procedura składowana znajdowała się w mydb2 .mydb1 bazy danych, potrzebowałbym tych kwalifikatorów, ale odwrotnie nie potrzebowałbym gdzie się pojawia.mydb1 .
Aby móc uruchomić tę procedurę (być może aby móc ją zdefiniować?), muszę się upewnić, że mój użytkownik ma DELETE i INSERT uprawnienia do mydb2 , a także SELECT uprawnienia do mydb1 .
Bazy danych na różnych serwerach wydają się bardziej skomplikowane.