表列表(在DB2、SQL Server、Informix和Oracle中)

表列表(在DB2、SQL Server、Informix和Oracle中),sql,oracle,db2,ibm-midrange,informix,Sql,Oracle,Db2,Ibm Midrange,Informix,我需要编写代码来了解有关几个数据库的一些信息。这将是我们的客户谁将执行代码,所以我将无法调整它“在线”。 数据库将是Oracle(9、10、11)、DB2、AS400DB2、Informix和MS SQL(2000和2008)。 我编写了Oracle所需的代码,但对其他数据库一无所知。你能帮我把它复制到其他数据库吗? 非常感谢 一, 二, 三, 四, 你有一些选择 使用ODBC或JDBC等技术,您可以使用其API读取此类信息。如果使用JDBC,则有数据库元数据: 您可以通过SQL查询数据库提供

我需要编写代码来了解有关几个数据库的一些信息。这将是我们的客户谁将执行代码,所以我将无法调整它“在线”。 数据库将是Oracle(9、10、11)、DB2、AS400DB2、Informix和MS SQL(2000和2008)。 我编写了Oracle所需的代码,但对其他数据库一无所知。你能帮我把它复制到其他数据库吗? 非常感谢

一,

二,

三,

四,

你有一些选择

  • 使用ODBC或JDBC等技术,您可以使用其API读取此类信息。如果使用JDBC,则有
    数据库元数据

  • 您可以通过SQL查询数据库提供的模式信息来使用它。我在将数据库架构转储到文本文件的工具中使用此类查询:。对于Informix,表名的qyerying如下所示:

    SELECT tabname
    FROM systables
    WHERE tabtype='T'
    AND tabid >= 100
    AND tabname[1] <> '_'
    ORDER BY tabname
    
    选择tabname
    来自systables
    tabtype='T'
    并且tabid>=100
    和tabname[1]''
    按选项卡名排序
    

  • 查看信息\u SCHEMA。您使用的是什么API?如果您支持到许多不同数据库的连接,那么很可能是使用跨平台API连接到数据库。如果是这种情况,API(ODBC、JDBC、OLEDB、ODP.Net等)将提供执行此操作的函数,而不是编写特定于每个数据库的SQL。
     select atc.owner, atc.data_type, count(*) --number of tables by schemes and datatypes
          from all_tab_columns atc
         inner join all_tables t
            on t.OWNER = atc.OWNER
           and t.TABLE_NAME = atc.TABLE_NAME
         where atc.owner not in ('SYS', 'SYSTEM', 'SYSMAN')
           and t.temporary = 'N'
         group by atc.owner, atc.data_type
    
    select atcom.owner, count(*) --number of comments by schemes
      from all_tab_comments atcom
       inner join all_tables t
        on t.OWNER = atcom.OWNER
       and t.TABLE_NAME = atcom.TABLE_NAME
     where atcom.comments is not null
     and atcom.owner not in ('SYS', 'SYSTEM', 'SYSMAN')
     group by atcom.owner
    
     select owner, constraint_type, count(*) --number of constraints by schemes and types
          from all_constraints ac
         where status = 'ENABLED' and owner not in ('SYS', 'SYSTEM', 'SYSMAN')
         group by owner, constraint_type
    
    SELECT tabname
    FROM systables
    WHERE tabtype='T'
    AND tabid >= 100
    AND tabname[1] <> '_'
    ORDER BY tabname