【问题标题】:Oracle database link. Check for existence or overwrite?Oracle 数据库链接。检查存在还是覆盖?
【发布时间】:2012-03-01 07:06:46
【问题描述】:

我需要在创建一个数据库链接之前检查一个数据库链接是否已经存在。我该怎么做?

我正在编写一个以此开头的 SQL 脚本:

DROP DATABASE LINK mydblink

然后我创建一个:

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

如果数据库链接不存在,我当然会在第一步中得到一个错误。如果我省略了第一步并继续创建一个 db 链接,我将再次收到一个错误,指出它已经以相同的名称存在。

我可以做些什么来检查数据库链接是否已经存在?

【问题讨论】:

    标签: oracle plsql database-link


    【解决方案1】:
    SELECT COUNT(1)
      FROM dba_objects -- user_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;
    

    【讨论】:

    • 即使我刚刚创建了一个链接,这个查询也没有返回任何内容。 count(1) 有什么作用?
    • @OliverNilsen count(1) 与 count(*) 完全相同。我可以说 count('Oliver') 或 count('tbone')。
    • @Gaius 在某些情况下,运行此脚本的用户可能不是链接的所有者(例如,所有者可能是 PUBLIC)。但是,是的,通常不止一种剥猫皮的方法
    • 您能否提供一个示例代码,我如何检查链接是否存在,如果不存在,则创建一个,否则继续脚本的其余部分。我是 PL/SQL 新手。
    • 感谢代码。事实证明,您不能在 BEGIN 块内使用 DDL 语句。啊,真可惜
    【解决方案2】:

    Oracle 无法在 DROP 或 CREATE 之前测试是否存在。 (好吧,好吧,您可以编写一些 PL/SQL,但是,这可能比它的价值更麻烦。)在 Oracle 脚本中,在脚本中简单地执行 DROP 和 CREATE 是相当标准的。如果 DROP 出错,那就这样吧。它不会影响脚本的执行。

    -马克

    【讨论】:

    • 我尝试将它作为脚本运行。当它遇到 DROP DATABASE LINK 语句时,它会失败,并且脚本的其余部分不会执行。你能告诉我我可以在 PL/SQL 中做什么吗?
    • 你的脚本有'whenever sqlerror ...'子句吗?因为如果你这样做,那就是导致退出。如果您只是将一堆 DROP/CREATE 放在一个脚本中并在 SQL*Plus 中运行它,它应该可以工作。我将看看用 PL/SQL 示例更新我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 2015-10-29
    相关资源
    最近更新 更多