如何在refcursor结果集中组合另一个查询的结果?

时间:2013-03-07 07:15:39

标签: sql oracle plsql oracle11g plsqldeveloper

以下查询将检索多个col_grp_id

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”或“false”。

当第一个查询中存在该值时,它为“false”,否则它应为“true”。 我需要使用带有p_check的refcursor传递所有行

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);

如何进行此查询??

1 个答案:

答案 0 :(得分: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将空值称为“false”,将值称为“true”

或者像这样:

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