DB2データベースのテーブル構造を表示する方法
sysibm.syscolumns
から回答を得ました
Select distinct(name), ColType, Length from Sysibm.syscolumns where tbname = 'employee';
通常、DESCRIBEを使用するのが最も簡単です。
DESCRIBE TABLE MYSCHEMA.TABLE
または
DESCRIBE INDEXES FOR MYSCHEMA.TABLE SHOW DETAIL
等.
ドキュメントを参照してください: DESCRIBEコマンド
また、次のコマンドが機能します。
describe SELECT * FROM table_name;
Selectステートメントを他のselectステートメントに置き換えることができる場所。これは、たとえばselectを使用した複雑な挿入に非常に役立ちます。
DB2で、db2コマンドプロンプトに入力します。
db2 => describe table MyTableName
IBM DB2 10.7バージョンの表の説明については、これを試してみましたが、うまく機能しました
SELECT NAME,COLTYPE,NULLS,LONGLENGTH FROM SYSIBM.SYSCOLUMNS where TBcreator =SCHEMANAME and TBNAME =TABLENAME;
1. db2 describeテーブルを使用する
db2 describe table tabschema.tabname
2. db2 describeの出力を使用する
db2 "describe select * from tabschema.tabname"
3. db2lookユーティリティを使用する
db2look -d dbname -e -t tabname
4. db2 syscatで行を見つける
db2 "Select * from syscat.columns wher tabname='' and tabschema =''"
Db2データベースのテーブル構造を表示する方法
db2
コマンドウィンドウを開き、次のコマンドでdb2に接続します。
> db2 connect to DATABASE_NAME USER USERNAME USING PASSWORD
接続に成功したら、次のコマンドを発行してテーブル構造を表示します。
> db2 "describe select * from SCHEMA_NAME.TABLE_NAME"
上記のコマンドは、db2テーブル構造を表形式で表示します。
注:DB2クライアント9.7.11でテスト済み
このクエリを使用して、テーブルのメタデータを取得できます
SELECT * FROM SYSIBM.COLUMNS WHERE TABLE_NAME = 'ASTPCLTEXT';
iSeries(as400)db2のphpの例、はい、これは機能しました!
$i5 = db2_connect($database, $user, $password, array("i5_lib"=>"qsys2"));
$querydesc = "select * from qsys2.syscolumns where table_schema = '".$library."' and table_name = '".$table_name."' ";
$result = db2_exec($i5, $querydesc);
また、すべてのテーブルとその説明を一覧表示するだけの場合も
$query = "select TABLE_NAME, TABLE_TEXT from systables where table_schema = '$library' ";
$result = db2_exec($i5, $query);
以下を使用して、単一のテーブルのテーブルの説明を確認します
DESCRIBE TABLE Schema Name.Table Name
以下のテーブルを結合して複数のテーブルのテーブルの説明を確認し、テーブルID syscat.tablesおよびsyscat.columnsで結合します
次のコマンドを使用して、テーブルのインデックスの詳細を確認することもできます。詳細を表示
Control Centerはすでにその機能を備えています。テーブルリストのすぐ下にあります。
aqua Data studioを使用している場合は、select *をtable_nameから書き込み、executeを押す代わりにctrl + Dを押します。
テーブルの説明が表示されます
すべてのテーブルを取得するには:(スキーマをスキーマに制限することができます)
select * from syscat.tables
すべての列を取得するには:(tabname = your_tabname)
select * from syscat.columns
DB2/LINUXX8664 10.5.3を実行していますが、describe select * from schema_name.table_name
が機能します。
ただし、describe table schema_name.table_name
は次のエラーで失敗します。
SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. SQLSTATE=02000
多くの人が既に言及している最も簡単な方法は、DESCRIBE TABLEを実行することです
ただし、以下から同じ+追加情報を取得することもできます。
db2> SELECT * SYSCAT.TABLES
db2> SELECT * FROM SYSCAT.COLUMNS
通常、SYSCAT.COLUMNSを使用して、すでに列名がわかっているデータベース内の関連テーブルを検索します:)
特定のテーブルまたはデータベース全体のDDLを取得する場合のもう1つの良い方法は、db2lookを使用することです
# db2look -d *dbname* -t *tablename* > tablestructure.out
これにより、特定のテーブルのDDLスクリプトを含む「.out」ファイルが生成されます。
# db2look -d *dbname* -e > dbstructure.out
これにより、データベース全体のDDLが単一のスクリプトファイルとして生成されます。これは通常、データベースの複製に使用されます。「-e」は、DDLをエクスポートし、新しいデータベースでまったく同じセットアップを再作成することを示します。
これがそのような答えを探している人を助けることができることを願っています:)
drop view lawmod9t.vdesc
create view lawmod9t.vDesc as select
upper(t.table_cat) as Catalog,
upper(t.table_schem) as Schema,
upper(t.table_name) as table,
t.table_text as tableDesc,
c.system_column_name as colname_short,
c.column_name as colname_long,
c.column_text as coldesc,
c.Type_Name as type,
c.column_Size as size
from sysibm.SQLColumns c
inner join sysibm.sqltables t
on c.table_schem = t.table_schem
and c.table_name = t.table_name
select * from vdesc where table = 'YPPPOPL'
OPでこれが議論されているDB2/400であるかどうかは言及されていませんが、列名の説明を含むテーブル構造を取得できる唯一の方法はDSPFFDを使用することであることがわかりました。
DSPFFD FILE(TBNAME) OUTPUT(*OUTFILE) OUTFILE(SOMELIB/TBDESC)
これにより、TBNAMEの説明がSOMELIBライブラリのTBDESCというテーブルに配置されます。次に、それを使用してクエリを実行できます。
select * from SOMELIB/TBDESC
私はAquadata Studio 12.0.23を使用していますが、これは最新のものよりも短いバージョンです。あなたの経験は私のものよりも良いかもしれません。概要を得る最良の方法は、ERDジェネレーターを使用することであることがわかりました。正規化はほぼ30年前にこのデータベースの設計で使用された概念ではなかったため、数時間かかりました。数時間ですべてのオブジェクトの定義を、ファイルごとに取得できました。