检查 table 存在于 RDBMS 数据库中

check table existence in RDBMS databases

如何以通用方式检查 table 是否存在于 Oracle、Teradata、SQL Server、DB2 等数据库中。

选项 1:

Select 1 from Table;

选项 2:

Describe Table;

哪个更好或者有没有其他更好的方法?

编辑: select 1 from Table 不是所有这些数据库都支持吗?

这应该适用于 SQL 服务器和 MySQL

select *
from    INFORMATION_SCHEMA.TABLES
where   TABLE_NAME =  'Table'

不支持:甲骨文

简单的回答:没有一种方法来完成您的请求。不同的 RDBMS 以不同的方式表示模式、tables、权限和数据字典。

更大的答案:提出问题的实体需要知道它正在查询什么 RDBMS。那么就可以对所讨论的数据库系统构成table存在性问题。即使有了这些信息,@data_hinrik 也是正确的,权限可能会阻止您看到现有的 table.

在 Oracle 中有 user_tables 视图来检查用户模式中存在的所有表。 all_tables 查看用户架构中存在的表以及当前用户对其他架构的表具有 select 权限的表。 dba_tables 包含数据库中的所有表。

select * from user_tables where table_name='YOURTABLENAME';

使用 JDBC 的通用方法:

Connection conn;
<...connect here...>

try {
  conn.createStatement().executeQuery("select * from " + table_name + " where 1=0");
} catch (Exeception e) {
    System.out.println("ERROR: " + e.toString());
}