2015-12-15 3 views
-3

Мне нужно написать код, чтобы узнать некоторую информацию о нескольких базах данных. Это будет наш клиент, который выполнит код, поэтому я не смогу настроить его «онлайн». Базами будут Oracle (9, 10, 11), DB2, AS400 DB2, Informix и MS SQL (2000 и 2008). Я написал код, который мне нужен для Oracle, но я ничего не знаю о других базах данных. Не могли бы вы помочь мне воспроизвести его для других баз данных? Большое спасибо!Список таблиц (в DB2, SQL Server, Informix и Oracle)

select owner, count(*) -- number of tables in schemes 
    from all_tables 
where owner not in ('SYS', 'SYSTEM', 'SYSMAN') and temporary = 'N' 
group by owner 
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 
+0

ЗАКАНЧИВАТЬ INFORMATION_SCHEMA. – jarlh

+7

Какой API вы используете? Если вы поддерживаете подключения ко многим различным базам данных, представляется весьма вероятным, что вы используете кросс-платформенный API для подключения к базе данных. Если это так, этот API (ODBC, JDBC, OLE DB, ODP.Net и т. Д.) Будет предоставлять функции для этого, а не писать SQL для каждой базы данных. –

ответ

0

Вы так меня варианты.

  1. С некоторыми технологиями, такими как ODBC или JDBC, вы можете использовать свой API для чтения такой информации. При использовании JDBC есть DatabaseMetaData: http://docs.oracle.com/javase/8/docs/api/java/sql/DatabaseMetaData.html

  2. Вы можете использовать информацию схемы заданной базой данных, запрашивая его через SQL. Я использую такие запросы в своих инструментах, которые сбрасывают схему базы данных в текстовые файлы: https://code.activestate.com/recipes/576621-dump-informix-schema-to-text/?in=user-186902. Для Informix qyerying для имен таблиц выглядит следующим образом:

    SELECT tabname 
    FROM systables 
    WHERE tabtype='T' 
    AND tabid >= 100 
    AND tabname[1] <> '_' 
    ORDER BY tabname