Oracle - 删除同义词IF EXISTS

时间:2017-02-27 17:19:20

标签: oracle11g

使用MSSQL - 只有存在时才能删除同义词: DROP SYNONYM (Transact-SQL)

但是在Oracle(11g)中删除同义词导致我的脚本错误,如果它没有退出,有没有办法模仿它存在的MSSQL?

3 个答案:

答案 0 :(得分:2)

您可以使用PLSQL匿名块:

begin
    execute immediate 'drop synonym YOUR_SYNONYM';
exception
  when others then
    if sqlcode != -1434 then
         raise;
      end if;
end;
/

如果存在同义词,它将删除它。如果它不存在,它将只是抑制错误。除了“同义词不存在”之外,它还会向调用者提出任何错误。

答案 1 :(得分:1)

您可以使用pragma来定义可以处理的异常。 假设你在循环中做某事......

    declare
      NOSYN  exception;
      pragma exception_init ( NOSYN, -1434 );

    /* 1434 is the Oracle error for synonym does not exist */

    begin

    /*
     * Loop here where you synonym name gets assigned to the variable mysyn
     */


        begin
          execute immediate 'drop synonym '||mysyn;
        exception
          when NOSYN then
           dbms_output.put_line( 'Synonym does not exist... skipping' );
        end;

      end loop;
    end;
    /

答案 2 :(得分:1)

显然你可以写:创建或替换SYNONYM