Функциональное предложение Where-In - Oracle PL / SQL - PullRequest
1 голос
/ 03 февраля 2012

У меня есть таблица ассоциации, которая группирует учетные записи.

Я пытаюсь выбрать подмножество таблицы 'target'

p_group_id := 7;

select *
target t
where  t.account_id in get_account_ids(p_group_id);

Можно ли написать функцию, которая возвращает список account_ids (как некоторая форма сбора), который быоблегчить приведенный выше код?

Я смотрел на конвейерные функции, однако я хочу держаться подальше от циклов и курсоров.Кроме того, пользовательские типы / таблица также попадают в приведение, которого я хотел бы избежать.

Для справки, вот некоторый псевдокод для того, что бы функция 'get_account_ids', гипотетически сделала:

1 Ответ

5 голосов
/ 03 февраля 2012

Вам просто нужно:

select *
from   target t
where  t.account_id in 
       ( select aa.account_id
         from   assoc_account aa
         where  aa.groupid = 7;
       )

Выше будет работать, предполагая, что assoc_account.account_id никогда не будет NULL.

...