SQL / JDBC:选择变量表名的查询

时间:2010-09-08 13:28:42

标签: sql oracle select tablename

我正在使用Oracle DB,我想编写一个SQL查询,然后我可以用JDBC调用它。我对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;`

问题来自第二个SELECT,但我不知道如何使用TABLE_NAME值。

有人有想法吗?

感谢。


[从评论中添加]

实际上,我需要测试ALL_CATALOG表中包含的V $视图。但是,如果我能找到另一个包含所有这些视图的表,并且也包含NUM_ROWS列,那么它将是完美的!

2 个答案:

答案 0 :(得分:2)

标准版本的SQL不允许您将查询的“结构元素”(例如表名或列名)替换为变量值或占位符。

有几种方法可以解决这个问题。

  1. 为MY_TABLE中列出的每个表名生成单独的SQL语句,并依次执行。蛮力,但有效。
  2. 直接询问系统目录。
  3. 调查是否有JDBC元数据操作,允许您查找表中的行数,而不必绑定到您正在使用的特定DBMS的系统目录。

答案 1 :(得分:1)

你能使用oracle视图USER_TABLES吗?然后查询将更容易

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