- PR -

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

1
投稿者投稿内容
KURO
会議室デビュー日: 2004/11/30
投稿数: 2
投稿日時: 2004-11-30 09:16
他のデータベースだと以下の文でテーブル名が取得できると思うのですが
SELECT TABLE_NAME FROM CAT
select name from sysobjects where xtype = 'U'

DB2の場合の書き方がわかりません知っている方がいたら教えてください。
よろしくお願いします。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2004-11-30 09:35
コード:
SELECT TABNAME FROM SYSCAT.TABLES ORDER BY TABSCHEMA



http://www.db2.jp/siryo/db2online/db2s0/frame3.htm#sqlx0c26

 マニュアルを読みましょうね・・・。
KURO
会議室デビュー日: 2004/11/30
投稿数: 2
投稿日時: 2004-11-30 09:45
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文を入れるとその結果を一覧表示するプログラムです。
【プログラム】---------------------------------------------------------------------------------------
<html>
<%
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
%>
<table border="1" width="100%">
<%
Response.Write "<TR>"
For i=0 To grec.Fields.Count - 1
Response.Write "<TD BGCOLOR='#66FFFF'>" & grec.Fields(i).Name & "</TD>"
Next
Response.Write "</TR>"
Do While not grec.EOF
 cnt = cnt + 1
 Response.Write "<TR>"
 For i=0 To grec.Fields.Count - 1
  If grec.Fields(i) <> "" Then
   Response.Write "<TD>" & grec.Fields(i) & "</TD>"
  Else
   Response.Write "<TD> </TD>"
  End If
 Next
 Response.Write "</TR>"
 grec.MoveNext
Loop
%>
件数:<% =cnt %><BR>
</table>
<% Else %>
<form method="POST" action="./dbdisp_SQL.asp">
 <p><textarea rows="11" name="SQL" cols="71"></textarea>
 ★<% Set grec = db.Execute("SELECT TABNAME FROM SYSCAT.TABLES ORDER BY TABSCHEMA") %>
 <textarea rows="10" name="S1" cols="30">
 <% Do While not grec.EOF %><% =grec.Fields(0) & vbCrLf %>
  <% grec.MoveNext %>
 <% Loop %>
 </textarea><BR>
 <input type="submit" value="   実行   " name="B1">
 <input type="reset" value="  リセット  " name="B2"></p>
</form>
<% End If %>
</html>
ishi
会議室デビュー日: 2004/07/16
投稿数: 17
投稿日時: 2004-11-30 18:17

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
1

スキルアップ/キャリアアップ(JOB@IT)