0

私は Oracle DB を使用しており、JDBC で呼び出すことができる SQL クエリを作成したいと考えています。私はSQLにあまり詳しくないので、誰かが私を助けることができれば、それは素晴らしいことです! これが問題です。別のテーブルのリストを含むテーブル MY_TABLE があり、空でないテーブルと、名前が特定の文字列で始まるテーブルのみを保持したいと考えています。私が書いたクエリは次のとおりです。

 select TABLE_NAME 
 from MY_TABLE 
 where TABLE_NAME like '%myString%' 
 and (select count(*) from TABLE_NAME where rownum=1)<>0 
 order by TABLE_NAME;`

問題は 2 番目の SELECT にありますが、TABLE_NAME 値を使用する方法がわかりません。

誰かがアイデアを持っていますか?

ありがとう。


【コメントより追加】

実際には、ALL_CATALOG テーブルに含まれる V$ ビューをテストする必要があります。しかし、これらすべてのビューも含まれ、NUM_ROWS 列もある別のテーブルを見つけることができれば、それは完璧です!

4

2 に答える 2

2

標準バージョンの SQL では、テーブル名や列名などのクエリの「構造要素」を変数値やプレースホルダーに置き換えることはできません。

これにアプローチするにはいくつかの方法があります。

  1. MY_TABLE にリストされているテーブル名ごとに個別の SQL ステートメントを生成し、それぞれを順番に実行します。強引だが効果的。
  2. システム カタログを直接調べます。
  3. 使用している特定の DBMS のシステム カタログに縛られることなく、テーブル内の行数を確認できる JDBC メタデータ操作があるかどうかを調査します。
于 2010-09-08T13:35:04.517 に答える
1

Oracle ビュー USER_TABLES を使用できますか? その後、クエリははるかに簡単になります

select TABLE_NAME 
from USER_TABLES 
where TABLE_NAME like '%myString%' 
and Num_ROWS > 0
order by TABLE_NAME;`
于 2010-09-08T13:33:09.167 に答える