2013-01-09 46 views
7

生成される結果セット(JavaデータベースのOracleデータベース)を返す方法があるのだろうか?実際にクエリを実行しました。実際にクエリを実行せずにResultSetのカラム名を返す(OracleとJava)

select * from <complex table join>; 

オラクルにこのクエリを送信する方法はありますし、それが列名は、それが実際に実行せずに返します。結果セットにしているだけで何を教えてあります。たとえば、私はSQLはこのような何かを探していたと言いますクエリ(それは高価なので)?

+0

トリッキーな質問を要求する答えと

同じ特別なテーブルを照会しているアプリケーション表を照会の、複雑なテーブルを変更 –

+0

@mpettisをジョインを行います。私は私の答えを更新しました...あなたはあなたのソリューションを見つけましたか? – Parth

+0

@codeMaker:答えをありがとう...私は以下のあなたの答えにコメントしました。短いですが、私は 'getMetaData'が動作することを得ていない、私は私のDBドライバがその呼び出しで動作するかどうかわからない... – mpettis

答えて

2

あなたは外側のSELECTにクエリをラップし、ここで、1 = 0の任意の行をフェッチしないように追加してみてください:

SELECT * from (
    <your query here> 
) 
    WHERE 1=0 
+0

これはうまくいきました。 Oracleのクエリー・アナライザに慣れていないので、セクションのためにセクションが実際に実行されず破棄されていることを確認したいだけです。したがって、<ここのクエリ>は結果を実際に取得せず、外側の 'where'ステートメントで破棄されるのは本当ですか? – mpettis

+0

基本的なjdbcドライバとは独立して動作するように見えるので、私はこの解決策をとっています。フランクと答えた皆さんありがとう! – mpettis

11

私は、PreparedStatementを使用して仕事ができると思う:

PreparedStatement stmt = connection.prepareStatement("select ..."); 
ResultSetMetaData meta = stmt.getMetaData(); 
for (int col=0; col < meta.getColumnCount(); col++) 
{ 
    System.out.println("Column: " + meta.getColumnName(col + 1)); 
} 

(編集):私はOracleの11.2でこれを試してみましたが、ドライバのバージョン11.2.0.3とそれが動作します。

これが失敗した場合は、単純にwhere 1=0をクエリに追加して実行することができます。

最終的な(しかし非常に複雑な)オプションは、dbms_sqlを使用して文を開き、準備し、記述することです。参照してください。詳細については、マニュアル:http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_sql.htm

+0

ありがとう!私はエラーを取得しています: "java.sql.SQLException:ステートメントハンドルが実行されません:getMetaData"。グーグルで、私は見つけた:http://stackoverflow.com/questions/9207073/column-names-for-an-ad-hoc-sql。私が使用しているドライバは 'ojdbc5.jar 'なので、' getMetaData'コールはこれでサポートされていないと思っています。 – mpettis

+0

@mpettis:新しいドライバを試してみてください。私が言ったように、ドライババージョン11.2.0.3で私のために働いた。ファイル名の "5"はドライバのバージョンを示していません。それは、ドライバが意図されているJavaバージョンです(実際にJava 5をまだ使用していますか?)。ドライバのバージョンは、マニフェストファイル(.jar内)を調べると見つかります –

+0

ありがとうございました!私は新しいドライバ(Java6を使用)を入手しますが、これは私の会社で配布されている標準jdbcドライバですので、新しいドライバ(ojdbc6.jar)をインストールするためにロビーに行きます。グーグルでは、この機能がojdbc5.jarを使って他の人にはうまく働いていることがわかったので、私は知らなかった別の問題がなければ、それは私と一緒に働くだろうと思ったので、新しいドライバがそれを行うと確信していませんでした約。このソリューションは、プログラマティックに安定していると思われるため、仕事をしようとしていたもので、トリックに頼っていませんでした。しかし、それが現れたとき、それはうまくいかなかった。 – mpettis

-1
SELECT 
     COLUMN_NAME 
    FROM 
     ALL_TAB_COLUMNS 
    WHERE 
     TABLE_NAME ='tableName'; 

は、あなたが何を意味するのか、おそらくです。しかし、それはまだキューですRY ...ちょうどその代わりに、あなたは、メタデータ

+0

Oracleには 'SYSOBJECTS'という名前のビューはなく、とにかくJOINの列は返されません。 –

+0

@a_horse_with_no_name ...私は私のクエリを修正しました...ありがとう – Vikram

+0

まだOPが望んでいることをしていません... –

関連する問題