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

Откуда:
Сообщений: 2030
просто из чистого любопытства спрашиваю...

есть функция, возвращающая таблицу

сделана примерно как здесь описано
https://www.sql.ru/faq/faq_topic.aspx?fid=537

но. у этой функции есть параметр

select * 
from table(my_pkg.my_function(p_id))

отлично работает

а вот можно ли каким-то образом не переписывая код функции
получить селектом выборку соответствующую всем p_id
из некоторой другой таблицы ?

т.е.
аналог
select * 
from table(my_pkg.my_function(1))
union
select * 
from table(my_pkg.my_function(2))
union
...
select * 
from table(my_pkg.my_function(99))

но только id не фиксированные
а скажем из множества

select id from some_table
14 ноя 08, 15:40    [6442174]     Ответить | Цитировать Сообщить модератору
 Re: вопрос чисто теоретический  [new]
PooH_2
Member

Откуда:
Сообщений: 266
попробуй так:
select (select * from table(my_pkg.my_function(id)) from some_table

PS:не проверял
14 ноя 08, 15:54    [6442304]     Ответить | Цитировать Сообщить модератору
 Re: вопрос чисто теоретический  [new]
PooH_2
Member

Откуда:
Сообщений: 266
... хотя нет... тут вложеный запрос должен возвращать только одну запись.
14 ноя 08, 15:56    [6442321]     Ответить | Цитировать Сообщить модератору
 Re: вопрос чисто теоретический  [new]
nxx
Member

Откуда:
Сообщений: 2030
PooH_2
попробуй так:
select (select * from table(my_pkg.my_function(id)) from some_table

PS:не проверял


это работает если
брать один столбец из table(my_pkg.my_function(id)

т.е.

select (select field1 from table(my_pkg.my_function(id)) from some_table

на * ругается
too many values
14 ноя 08, 15:58    [6442338]     Ответить | Цитировать Сообщить модератору
 Re: вопрос чисто теоретический  [new]
Elic
Member

Откуда:
Сообщений: 29990
nxx
но только id не фиксированные
а скажем из множества
Это называется "левая корреляция во from". Где-то так:
select t.* from some_table, table(my_pkg.my_function(some_table.id)) t;
14 ноя 08, 16:08    [6442416]     Ответить | Цитировать Сообщить модератору
 Re: вопрос чисто теоретический  [new]
Sashko81
Member

Откуда: Киев
Сообщений: 103
Elic
Это называется "левая корреляция во from". Где-то так:
select t.* from some_table, table(my_pkg.my_function(some_table.id)) t;

Вроде как должно ругнуться "invalid identifier some_table.id".
14 ноя 08, 16:14    [6442454]     Ответить | Цитировать Сообщить модератору
 Re: вопрос чисто теоретический  [new]
Elic
Member

Откуда:
Сообщений: 29990
Sashko81
Elic
Это называется "левая корреляция во from". Где-то так:
select t.* from some_table, table(my_pkg.my_function(some_table.id)) t;
Вроде как должно ругнуться "invalid identifier some_table.id".
STFF
14 ноя 08, 16:25    [6442541]     Ответить | Цитировать Сообщить модератору
 Re: вопрос чисто теоретический  [new]
Sashko81
Member

Откуда: Киев
Сообщений: 103
Таки я оказался неправ. Спасибо.
14 ноя 08, 16:36    [6442627]     Ответить | Цитировать Сообщить модератору
 Re: вопрос чисто теоретический  [new]
Zloxa
Member

Откуда: СССР ☭
Сообщений: 1033
Oracle® Database SQL Reference
10g Release 2 (10.2)
Select
The collection_expression can reference columns of tables defined to its left in the FROM clause. This is called left correlation. Left correlation can occur only in table_collection_expression. Other subqueries cannot contains references to columns defined outside the subquery.

table_collection_expression
14 ноя 08, 16:41    [6442658]     Ответить | Цитировать Сообщить модератору
 Re: вопрос чисто теоретический  [new]
nxx
Member

Откуда:
Сообщений: 2030
Elic
nxx
но только id не фиксированные
а скажем из множества
Это называется "левая корреляция во from". Где-то так:
select t.* from some_table, table(my_pkg.my_function(some_table.id)) t;


спасибо

действительно, это работает
даже в 10.1
14 ноя 08, 17:43    [6443044]     Ответить | Цитировать Сообщить модератору
 Re: вопрос чисто теоретический  [new]
Elic
Member

Откуда:
Сообщений: 29990
nxx
действительно, это работает даже в 10.1
RTFM Oracle9i SQL Reference (FAQ)
14 ноя 08, 18:05    [6443173]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить