7

実際にクエリを実行した場合に生成される結果セット (Java の Oracle データベース) の列名を返す方法があるかどうか疑問に思っています。たとえば、次のような SQL があるとします。

select * from <complex table join>;

このクエリをオラクルに送信し、実際にクエリを実行せずに返される結果セットの列名を教えてもらう方法はありますか (コストがかかるため)。

4

3 に答える 3

14

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それが失敗した場合は、クエリにa を追加して実行するだけです。少なくとも、すべての行が返されるわけではありません (Statement.setMaxRows()念のため、同様に使用する可能性があります。

最後の (まだかなり複雑な) オプションは、 を使用dbms_sqlしてステートメントを開き、準備し、説明することです。詳細については、マニュアルを参照してください: http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_sql.htm

于 2013-01-09T20:04:22.957 に答える
2

クエリを外側の選択でラップし、 where 1=0 を追加して、行がフェッチされないようにすることができます。

  SELECT * from (
    <your query here>
  )
  WHERE 1=0
于 2013-01-09T20:10:11.537 に答える
-1
    SELECT
      COLUMN_NAME
   FROM
      ALL_TAB_COLUMNS
   WHERE
      TABLE_NAME ='tableName';

おそらくあなたが意図したものです..しかし、それはまだクエリです...アプリケーションテーブルをクエリする代わりに、特別なテーブルをクエリしています

メタデータを要求する回答と同じ

于 2013-01-09T20:10:29.170 に答える