我写了一个函数,有一个参数pkids,用来传递数据库表的多个主键(用,隔开)。
函数里有一个游标写的是select * from table_name where uid in (pkids);
我传一个id时游标有结果,但我传1,2,3,4这样的多个id时,游标就查不出结果了,请问是怎么搞的啊?

解决方案 »

  1.   

    把你的sql
    dbms_output.put_line(sql);估计是拼接的时候没注意'',
    你的id字段是varchar2类型吧!
      

  2.   

    pkid是什么类型啊
    可以这样传吗?
      

  3.   

    这么写肯定不行的。
    进入的值用,隔开,前后还要加,(,a1,a2,a3,a4,)
    where instr(pkids,','+uid+',')>0
      

  4.   

    我估计是拼接的问题,代码如下
    create or replace function export_sql_to_file(pkids varchar2) return number
    AS
      CURSOR c_role IS
        select 'INSERT INTO ' || 'tb_role' || '(role_id, role_desc) VALUES(' || role_id || ',' || chr(39) || role_desc || chr(39) || ');' as sql_export from tb_role where role_id in (pkids);
    begin
    FOR csr IN c_role
      LOOP
         IF c_role%FOUND THEN
           dbms_output.put_line(csr.sql_export);
         END IF;
      END LOOP;
    return (1);
    end export_sql_to_file;
      

  5.   

    噢!这样啊!谢谢qiyouyc!立即给分!