大家好,我想将我的循环里的变量(I)连接到一张表中,可是老是做不了,请高手指点!以下是我的代码:
create or replace procedure p_update_vip_monthfee(v_month in varchar2 ,code out number) is        TYPE t_cursor IS ref CURSOR;
        v_cursor       t_cursor;
        v_sql          varchar2(1000);
        v_user_no      varchar2(20);
        v_user_bill    varchar2(10);
BEGIN
         for I IN 851..859 loop
          OPEN v_cursor FOR select c.user_id,c.avg_bill  from ucr_sta_custmgr.cms_user_0851_200906 c;
          dbms_output.put_line(I);
      
         loop
           fetch v_cursor into v_user_no,v_user_bill;
           EXIT WHEN v_cursor%NOTFOUND;
           v_sql:='update  tf_f_cust_vip_'||v_month||' a  set a.month_fee ='||v_user_bill ||
                           ' WHERE a.user_id='||v_user_no||' and a.eparchy_code=0'||I;
           execute immediate v_sql;
              dbms_output.put_line(v_sql);
         end loop;
         CLOSE v_cursor;
         --commit;
         end loop;
         code:=0;
EXCEPTION
        WHEN OTHERS THEN
                code:=-1;
                ROLLBACK;
                return;
                dbms_output.put_line('ERROR:'||SQLERRM);
                
END p_update_vip_monthfee;注意:我想把 OPEN v_cursor FOR select c.user_id,c.avg_bill  from ucr_sta_custmgr.cms_user_0851_200906 c;
中的用I替换,用什么办法呢,我改成字符串,然后执行,但是出异常了!

解决方案 »

  1.   

    是想把ucr_sta_custmgr.cms_user_0851_200906这个中的851用i代替吗,如果是的,你需要使用动态语句        TYPE t_cursor IS ref CURSOR; 
            v_cursor      t_cursor;
            -- add new var
            v_sql1         varchar2(1000);
            v_sql          varchar2(1000); 
            v_user_no      varchar2(20); 
            v_user_bill    varchar2(10); 
    BEGIN 
            for I IN 851..859 loop
              v_sql1 := 'select c.user_id,c.avg_bill from ucr_sta_custmgr.cms_user_0'||I||'_200906 c';
              OPEN v_cursor FOR v_sql1; 
              dbms_output.put_line(I);