CREATE TABLE文の解析


SQLのCREATE TABLE文を解析して、フィールド定義などを取得するプログラムはありますか?当面オラクル限定でかまいません。できればJAVAソースのあるものがよいです。

よろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2007/12/19 17:18:38
  • 終了:2007/12/20 09:42:05

回答(4件)

id:tanukichi800 No.1

tanukichi800回答回数31ベストアンサー獲得回数32007/12/19 17:27:57

ポイント50pt

HOGEをテーブル名として

DESCRIBE HOGE

をプログラムから叩くとテーブルの列定義が取れます。

これをただテキスト処理すればいいのですが、Javaは分からないのでソースはごめんなさい・・

id:gzmgzm

ありがとうございます。

でもできれば、CREATE HOGE..を解析するものを..

自分で作ろうとしているのですが、できればちゃんと構文解析をしたいおと思ったので...

2007/12/19 17:36:13
id:kazz7 No.2

kazz7回答回数446ベストアンサー獲得回数142007/12/19 17:37:16

DBMS_METADATAパッケージを使うというのはどうでしょうか?

DBMS_METADATA 使用例 - Oracle/オラクルをマスターするための基本と仕組み

http://biz.rivus.jp/package/dbms_metadata.html

DBMS_METADATA

http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_...

アシストの無料サポート情報のページから、解説PDFがダウンロードできます。

アシスト:無料提供技術情報 / サポート

http://www.ashisuto.co.jp/support/novalue/index,1,list01,3.html

DBMS_METADATAパッケージを使用したDDL文の作成方法 PDF[73KB]

id:gzmgzm

DBMS_METADATAで取得した結果を以下に解析するかという問題です。

自分でJAVAで作って一応見込みはたっているのですが、構文解析が素人っぽいので、スマートな方法があると思ったので質問しています。このような用途は、かなり多いはずなので。

2007/12/19 17:56:28
id:evi1 No.3

evi1回答回数15ベストアンサー獲得回数32007/12/19 18:12:10

ポイント50pt

Eclipseのプラグインに、データベース関連のものがありますが、それらのソースを見ると良いんじゃないでしょうか。

例えば、

PowerDBJプラグイン はデータベースのテーブル、インデックス定義からテーブル定義書やJAVAソースコードを出力する Eclipse3.2 用プラグインです。

https://sourceforge.jp/projects/powerdbj

上記サイトの cvs に匿名アクセスすれば、ソースを取得することが可能です。

id:b-wind No.4

b-wind回答回数3344ベストアンサー獲得回数4402007/12/19 18:20:03

ポイント10pt

DBプラグイン - EclipseWiki

Eclipse の DB 関連の Plugin にはスキーマの解析(リバースエンジニアリング)機能をもったものがいくつかあります。

ソースが公開されているものも多いので、参考にしてみてはいかがでしょうか?

  • id:samasuya
    ORACLE であれば、METAテーブルの値をとってくるようにすれば
    いいんじゃないですか?

    ALL_TABLES、ALL_TAB_COLUMN、ALL_TABLESPACES(?)

    あたりのデータをJDBC経由で取ってくれば、CREATE_TABLE文を
    再構築できると思います。

    http://oracle.se-free.com/dic/E4_columns.html
  • id:matsu-boolean
    CREATE TABLE文はすでに存在していて、パーサーを書きたいって話ですよね。

    mysqlとか、PostgreSQLのようなオープンソースのDBのソースを見ればよいのかなあ。…などと思いました。

    javaで書かれたDBとかいうのもまれに聞く気がしますが、オープンソースとかあったかどうかは知りません。
  • id:gzmgzm
    質問者です。
    DBMS_METADATAで取得したCREATE文を解析してEntityクラスを作成するところまでやりました。これ自体はさして難しいことではありません。が、自己流なのが気にかかるところです。
    今後の展開は、これを緻密にすること、Hibernateなどの定義文を出力すること、あるいはDAOを生成すること、他のデータベース対応....となります。
    #ECLIPSEのプラグインまで作るか....そんなに暇ではない...
  • id:gzmgzm
    質問者です。時間がたってしまいましたが、オラクルでは、次の方法で、テーブルの情報を取得可能です。
    テーブル名の一覧を取得するSQL.
    SELECT DISTINCT TABLE_NAME FROM user_tables

    テーブルの説明を取得するSQL.
    select distinct TABLE_NAME,COMMENTS from ALL_TAB_COMMENTS where TABLE_NAME = ?

    キー情報を取得するためのSQL.
    select DISTINCT COLUMN_NAME,COLUMN_POSITION from ALL_IND_COLUMNS where TABLE_NAME = ? ORDER BY COLUMN_POSITION

    カラムの一覧を取得するSQL.
    SELECT DISTINCT COLUMN_NAME,DATA_TYPE FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = ?

    カラムの説明を取得するSQL.
    select distinct COLUMN_NAME,COMMENTS from ALL_COL_COMMENTS where TABLE_NAME = ?

    MySQLでも可能です。
    テーブル・カラムの情報を取得し、JDBCベースのDAO,Entityのソースを生成するプログラムを作成しました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません