创建了这样一个存储过程
create or replace procedure CS_SELKG
(
V_CONDTION VARCHAR2,
V_CURSOR OUT SYS_REFCURSOR
)
IS
BEGIN
open v_cursor for select a.s_txm,b.content from shuibiaoxx a
inner join (
select * from words where belongid='106'
) b on a.s_ztid=b.wordsid
where a.s_txm in(V_CONDTION);
END CS_SELKG
存储过程调试时发现
当 存储过程中 V_CONDTION 变量值为一个值 如 select………… in(123)
调试时候游标中有一条记录 。
但是当 V_CONDTION 变量值为2 个值或以上值 如 select………… in(123,456)
游标中的结果为空表
该问题应该是 给 V_CONDTION变量赋值 123,456 是 系统认为 123,456 是一个字符串 而不是以逗号分隔开的两个字符串
请问各位
我想在存储过程中实现类似如 select …… in(V_CONDTION ) 多个值
该怎么实现 ?特别说明 存储过程中V_CONDTION 变量值 是程序中窗体输入值 ,无法在存储过程中使用exists …
------解决方案--------------------
- SQL code
--这是我写的个简单的例子,你看下SQL> declare 2 type cur_type is ref cursor; 3 cur cur_type; 4 rec emp%rowtype; 5 str varchar2(50); 6 letter varchar2(50):= '7369,7566'; 7 begin 8 str:= 'select ename from emp where empno in ('||letter||')'; 9 open cur for str; 10 loop 11 fetch cur into rec.ename; 12 exit when cur%notfound; 13 dbms_output.put_line(rec.ename); 14 end loop; 15 end; 16 /SMITH JONES
------解决方案--------------------
- SQL code
--先打印出sql语句,然后直接执行你打印的语句看有无记录set serveroutput on;declare V_CONDTION varchar2(1000):= '1,2,3,4';--换成你的值 v_str varchar2(4000):='';begin v_str:= 'select a.s_txm,b.content from shuibiaoxx a inner join ( select * from words where belongid=''106'' ) b on a.s_ztid=b.wordsid where a.s_txm in('||V_CONDTION||')'; dbms_output.put_line(v_str);end;/