【问题标题】: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 中实现这一点?

【问题讨论】:

    标签: sql oracle tsql psql


    【解决方案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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-06
          • 2022-01-16
          • 2018-01-01
          • 2020-05-08
          • 2016-10-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多