2010-09-08 50 views
0

我正在使用Oracle DB,並且想編寫一個SQL查詢,然後可以使用JDBC調用該查詢。我對SQL不太熟悉,所以如果有人能幫助我,那可能太棒了!這是問題。我有一個MY_TABLE表,其中包含另一個表的列表,我只想保留非空表和那些名稱以特定字符串開頭的表。 我寫的查詢如下:SQL/JDBC:在變量表名上選擇查詢

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;` 

的問題來自於第二選擇,但我不知道我該怎麼辦使用TABLE_NAME值。

有人有想法嗎?

謝謝。


[從添加註釋]

其實,我需要測試包含在ALL_CATALOG表中的V $視圖。但是,如果我可以找到另一個包含所有這些視圖的表,並且還有一個NUM_ROWS列,那就完美了!

+0

您的數據模型存在問題。它至少與JDBC沒有關係,它只是使用Java來引發和處理SQL查詢的「信使」。所以我刪除了標籤。 – BalusC 2010-09-08 13:32:33

+0

無法完成;不應該這樣做。 – duffymo 2010-09-08 13:38:43

+0

@duffymo:爲什麼?爲什麼? – user442462 2010-09-08 17:23:53

回答

1

你可以使用oracle視圖USER_TABLES嗎?那麼查詢會容易得多SQL的

select TABLE_NAME 
from USER_TABLES 
where TABLE_NAME like '%myString%' 
and Num_ROWS > 0 
order by TABLE_NAME;` 
+0

實際上,我需要測試ALL_CATALOG表中包含的V $視圖。但是,如果我可以找到另一個包含所有這些視圖的表,並且還有一個NUM_ROWS列,那就完美了! – user442462 2010-09-08 14:31:35

2

標準版本不允許你更換查詢的「結構元素」,如表名或列名,與變量值或佔位。

有幾種方法可以解決這個問題。

  1. 爲MY_TABLE中列出的每個表名生成一個單獨的SQL語句,並依次執行每個表名。蠻力,但有效。
  2. 直接詢問系統目錄。
  3. 調查是否存在JDBC元數據操作,通過這些操作可以查找表中的行數,而不會綁定到您正在使用的特定DBMS的系統目錄。
+0

1.我第一次做了類似的事,它可以工作,但需要大約20秒才能執行。我的目標是減少執行時間。實際上,MY_TABLE是ALL_CATALOG表。 3. JDBC元數據操作僅提供有關列的信息,而不是行... – user442462 2010-09-08 14:28:15