web-dev-qa-db-ja.com

IBMDb2ネットドライバーのSQLエラー。テーブル名が見つかりませんか?

このクエリから:

select * from table

次のエラーメッセージが表示されます。

Error: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=webuser.table, DRIVER=4.8.87
SQLState:  42704
ErrorCode: -204
Error: DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-204;42704;webuser.table, DRIVER=4.8.87
SQLState:  56098
ErrorCode: -727

問題を調査する方法についての提案は大歓迎です。

8
cmck23

一見したところ、DB2はwebuserスキーマの下でそのテーブル名を検出していないか、現在接続されているユーザーのスキーマがテーブルのスキーマと一致していないようです。試してみてください:

select * from webuser.table

それが失敗した場合は、おそらくwebuserスキーマの下に存在しないため、どのスキーマの下に存在するかを調べてみてください。

sqlエラーコード の情報は、 IBM DB2 infocenter またはDB2UDBコマンドラインで次のように見つけることができます。

db2 ? SQL0100

この方法でエラーを検索できます。

db2 ? SQLnnnnn 

ここで、nnnnnはエラーコードです。

また、グーグルは検索結果からダッシュの前にある用語を削除するため、-を含めずにグーグルで検索することにより、db2からのSQLエラーコードに関する情報を見つけることもできます。したがって、sql code 204ではなくsql code -204を検索してください。

通常、実行しているシステムのタイプ(z/OSまたはUDB)に応じて、またdb2管理者が制限しているかどうかに応じて、sysibm.tablesまたはsyscat.tablesの下にすべてのテーブルのリストがあります。それらのカタログ表へのアクセス。

UDBインスタンスに対して実行している場合は、次を試してください。

select tabschema, tabname from syscat.tables

もちろん、テーブルの名前がtableになることは期待していないと思います。これは、db2またはSQL-92標準で制限されているWordだと思います。

そのクエリを実行するストアドプロシージャを実行している場合は、クエリからの真のエラーが表示されない可能性があります。ストアドプロシージャは、クエリ自体からsqlcodeとsqlstateをキャッチして返すようにプログラムされていない限り、ストアドプロシージャ内のクエリとは異なるエラーコードを返すことがよくあります。

さらに、メッセージコードが2の-727のsqlcodeを取得していることがわかります。そのドキュメントには次のように書かれています。

An error occurred during implicit system action type action-type . Information returned for the error includes SQLCODE sqlcode , SQLSTATE sqlstate and message tokens token-list . 

ここで、アクションタイプは2です。キャッシュされた動的SQLステートメントの暗黙的な準備

このエラー情報はそれほど単純ではなく、データベース管理者向けに調整されています。役に立つかもしれませんが、最初に他の提案を試してみます。特定のパッケージ(ネットドライバのパッケージなど)がデータベースにバインドされていないか、データベースの特定のアクセス許可が正しくないか、フィックスパックが正しく適用されておらず、データベースプロシージャが欠落している可能性があります。ただし、-204が原因である可能性もあり、その後のエラーである可能性があります。

5
mwolfetech

SQLCODE=-727, SQLSTATE=56098 selectステートメントの列名の1つにタイプミスがあると、発生する可能性があります。

1
mp31415