如何在oracle中检查对象是否存在

Nis*_*tha 0 sql t-sql oracle psql

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

IF OBJECT_ID('TBL_COMP_ASSESSMENT') IS NOT NULL
DROP TABLE TBL_COMP_ASSESSMENT
Run Code Online (Sandbox Code Playgroud)

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

mbs*_*ngh 5

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

SELECT * FROM ALL_OBJECTS WHERE OBJECT_NAME = '<OBJ_NAME_HERE>'
Run Code Online (Sandbox Code Playgroud)

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

AND OWNER='<OWNER>' AND OBJECT_TYPE='<TYPE>'
Run Code Online (Sandbox Code Playgroud)

此处有完整详细信息:http : //docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_2005.htm


Lal*_*r B 5

在运行中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>
Run Code Online (Sandbox Code Playgroud)