【问题标题】:Using SQL query to determine if a table exists使用 SQL 查询判断表是否存在
【发布时间】:2011-05-22 02:01:12
【问题描述】:

大家有没有其他方法可以确定除了下面的表格是否存在

  1. select count(*) from <table> where rownum =1
  2. select * from user_table where table_name=<table>

请告诉我使用 oracle sql 检查表是否存在的最佳方法。

感谢您的回答,我的要求是从当月的第一个日期开始检查,即 01/12/2010 数据库中是否存在格式为 suresh_20101201 的表名,如果不存在,则应检查表suresh_20101202 直到Suresh_20101231 。是否可以在oracle sql查询中进行。

【问题讨论】:

  • 我希望您不必为需要多个名称中带有日期的表的数据库设计负责;) 每个表的结构是否不同?

标签: sql oracle


【解决方案1】:

你可以这样做(在oracle中,在mssql中有一点不同):

select count(*)
from all_objects
where object_type in ('TABLE','VIEW')
and object_name = 'your_table_name';

【讨论】:

  • +1 因为他要求使用 Oracle。此外,object_name 必须大写。
  • @Thilo:不,Oracle 中的对象名称不必是大写的。它们通常是,但不一定是。
  • 他们几乎总是如此。除非您创建了一个名称用引号括起来的表(使其区分大小写),否则 ALL_OBJECTS 的表名将大写。
【解决方案2】:

查看架构,可能事件能够同时使用 sys.objects 并检查类型.....

有点像

【讨论】:

    【解决方案3】:

    在大多数 sql server 中都有一个系统域,您可以在其中查询表的存在。虽然它是高度实现特定的。例如,在MySql 的最新版本中:

    SELECT table_name FROM INFORMATION_SCHEMA.TABLES
      WHERE table_schema = 'db_name'
      AND table_name LIKE 'whatever'
    

    【讨论】:

      【解决方案4】:

      您需要询问服务器的系统目录。不确定您的意思是什么数据库,但对于 SQL Server 来说应该是:

      select * from sys.tables where name='your-table-name-'
      

      【讨论】:

        【解决方案5】:

        在 Oracle SQL Developer 中使用过:

        SELECT COUNT(*) FROM DUAL WHERE EXISTS (
            SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'TABLE' AND OWNER = 'myschema' AND OBJECT_NAME = 'your_table_name')
        

        如果您的表在ALL_OBJECTS 记录中存在或不存在,这将返回01

        【讨论】:

          【解决方案6】:

          下面的查询可以触发到 Oracle 以检查数据库中是否存在任何表:

          SELECT count(*) count FROM dba_tables where table_name = 'TABLE_NAME'
          

          如果数据库中存在表“TABLE_NAME”,上述查询将返回计数 1

          【讨论】:

            猜你喜欢
            • 2012-11-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-10-31
            • 1970-01-01
            • 1970-01-01
            • 2011-11-02
            • 1970-01-01
            相关资源
            最近更新 更多