Oracle
 sql >> Base de données >  >> RDS >> Oracle

Utilisation de liens de base de données Oracle sans SQL dynamique illisible

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;