首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

oracle存储过程关于 select … in(变量) 的 有关问题!

2013-03-26 
oracle存储过程关于 select …… in(变量) 的 问题求助!!创建了这样一个存储过程create or replace procedur

oracle存储过程关于 select …… in(变量) 的 问题求助!!
创建了这样一个存储过程

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

热点排行