Ссылка на базу данных Oracle. Проверить на существование или переписать?


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

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

DROP DATABASE LINK mydblink

Затем я создаю один:

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

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

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

2   5   2012-02-08 23:40:14

2 ответа:

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;

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

- метка