SQL / JDBC: запрос выбора по именам переменных таблиц - PullRequest
0 голосов
/ 08 сентября 2010

Я использую 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.

Есть ли у кого-тоидея?

Спасибо.


[Добавлено из комментариев]

На самом деле мне нужно проверить представления V $, содержащиеся в таблице ALL_CATALOG.Но если бы я мог найти другую таблицу, в которой также содержатся все эти представления и столбец NUM_ROWS, это было бы прекрасно!

Ответы [ 2 ]

2 голосов
/ 08 сентября 2010

Стандартные версии SQL не позволяют заменять «структурные элементы» запроса, такие как имя таблицы или имя столбца, значениями переменных или заполнителями.

Есть несколько способов подойти к этому.

  1. Создайте отдельный оператор SQL для каждого имени таблицы, указанного в MY_TABLE, и выполняйте каждый по очереди. Грубая сила, но эффективная.
  2. Запросить системный каталог напрямую.
  3. Исследуйте, существуют ли операции метаданных JDBC, которые позволяют вам узнать о количестве строк в таблице, не привязываясь к системному каталогу конкретной используемой СУБД.
1 голос
/ 08 сентября 2010

Можете ли вы использовать оракула USER_TABLES? тогда запрос будет намного проще

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