多年前留下的文档,基本没用过,试试吧
BEGIN
 ……
EXCEPTION
   WHEN OTHERS THEN
   POSITION:=DBMS_SQL.LAST_ERROR_POSITION;--出错位置
   SQLCODE:=DBMS_SQL.LAST_SQL_FUNCTION_CODE;--出错语句
   LROWID:=DBMS_SQL.LAST_ROW_ID;--出错行   --DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM); 错误代码及描述
END;

解决方案 »

  1.   


    create table tab_sql_t (
    v_sql varchar2(521)
    );create table err_log (
    error varchar2(256),
    time date
    );
    create or replace procedure pro_err
    is
    v_sql varchar2(200);
    cursor cur is  select v_sql from tab_sql_t;v_errortext varchar2(200);beginopen cur;
    fetch cur into v_sql;
    while cur%found  loop
    dbms_output.put_line(v_sql);
    execute immediate v_sql;fetch cur into v_sql;
    end loop;
    close cur;
    exception 
    when others then 
    v_errortext:=substr(sqlerrm,1,200);
    insert into err_log (error,time) values(v_errortext,sysdate);commit;end;select * from err_log;
      

  2.   

    记录日志还是用自治事务吧,
    exception中直接提交问题很大啊
      

  3.   

    end loop;后是否少写了 COMMIT
      

  4.   

    end loop;后是否少写了 COMMIT嗯 应该有的吧。  我执行的时候 ,里面写的是查询语句,所以 没有commit也没有提示出错。