CURSOR c_i_permit_id_s IS select permit_value from itel_permit t where t.permit_value in (v_permit_id_s)
union
select permit_value from itel_permit t where t.permit_value in (v_position_permit_id_s)
union
select permit_value from itel_permit t where t.permit_value in (v_role_permit_id_s) ;
我想在存储过程中写一个CURSOR .
要将不同参数据的三个查询语句合并,
在普通查询情况下是可以用的,
但是放到存储过程中就没有用了,
我想问下大家在CURSOR中能使用 MINUS或union,
如果能,要怎么使用,
谢谢大家
union
select permit_value from itel_permit t where t.permit_value in (v_position_permit_id_s)
union
select permit_value from itel_permit t where t.permit_value in (v_role_permit_id_s) ;
我想在存储过程中写一个CURSOR .
要将不同参数据的三个查询语句合并,
在普通查询情况下是可以用的,
但是放到存储过程中就没有用了,
我想问下大家在CURSOR中能使用 MINUS或union,
如果能,要怎么使用,
谢谢大家
select tt.* from
(select permit_value from itel_permit t where t.permit_value in (v_permit_id_s)
union
select permit_value from itel_permit t where t.permit_value in (v_position_permit_id_s)
union
select permit_value from itel_permit t where t.permit_value in (v_role_permit_id_s))tt ;
还是执行行数为0(Rowcount = 0, %open, %notfound, first iteration)
我觉得问题出在
t.permit_value in (v_role_permit_id_s)
这种处参数的查询上面。
这样写和t.permit_value = v_role_permit_id_s
是没有区别的。
即使你的v_role_permit_id_s是一个以逗号分割的字符串,oracle也只认为他是一个字符串,而不是把它当作一组值来使用。
所以你的in就根本没有起到作用。
查询就不会有结果。
举个例子
v_role_permit_id_s:='1,2,3';
select * from table1 where col1 in (v_role_permit_id_s);
会被Oracle等同于下面的SQL处理。
select * from table1 where col1 in ('1,2,3');
注意是‘1,2,3’而不是(1,2,3)
所以检索结果当然不会。