小弟在一存储过程中写了一段游标,目的是在当前存储过程中调用执行另外一个存储过程(proc_temp),结果调试时报错,游标如下:
---表A有列a,b,c,d,mid,参数v_a,v_sql均已在存储过程开始时定义cursor mycur is 
select a from A  where mid=14; /*查询结果有两列*/open mycur;
loop 
fetch mycur into v_a;
exit when mycur%notfound;begin 
v_sql:= 'proc_temp'''||v_a||''''; execute immediate v_sql;/*调试到此步报错*/
end ;
end loop;
close mycur; 
请教高人,这样能不能达到我的目的,如不然,是否有更好的方法,请教之!切切。

解决方案 »

  1.   

    v_sql:= 'proc_temp'''||v_a||''''; 
    execute immediate v_sql;/*调试到此步报错*/  --删除--修改成:proc_temp(v_a); 
      

  2.   

    v_sql:= 'proc_temp'''||v_a||''''; 
    execute immediate v_sql;/*调试到此步报错*/ 
    试试这样写:v_sql:= 'proc_temp('''||v_a||''')';
    不明白楼主为什么不用括号呢。
      

  3.   

    直接调用就可以了。不需要动态SQL
      

  4.   

    可以直接调用:
    proc_temp(v_a); 
    也可以动态调用:
    v_sql:= 'proc_temp('''||v_a||''')'; 
    execute immediate v_sql;
      

  5.   

    因为sql server中的写法不需要括号
      

  6.   


    可以直接调用的,动态弄是多此一举。。
     proc_temp(v_a);
      

  7.   

    可以用proc_temp(v_a); 如果一定要动态的,则这么写:
    v_sql:= 'begin proc_temp('''||v_a||'''); end; /'; 
      

  8.   

    sql server 中存储过程的调用,后面直接跟参数,不用括号!
      

  9.   

    proc_temp(v_a); 
     
     
      

  10.   

    可以试试将
    v_sql:= 'proc_temp'''||v_a||'''';改为v_sql:= 'proc_temp'||v_a;
      

  11.   

    cursor mycur is 
    select a from A  where mid=14; /*查询结果有两列*/ open mycur; 
    loop 
    fetch mycur into v_a; 
    exit when mycur%notfound; begin 
    v_sql:= 'proc_temp(:v_a)'; execute immediate v_sql using v_a;
    end ; 
    end loop; 
    close mycur;