小弟在一存储过程中写了一段游标,目的是在当前存储过程中调用执行另外一个存储过程(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;
请教高人,这样能不能达到我的目的,如不然,是否有更好的方法,请教之!切切。
---表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;
请教高人,这样能不能达到我的目的,如不然,是否有更好的方法,请教之!切切。
execute immediate v_sql;/*调试到此步报错*/ --删除--修改成:proc_temp(v_a);
execute immediate v_sql;/*调试到此步报错*/
试试这样写:v_sql:= 'proc_temp('''||v_a||''')';
不明白楼主为什么不用括号呢。
proc_temp(v_a);
也可以动态调用:
v_sql:= 'proc_temp('''||v_a||''')';
execute immediate v_sql;
可以直接调用的,动态弄是多此一举。。
proc_temp(v_a);
v_sql:= 'begin proc_temp('''||v_a||'''); end; /';
v_sql:= 'proc_temp'''||v_a||'''';改为v_sql:= 'proc_temp'||v_a;
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;