QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

DB2のSQL文でテーブルの名称の取り方を教えてください。

他のデータベースだと以下の文でテーブル名が取得できると思うのですが
SELECT TABLE_NAME FROM CAT
select name from sysobjects where xtype = 'U'

DB2の場合の書き方がわかりません知っている方がいたら教えてください。
よろしくお願いします。

質問者:KURO

回答

TAKUさん早速のお返事ありがとうございます。
以下のエラーメッセージがでて失敗してしまいました。(TT)
エラーの原因が分かる方いらっしゃったら
ご教授の方よろしくお願いします。度々すいません。

プラグラム内の★の所でエラーが発生しています。
【エラーメッセージ】----------------------------------------------------------------------------------
Microsoft OLE DB Provider for ODBC Drivers エラー '80040e37'

[IBM][Client Access Express ODBC ドライバー (32 ビット)][DB2/400 SQL]SQL0204 - SYSIBMのタイプ*FILEのSYSTABLESが見つからない。

/eboard/kurosawa/dbdisp_SQL.asp, 行 50
------------------------------------------------------------------------------------------------
環境はDB2をSQLServerを介して見に行ってます。
実行したプログラムは下にあります。
TEXTBOXにSQL文を入れるとその結果を一覧表示するプログラムです。
【プログラム】---------------------------------------------------------------------------------------

<%
Dim db 'データオブジェクト

'★★★DB OPEN★★★
Session("Connect") = "DSN=○○○;UID=○○○;PWD=○○○"
set db = server.createobject("adodb.connection")
db.open Session("Connect")

If Request("SQL") <> "" Then

Set grec = db.Execute( Request("SQL") )

cnt = 0
%>

<%
Response.Write ""
For i=0 To grec.Fields.Count - 1
Response.Write "" & grec.Fields(i).Name & ""
Next
Response.Write ""
Do While not grec.EOF
 cnt = cnt + 1
 Response.Write ""
 For i=0 To grec.Fields.Count - 1
  If grec.Fields(i) <> "" Then
   Response.Write "" & grec.Fields(i) & ""
  Else
   Response.Write " "
  End If
 Next
 Response.Write ""
 grec.MoveNext
Loop
%>
件数:<% =cnt %>

<% Else %>

 
 ★<% Set grec = db.Execute("SELECT TABNAME FROM SYSCAT.TABLES ORDER BY TABSCHEMA") %>
 
 <% Do While not grec.EOF %><% =grec.Fields(0) & vbCrLf %>
  <% grec.MoveNext %>
 <% Loop %>
 
 
 

<% End If %>

投稿者:KURO

編集 履歴 (0)

SQL0204Nは次のURLにありますようにオブジェクトが見つからない、というエラーです。
http://www.db2.jp/db2manual/ja_JP/index.htm?openup=core/rsql0200.htm

>環境はDB2をSQLServerを介して見に行ってます。

上記がどのような構成かいまいち分からないのですが、
SQLServerを介しているから見えないということではないでしょうか。
あるいはSQLServer側で何か設定が必要であるとかいう可能性はないでしょうか。

>[IBM][Client Access Express ODBC ドライバー (32 ビット)][DB2/400 SQL]SQL0204 - SYSIBMのタイプ*FILEのSYSTABLESが見つからない。

エラーは上記のように出力されたということですが、DB2が稼動している環境はもしかしてiSeriesですか?
そうすると、SYSCAT.TABLESは存在しないと思いますので、SYSIBM.SYSTABLESを直接Selectしてみるとうまくいくかもしれません。
カラム名ははっきりと覚えていません。
のでとりあえず次のコマンドを試してみてはいかがでしょう。

SELECT * FROM SYSIBM.SYSTABLES

投稿者:ishi

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。