sql 语句更新多条语句的时候 可以使用 in比如 update 表名  set 字段=‘值’ where 字段 in() 括号中可以传入多个值
但是在存储过程中  如果我在程序代码中抓到一些值(数量不定)  存储过程sp_update(str in varchar2) 怎么才能把在代码中的值拼接成可以使用的值存储过程中只有   update 表名  set 字段=‘值’ where 字段 in(str)也就是怎么才能处理这个str

解决方案 »

  1.   

    -- 参数下面的函数:i_user_ids 参数的赋值方式!create or replace FUNCTION fun_getemails(i_user_ids VARCHAR2, i_cdate VARCHAR2 DEFAULT TO_CHAR(SYSDATE,'D'))
    /***************************************************
      **     功能:根据输入的用户ID(S)及日期得到相应的用户邮箱(查询user_info表)
      **     备注:工作日与非工作日区分对待:如果是工作日(周一到周五),则得到相关用户ID的workday_email字段内容;
      **           如果是非工作日(周六、日)则得到相关用户ID的weekend_email字段的内容
      **     参数输入格式:'01636,00220' (表示获取用户ID为01636和00220的邮箱)
      **   创建者:luoyoumou
      ** 创建时间:2012.05.22
      ****************************************************/
    RETURN varchar2 RESULT_CACHE
    IS
      l_sql    VARCHAR2(1000);
      l_emails VARCHAR2(200);
      l_user_ids VARCHAR2(200);
    BEGIN
      l_user_ids := ''''||replace(i_user_ids,',',''',''')||'''';
      l_sql := 'SELECT LISTAGG(DECODE(:i_cdate,''1'',weekend_email,''7'',weekend_email,workday_email),'';'') WITHIN GROUP(ORDER BY userid) as emails FROM user_info ';
      l_sql := l_sql || 'WHERE u_status=1 ' || 'AND (userid in('||l_user_ids||')' || ' OR parent_userid in('||l_user_ids||'))';  EXECUTE IMMEDIATE l_sql INTO l_emails USING i_cdate;
      RETURN l_emails;
    EXCEPTION WHEN OTHERS
      THEN
      RETURN NULL;
    END;
    /
      

  2.   

    怎么处理这个 传入的str呢 怎么拆分成我需要的参数   并进行循环呢
      

  3.   

    老罗威武..
    楼主,l_user_ids := ''''||replace(i_user_ids,',',''',''')||'''';这样就是处理你的STR呢
      

  4.   


    动态sql比较容易处理
    create procedure sp_update
    (
    str in varchar2
    )
    as
    pa_str varchar2(1000);
    begin
      pa_str:='update 表名 set 字段=''值''  where 字段 in(:str)';
      execute immediate pa_str using str;
    end;
    str这个参数的值在调用存储的时候拼接好就可以
      

  5.   


    我想最终的语句是这样的   
    UPDATE WORKED SET STATUS='N' WHERE  FORM_NO IN ('100','101')如果你这种写法  这个str 应该传成什么样的