2017-04-05 10 views
0

IBM DB2でクエリを実行しています。DescribeがIBM DB2で機能していない

として

DESCRIBE TABLE Schema.Table 

しかし、私はエラーを取得しています。表にschema.tableエラー42601について説明します。トークン表には有効ではありませんでした。有効なトークン::。 SQLCODE = -104

私は多くを検索しますが、その理由を見つけることができず、私はIBM DB2で非常に新しいので、問題を理解することはできません。許可関連の問題ですか?

私はコマンドプロンプトにアクセスできません。

+0

これはメインフレームのDB2(AS400?)ですか? Afaik DESCRIBEはUDBでのみ動作します... – dnoeth

+0

私はわかりません。メインフレームのDB2でない場合は、テーブルのメタデータを取得する方法は?それがメインフレームのDB2かどうかを知る方法は? –

+0

'SYSIBM.SYSCOLUMNS'を使用していますか? – dnoeth

答えて

3

テーブルやビューのカタログ情報を取得しようとしているだけの場合は、mustaccioの別の回答に記載されているように、システムカタログは正常に動作します。しかしRPGまたはCOBOLプログラムにDESCRIBE TABLEを埋め込みたい場合は、同様に動作します。動的な列数がある場合、またはコンパイル時にテーブル名がわからない場合は、これを実行する必要がある理由の1つです。プログラム内のFETCH文の出力を受け取るために、表またはカーソルを記述して作成されたSQL記述子を使用できます。テーブルの説明を受け取るには、SQL DescriptorまたはSQLDAが必要です。これは次のようになります。

これは、指定されたディスクリプタにテーブルに関する情報を取得します。この場合D1。記述子の名前にはホスト変数を使用できます。この例では、20項目の記述子をlocalに割り当てます。テーブルの列数が20を超える場合は、ALLOCATE DESCRIPTORステートメントでより大きな記述子を要求できます。複数のモジュール間で指定された記述子を使用するsqlを広げる場合は、'D1'global 'D1'に置き換えてグローバル記述子を使用する必要があります。またSQLDAを使用することもできますが、それらを扱うのが難しくなることがあります。

ディスクリプタから情報を取得するには、GET DESCRIPTORを使用します。それはあなたが記述から抜け出すことができるもののすべての詳細に移動するには、このサイトの範囲を超えるだろうが、一例として、あなたはこのようなMYTABLEの最初の列の列名を取得することができます:

dcl-s columnName  Varchar(128) Inz(''); 

exec sql 
    get sql descriptor 'D1' 
    value 1 :columnName = name; 

ディスクリプタを使用しているときにディスクリプタの割り当てを解除することを忘れないでください。

exec sql deallocate sql descriptor 'D1'; 

あなたはここにDESCRIBE TABLEhttps://www.ibm.com/support/knowledgecenter/ssw_ibm_i_71/db2/rbafzdescrtb.htmに関する詳細な情報を見つけることができます。知識センターには、ALLOCATE DESCRIPTOR,DEALLOCATE DESCRIPTOR、およびGET DESCRIPTORに関する情報もあります。

関連する問題