有游标如下:
cursor mycur(v_ename varchar2) is 
select * from emp where ename in v_ename;传一个字符串
l_ename := 'test,test';

l_ename :='''test'',''test''';这两种我都试了,均报错。不知道应传入什么形式的字符变量。
(l_ename := 'test';测试通过)

解决方案 »

  1.   

    cursor mycur(v_ename varchar2,v_ename2 varchar2) is 
    select * from emp where (ename = v_ename or ename=v_ename2);
      

  2.   

    to  jxc(GameHeart) 
    你的方法适合固定变量数量,现在我并不知道逗号分开的字符串的个数。to  sbaz(万神渡劫)
    '()'我试过的,不是这个问题
      

  3.   

    我知道樓主的意思了,
    传一个字符串
    l_ename := 'test,test';

    l_ename :='''test'',''test''';
    然後用ename in l_ename 來判斷ename是不是在l_ename這個字符串裡面,是不是這個意思呢,
    這樣是不行的,in後跟一個集合,當然集合可以是一個元素,當只有一個元素時,括號可以省略,但樓主的l_name,就是一個只含有'''test'',''test'''這個字符的集合,所以(l_ename := 'test';测试通过)這個是可以通過測試的,我的確不明白樓主為什麼要這麼做?我覺得這種方法也沒有研究的價值
      

  4.   

    用这样的动态游标可以解决:type cur is ref cursor;
    cr cur;
    begin
    sqlstr:='select * from emp where ename in (' || v_ename || ')';
    open cr for sqlstr;
    loop
    fetch cr into ...
    exit when cr%notfound;
    ...end loop;
    end;
      

  5.   

    这种办法不行,那是一个字符串,跟等于号没区别。
    你可以这样instr(v_ename,ename,1,length(v_ename))>0
      

  6.   

    packe_peng_520() 
    我想你不完全明白我的意思解释下我的意思:
    一般,我们的sql语句是
    select * from emp where ename in ('test1','test2','test3');
    现在,我要把这个sql语句放入游标,但是,in后面的值,我希望作为参数传入。不确定test_n这个n的值。我的目的不是研究'()' xiao_fang(frank) 
    你的方法我知道,这里只是想知道我的操作有什么问题。waterfirer(水清) 
    --这种办法不行,那是一个字符串,跟等于号没区别。
    你的回答可以解释我的问题,谢了
      

  7.   

    我写错了,是这样
    instr(v_ename,ename,1)>0