2012-02-08 18 views
5

Necesito comprobar si ya existe un enlace de base de datos antes de crear uno. ¿Cómo puedo hacer eso?Enlace de la base de datos de Oracle. ¿Comprobar existencia o sobrescribir?

Estoy escribiendo un script SQL que se inicia con esta:

DROP DATABASE LINK mydblink 

entonces crear una:

CREATE DATABASE LINK mydblink 
CONNECT TO testuser 
IDENTIFIED BY mypswd 
USING 'mypersonaldb' 

yo, por supuesto, obtener un error en el primer paso si el enlace de la base de datos doesn 't existe. Y si omito el primer paso y sigo adelante y creo un enlace de db, nuevamente recibiré un error que dice que ya existe con el mismo nombre.

¿Qué puedo hacer para verificar si el enlace de la base de datos ya existe?

Respuesta

8
select count(1) from dba_objects where object_type = 'DATABASE LINK' and object_name = 'ARGUS51P'; 

Por ejemplo (no probado):

declare 
    l_link_cnt pls_integer := 0; 
    l_sql varchar2(32767); 
begin 
    -- link creation sql (fill in details of how you want this created) 
    l_sql := 'create public database link ...'; 

    select count(1) 
    into l_link_cnt 
    from dba_objects 
    where object_type = 'DATABASE LINK' 
    and object_name = 'SOME_LINK'; 

    -- create link if it doesn't exist yet 
    if (l_link_cnt = 0) then 
    -- create link 
    execute immediate l_sql; 

    end if; 

end; 
+0

No he obtenido nada de esta consulta aunque acabo de crear un enlace. ¿Qué cuenta (1) hacer? –

+1

¿Por qué no 'USER_DB_LINKS' ?? – Gaius

+0

@OliverNilsen count (1) es realmente igual que count (*). Podría haber dicho conteo ('Oliver') o conteo ('tbone'). – tbone

0

Oracle no tiene manera de probar la existencia antes de una gota o crear. (Bueno, vale, podrías escribir algo de PL/SQL, pero probablemente sea más problemático de lo que vale). En las secuencias de comandos de Oracle, es bastante estándar simplemente hacer tanto el DROP como el CREATE en un script. Si el DROP se equivoca, que así sea. No afectará la ejecución del script.

-Mark

+0

Intenté ejecutarlo como un script. Cuando golpea la declaración DROP DATABASE LINK falla, y el resto del script no se ejecuta. ¿Me puede dar una pista de lo que podría hacer en PL/SQL? –

+0

¿Su script tiene una cláusula 'always sqlerror ...'? Porque si lo haces, eso está causando la salida. Si pone un montón de DROP/CREATE en un script y lo ejecuta en SQL * Plus, debería funcionar. Veré la actualización de mi respuesta con el ejemplo de PL/SQL. –

Cuestiones relacionadas