2012-02-08 80 views
5

我需要檢查一個數據庫鏈接是否已經存在,然後我創建一個。我怎樣才能做到這一點?Oracle數據庫鏈接。檢查是否存在或覆蓋?

我正在寫一開始是這個SQL腳本:

DROP DATABASE LINK mydblink 

然後創建一個:

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

我當然會在第一步中得到一個錯誤,如果數據庫鏈接沒有按不存在。如果我省略了第一步,然後繼續創建數據庫鏈接,我將再次得到一個錯誤,指出它已經存在同名。

我能做些什麼來檢查數據庫鏈接是否已經存在?

回答

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

即使我剛剛創建了一個鏈接,我也沒有從此查詢返回任何內容。伯爵(1)做了什麼? – 2012-02-08 19:58:07

+1

爲什麼不'USER_DB_LINKS'? – Gaius 2012-02-08 20:05:36

+0

@OliverNilsen計數(1)與count(*)確實相同。我可以說count('Oliver')或者count('tbone')。 – tbone 2012-02-08 20:09:39

0

Oracle有沒有辦法DROP之前測試對於存在或CREATE。 (好吧,你可以編寫一些PL/SQL,但是這可能比它的價值更麻煩)。在Oracle腳本中,簡單地在腳本中執行DROP和CREATE是非常標準的。如果DROP出錯,那就這樣吧。它不會影響腳本的執行。

-Mark

+0

我試着將它作爲腳本運行。當它命中DROP DATABASE LINK語句時,它會失敗,並且腳本的其餘部分不會被執行。你能給我一個提示,我可以在PL/SQL中做什麼? – 2012-02-08 20:13:15

+0

您的腳本是否有'每當sqlerror ...'條款?如果你這樣做,那會導致退出。如果你只是在腳本中放入一堆DROP/CREATE,並在SQL * Plus中運行它,它應該可以工作。我會看看用PL/SQL例子更新我的答案。 – 2012-02-08 22:41:11