2012-02-08 4 views
5

데이터베이스 링크를 만들기 전에 데이터베이스 링크가 이미 있는지 확인해야합니다. 어떻게해야합니까?Oracle 데이터베이스 링크. 존재 여부를 확인하거나 덮어 씁니까?

나는이와 함께 시작하는 SQL 스크립트를 쓰고 있어요 :

DROP DATABASE LINK mydblink 

은 내가 하나 만들 : 나는 물론 첫 번째 단계에서 오류가 발생합니다

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

데이터베이스 링크 아무튼 경우 존재하지 않습니다. 첫 번째 단계를 생략하고 db 링크를 만드는 경우 동일한 이름으로 이미 존재한다는 오류가 다시 발생합니다.

데이터베이스 링크가 이미 존재하는지 확인하려면 어떻게해야합니까? (테스트되지 않은) 예를 들어

답변

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

:

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

방금 ​​링크를 만들었지 만이 쿼리에서 아무 것도 반환되지 않았습니다. count (1)는 무엇을합니까? –

+1

왜 'USER_DB_LINKS'가 아니니? – Gaius

+0

@OliverNilsen count (1)은 count (*)와 실제로 동일합니다. 나는 카운트 ('올리버') 또는 카운트 ('tbone')라고 말할 수있었습니다. – tbone

0

오라클은 DROP 전에 존재 여부를 테스트하거나 만들 수있는 방법이 없습니다. 오라클 스크립팅에서는 스크립트에서 DROP와 CREATE를 모두 수행하는 것이 꽤 표준입니다. (PL, SQL을 작성할 수는 있지만 오히려 가치가 있습니다.) DROP 오류가 발생하면 오류가 발생합니다. 스크립트의 실행에는 영향을 미치지 않습니다.

-Mark

+0

스크립트로 실행 해 보았습니다. DROP DATABASE LINK 문에 도달하면 실패하고 나머지 스크립트는 실행되지 않습니다. PL/SQL에서 할 수있는 것을 알려주시겠습니까? –

+0

스크립트에 'sqlerror ...'절이 있습니까? 그렇게하면 출구가 생길 수 있습니다. 스크립트에 DROP/CREATE를 넣고 SQL * Plus에서 실행하면 작동합니다. PL/SQL 예제를 사용하여 내 대답을 업데이트하는 방법을 살펴 보겠습니다. –