2012-02-02 63 views
1

我有一個關聯表,它將帳戶組織在一起。功能性的入住條款 - Oracle PL/SQL

我想選擇表「目標」

p_group_id := 7; 

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

是否可以寫一個返回account_ids列表的功能(如某種形式的集合)的一個子集,將有利於上面的代碼?

我看過流水線功能,但是我想遠離循環和遊標。此外,自定義類型/表也進入了我想避免的投射。

僅供參考,這裏的一些僞什麼功能 'get_account_ids' 會做,假設:

function get_account_ids(p_group_id) 
    insert into v_ret 
    select aa.account_id 
    from assoc_account aa 
    where aa.groupid = p_group_id; 

return v_ret; 

回答

5

你只需要:

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