以下查询将检索多个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);
如何进行此查询??
答案 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;
我在这里计算了它们(不需要明确的)