0

我正在使用 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 列的表,那将是完美的!

4

2 回答 2

2

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

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

  1. 为 MY_TABLE 中列出的每个表名生成单独的 SQL 语句,并依次执行。蛮力,但有效。
  2. 直接查询系统目录。
  3. 调查是否有 JDBC 元数据操作可以让您了解表中的行数,而无需绑定到您正在使用的特定 DBMS 的系统目录。
于 2010-09-08T13:35:04.517 回答
1

Can you use oracle view USER_TABLES? then query will be much easier

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 回答