2013-03-07 44 views
0

的下面查询将检索多于一个col_grp_id如何在refcursor结果集中组合另一个查询的结果?

SELECT col_grp_id  
    FROM co_page_col_grp_user_t 
    WHERE page_id=p_page_id AND security_userid = p_user; 

p_check是用户定义的变量,它应该是字符串“true”或“假”。

当值存在于第一个查询中时,它是“假”,否则它应该是“真”。 我需要使用REFCURSOR与p_check传递中的所有行它

OPEN p_out_col_pref FOR 
     SELECT page_id,col_grp_nm,col_grp_id,p_check 
     FROM (SELECT p1.page_id, p2.col_grp_nm, p2.col_grp_id, p_check 
      FROM co_page_t p1, 
      co_page_col_grp_t p2  
      WHERE p1.page_id = p2.page_id 
      AND p1.page_nm = p_rptname 
      AND p1.appl_cd = p_applcd 
      AND p1.page_id = p_page_id); 

加入如何做到这一点?查询

+0

这个问题是非常喜欢你以前的问题[如何为refcursor返回boolen?](http://stackoverflow.com/questions/15243026/how-to-return-a-boolen- in-refcursor),我们怎样才能进一步帮助你? – 2013-03-07 07:29:26

+0

我修改了这个问题。它不是关于布尔..我只需要字符串。它关于查询逻辑 – Satheesh 2013-03-07 07:37:14

+0

@Satheesh:所以它是字符串,那么为什么你用ref_cursor尝试?试着用集合? – 2013-03-07 07:39:49

回答

2

你可以做到这一点在查询(不使用用户定义的变量)在该简化的例子:

select p1.*, case when p2.col_grp_id is null then 'true' else 'false' end p_check 
from co_page_t p1 left outer join co_page_col_grp_user_t p2 
on p1.col_grp_id = p2.col_grp_id 

基本上,我使用的left outer join你的第一个查询和case指空“造假“和值‘真’

或者这样:

select p1.*, case when 
(select count(*) from co_page_col_grp_user_t p2 where p1.col_grp_id = p2.col_grp_id) = 0 then 'true' else 'false' 
end p_check 
from co_page_t p1; 

这里我算他们,而不是(无需明显)

Here is a sqlfiddle example

+0

完美:)谢谢 – Satheesh 2013-03-07 08:29:49

相关问题