如何在oracle中检查对象是不是存在[重复]

Posted

技术标签:

【中文标题】如何在oracle中检查对象是不是存在[重复]【英文标题】:How to check object exists or not in oracle [duplicate]如何在oracle中检查对象是否存在[重复] 【发布时间】:2015-05-26 05:59:45 【问题描述】:

我们可以使用以下查询来检查 T-SQL 中是否存在对象。

IF OBJECT_ID('TBL_COMP_ASSESSMENT') IS NOT NULL
DROP TABLE TBL_COMP_ASSESSMENT

有没有办法在 Oracle 中实现这一点?

【问题讨论】:

【参考方案1】:

您可以使用 ALL_OBJECTS 表。应该这样做:

SELECT * FROM ALL_OBJECTS WHERE OBJECT_NAME = '<OBJ_NAME_HERE>'

您可以根据需要添加更多条件:

AND OWNER='<OWNER>' AND OBJECT_TYPE='<TYPE>'

详情请看:http://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_2005.htm

【讨论】:

【参考方案2】:

你可以用

查看
  begin    
  if ObjType = 'TABLE' then
    select count(*) into v_counter from user_tables where table_name = upper(ObjName);
    if v_counter > 0 then          
      execute immediate 'drop table ' || ObjName || ' cascade constraints';        
    end if;   
  end if;
   end;

【讨论】:

【参考方案3】:

动态DROPCREATE表是个坏主意。 T-SQLPL/SQL 非常不同。 PL/SQL 在执行之前编译并驻留在数据库中。您在 T-SQL 中所做的事情在 PL/SQL 中可能并不好。您可以TRUNCATE 表格,而不是即时删除它。

无论如何,如果你真的想这样做,那么你需要(ab)使用 EXECUTE IMMEDIATE 来做到这一点。

例如,

SQL>  DECLARE
  2      cnt NUMBER;
  3  BEGIN
  4      SELECT Count(*)
  5      INTO   cnt
  6      FROM   user_tables
  7      WHERE  table_name = 'TBL_COMP_ASSESSMENT';
  8
  9      IF cnt = 1 THEN
 10        BEGIN
 11            EXECUTE IMMEDIATE 'DROP TABLE TBL_COMP_ASSESSMENT';
 12        EXCEPTION
 13            WHEN OTHERS THEN
 14              IF SQLCODE != -942 THEN
 15                RAISE;
 16              END IF;
 17        END;
 18      END IF;
 19  END;
 20
 21  /

PL/SQL procedure successfully completed.

SQL>

【讨论】:

以上是关于如何在oracle中检查对象是不是存在[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在插入 MySQL 之前检查表中是不是存在名称 [重复]

如何检查批处理文件中是不是存在文件[重复]

如何在 Perl 中使用 grep 检查字符串是不是存在 [重复]

如何检查页面上是不是已存在具有 ID 的对象? [复制]

如何检查Mysql表中是不是存在记录[重复]

如何检查Oracle中的项目表中是不是存在一组值