sql >> Base de Datos >  >> RDS >> Oracle

Uso de enlaces de base de datos de Oracle sin SQL dinámico ilegible

La forma más sencilla de evitar el uso de SQL dinámico sería crear sinónimos.

CREATE OR REPLACE SYNONYM MyTableRemote
   FOR [email protected]_link

Sus procedimientos almacenados simplemente se referirían al sinónimo MyTableRemote . Entonces podría tener un método separado que tomara el nombre del enlace de la base de datos como parámetro y cambiara todos los sinónimos para apuntar al enlace de la base de datos.

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;