在存储过程中动态拼写一条sql语句,执行
表2的数据量大约是800w
n_sql :='insert into 表1 select * from 表2';
execute immediate;
执行大约80分钟,有时也要30分钟但是自己在窗口执行
insert into 表1 select * from 表2
执行时间大约2分钟
怎么会差距那么多啊
表2的数据量大约是800w
n_sql :='insert into 表1 select * from 表2';
execute immediate;
执行大约80分钟,有时也要30分钟但是自己在窗口执行
insert into 表1 select * from 表2
执行时间大约2分钟
怎么会差距那么多啊
每次执行时,都执行一次语法语义的解析,应该会影响速度。
insert into 表1 select * from 表2
也是需要解析吧
如果时间也是很长,那表示可能存储过程的问题。
如果时间没有很长,那表示可能是job调度的问题。存储过程的问题,可以debug一下,看一下存储过程中哪里消耗的时间比较长。
job调度的问题,可以动态监控一下job的调用情况,查看一下user_jobs视图,或者更细粒度的在job的what中加上alter session set sql_trace 查看一下trace信息(笔者没实验过)。