Le moyen le plus simple d'éviter d'utiliser du SQL dynamique serait de créer des synonymes.
CREATE OR REPLACE SYNONYM MyTableRemote
FOR [email protected]_link
Vos procédures stockées feraient alors simplement référence au synonyme MyTableRemote
. Vous pourriez alors avoir une méthode distincte qui prendrait le nom du lien de la base de données comme paramètre et modifierait tous les synonymes pour qu'ils pointent vers le lien de la base de données.
PROCEDURE replace_synonyms( p_db_link IN VARCHAR2 )
AS
BEGIN
-- Adjust the query to identify all the synonyms that you want to recreate
FOR syn IN (SELECT *
FROM user_synonyms
WHERE db_link IS NOT NULL)
LOOP
EXECUTE IMMEDIATE
'CREATE OR REPLACE SYNONYM ' || syn.synonym_name ||
' FOR ' || syn.table_owner || '.' || syn.table_name || '@' || p_db_link;
END LOOP;
END;