oracle :下面的存储过程怎么修改啊?
openRfor'select*fromT';loopFETCHRBULKCOLLECTINTOrecsLIMIT1000;FORALLiIN1..recs.COUNTv...
open R for 'select * from T';
loop
FETCH R BULK COLLECT INTO recs LIMIT 1000;
FORALL i IN 1 .. recs.COUNT
v_sql:='insert into '|| v_tablename ||' values recs('||i||')';
execute immediate v_sql;
COMMIT;
EXIT WHEN R%NOTFOUND;
end loop;
close R;
close R;
主要是v_sql这句,老拼写不正确 展开
loop
FETCH R BULK COLLECT INTO recs LIMIT 1000;
FORALL i IN 1 .. recs.COUNT
v_sql:='insert into '|| v_tablename ||' values recs('||i||')';
execute immediate v_sql;
COMMIT;
EXIT WHEN R%NOTFOUND;
end loop;
close R;
close R;
主要是v_sql这句,老拼写不正确 展开
2个回答
展开全部
你把execute immediate v_sql;这个改成dbms_output.put_line(V_sql);
然后将 limit 1000改小点,改成limit 10
在sql plus中执行存储过程前先执行命令:
set serveroutput on;
然后再执行这个存储过程
执行完了之后你就可以看到你输出的这个V_Sql语句了,你再看看哪里存在问题好了
然后将 limit 1000改小点,改成limit 10
在sql plus中执行存储过程前先执行命令:
set serveroutput on;
然后再执行这个存储过程
执行完了之后你就可以看到你输出的这个V_Sql语句了,你再看看哪里存在问题好了
追问
主要是使用FORALL语句,insert into v_tablename values recs(i),这个v_tablename是动态的,这句怎么修改?
insert into AA values recs(i);
COMMIT;
如果直接这样写就行,但是插入的表如果是动态的应该怎么修改这个语句呢?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询