Oracle
 sql >> Database >  >> RDS >> Oracle

Utilizzo di collegamenti al database Oracle senza SQL dinamico illeggibile

Il modo più semplice per evitare l'utilizzo di SQL dinamico sarebbe creare sinonimi.

CREATE OR REPLACE SYNONYM MyTableRemote
   FOR example@sqldat.com_link

Le tue procedure memorizzate farebbero quindi semplicemente riferimento al sinonimo MyTableRemote . Potresti quindi avere un metodo separato che prendesse il nome del collegamento al database come parametro e cambiasse tutti i sinonimi per puntare al collegamento al database.

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;