Ссылка на базу данных Oracle. Проверить наличие или перезаписать? - PullRequest
5 голосов
/ 08 февраля 2012

Мне нужно проверить, существует ли ссылка на базу данных, прежде чем я ее создаю. Как я могу это сделать?

Я пишу сценарий SQL, который начинается с этого:

DROP DATABASE LINK mydblink

тогда я создаю один:

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

Конечно, я получу ошибку на первом этапе, если ссылка на базу данных не существует. И если я пропущу первый шаг и просто создаю ссылку на БД, я снова получу сообщение об ошибке, говорящее о том, что оно уже существует с таким именем.

Что я могу сделать, чтобы проверить, существует ли ссылка на базу данных?

Ответы [ 2 ]

8 голосов
/ 08 февраля 2012
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 голосов
/ 09 февраля 2012

У Oracle нет возможности проверить существование перед DROP или CREATE. (Хорошо, хорошо, вы могли бы написать немного PL / SQL, но это, вероятно, больше проблем, чем оно того стоит.) В сценариях Oracle довольно стандартно просто выполнять DROP и CREATE в сценарии. Если ошибки DROP, так и будет. Это не повлияет на выполнение скрипта.

-Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...