Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как можно использовать имя таблицы в текущем запросе?  [new]
-=Ronaldo=-
Member

Откуда:
Сообщений: 73
Есть таблицы, одна из которых основная, где в своих ячейках ссылается на другие таблицы, т.е. в столбце основной таблицы хранятся имена других таблиц. Необходимо одновременно с запросом значений из основной таблицы получить данные из вспомогательных.

Чтобы суть была понятна, приведу пример для PL/SQL:

SELECT m.value_table AS table_name, m.value_x, t.value_y
FROM main_table m
INNER JOIN table_name t ON (m.value_x = t.value_x)

Пример конечно неверный, но сама суть, можно table_name использовать как переменную?
29 апр 09, 22:23    [7131559]     Ответить | Цитировать Сообщить модератору
 Re: Как можно использовать имя таблицы в текущем запросе?  [new]
bigsov
Member

Откуда:
Сообщений: 282
это можно сделать с помощью execute immediate
29 апр 09, 22:36    [7131596]     Ответить | Цитировать Сообщить модератору
 Re: Как можно использовать имя таблицы в текущем запросе?  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
А ссылочные таблицы одинаковы по структуре, например, всегда надо вытаскивать значения полей с именами VALUE_X, VALUE_Y, или имена требуемых полей тоже хранятся в основной таблице?
29 апр 09, 22:38    [7131605]     Ответить | Цитировать Сообщить модератору
 Re: Как можно использовать имя таблицы в текущем запросе?  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
То есть одну строчку main_table надо связать с одной табличкой (соответсвующей этой строке), другую с другой и т.д??
30 апр 09, 10:06    [7132652]     Ответить | Цитировать Сообщить модератору
 Re: Как можно использовать имя таблицы в текущем запросе?  [new]
-=Ronaldo=-
Member

Откуда:
Сообщений: 73
Да, желательно в одном запросе, хотя я и сам понимаю, что это маловероятно. Но всё же, может похожее решение существует. Вот мой полный вопрос, см. вложение. База Oracle 9.2, PL/SQL допустим, но желательно меньше запросов и чтобы на выходе была результирующая таблица. Парни, помогите решить!

К сообщению приложен файл. Размер - 0Kb
2 май 09, 00:49    [7137730]     Ответить | Цитировать Сообщить модератору
 Re: Как можно использовать имя таблицы в текущем запросе?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54381
Если у вас ограниченное количество таблиц - Table_x,Table_y,Table_z - то всё на вид несложно.
with my_data as
(
select 'table_x' tablename,  x_id id, x_value value from table_x union all
select 'table_y' tablename,  y_id id, y_value value from table_y union all
select 'table_z' tablename,  z_id id, z_value value from table_z
)
select *
  from my_data, p
 where my_data.id = p.prop_id
    and my_data.tablename = p.p_table
ну а дальше уже сами, это несложно - подвязываем 3-ю таблицу, group by и т.д.
Кстати, в таблице Result, как по мне, не хватает p_id.

============
Но всё-таки подумайте - вам точно нужны все 3 таблицы - table_x, table_y и table_z ?
Из Вашего примера видно, что их можно свести в одну.
2 май 09, 07:38    [7137888]     Ответить | Цитировать Сообщить модератору
 Re: Как можно использовать имя таблицы в текущем запросе?  [new]
-=Ronaldo=-
Member

Откуда:
Сообщений: 73
andreymx, не уточнил:

1. Значения x_value, y_value и z_value могут быть разных типов, т.е. строка, целое или вещественное.
2. x_id, y_id и z_id равны между собой.
3. Значения P_PROP должны стать столбцами, т.е. имеет место быть транспонирование.
4 май 09, 19:12    [7144567]     Ответить | Цитировать Сообщить модератору
 Re: Как можно использовать имя таблицы в текущем запросе?  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
-=Ronaldo=-
1. Значения x_value, y_value и z_value могут быть разных типов, т.е. строка, целое или вещественное.
Просто интересно, а проектировщика схемы Вы не спрашивали, как предполагается с ней работать?
5 май 09, 09:59    [7145869]     Ответить | Цитировать Сообщить модератору
 Re: Как можно использовать имя таблицы в текущем запросе?  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Если все-таки таблиц ограниченное количество, вяжите их всегда outer-join-ом, а дальше разбирайтесь, что и куда и какого типа Вам надо вытаскивать.

Если таблиц неизвестное количество, то в начале делайте его известным, то бишь distinct p_table, а потом путь первый в динамике.

ЗЫ: Но изврат...
5 май 09, 10:02    [7145884]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить