如果您是 oracle 新手,那么您可以使用 dbms_output 或使用日志表来存储中间执行时间,这样您就可以知道是哪个 SQL 导致了问题。
declare
run_nbr number;
begin
run_nbr = 1; -- or get it from sequence
SQL1;
log(run_nbr ,user,'sql1',sysdate);
SQL2;
log(run_nbr ,user,'sql2',sysdate);
commit;
end;
这里的日志过程只不过是简单的插入语句,它将插入到一个表中,比如“LOG”,它的列最少,比如 run_nbr、user、sql_name、execution_date
procedure log(run_nbr number, user varchar2, sql_name varchar2, execution_date date)
is
begin
insert into log values(run_nbr, user, sql_name, execution_date);
-- commit; -- Un-comment if you are using pragma autonomous_transaction
end;
放置这些日志语句的时间很少,但可以让您了解执行时间。稍后,一旦您知道问题所在,您只需删除/注释这些行或在没有这些日志语句的情况下对原始过程进行代码备份,并在查明问题后重新编译。