ITPUB??ì3
ITPUB论坛 » Oracle开发 » 为何我捕获不到出错信息,大家帮忙看看

标题: 为何我捕获不到出错信息,大家帮忙看看
离线 czj68586
初级会员



精华贴数 0
个人空间 0
技术积分 25 (45165)
社区积分 0 (190505)
注册日期 2004-10-29
论坛徽章:0
      
      

发表于 2008-6-25 10:01 
为何我捕获不到出错信息,大家帮忙看看

create or replace procedure p_di_fs_log
(
    is_task_name   in     varchar2,
    is_table_name  in     varchar2,
    is_task_sign   in     varchar2,
    ii_task_status in     integer,
    is_task_log    in     varchar2,
    oi_task_id     in out integer
)
is
-- ********************************************************************************
-- 程序名称:    di_source.fs_log
-- 功能描述:    di_source层程序运行日志记录
-- 输入参数:    is_task_name   - 任务名称
--              is_table_name  - 操作表名
--              is_task_sign   - 任务标记, 任务统计日期或统计月份
--              ii_task_status - 任务状态, 1 程序运行中, 2 程序正常完成, 3 程序运行出错
--              is_task_log    - 任务日志, 正常时为[程序运行中]或[程序运行完成],
--                                         出错时为[出错信息]
--              oi_task_id     - 任务ID, 状态为2和3时做输入参数
-- 输出参数:    oi_task_id     - 任务ID, 状态为1时做输出参数
-- 输入资源:
-- 输出资源:    di_source.zh_d_ts_log
-- 中间资源:
-- ********************************************************************************
vs_err_msg      varchar2(255);      -- 保存出错信息

begin

    if ii_task_status = 1 then
        -- 新任务则新建程序运行日志
        select di_source.SEQ_log_ID.nextval into oi_task_id from dual;
        insert into di_source.zh_d_ts_log
        (
            task_id,            -- 任务ID
            task_name,          -- 任务名称
            table_name,         -- 操作表名
            task_sign,          -- 任务标记
            start_time,         -- 任务开始时间
            end_time,           -- 任务结束时间或任务出错时间
            task_status,        -- 任务状态
            task_log            -- 任务日志
        )
        values
        (
            oi_task_id,
            is_task_name,
            is_table_name,
            is_task_sign,
            sysdate,
            null,
            '1',
            '程序运行中'
        );
    elsif ii_task_status = 2 then
        -- 任务正常完成则利用原任务ID记录程序结束时间
        update di_source.zh_d_ts_log
           set end_time = sysdate,
               task_status = '2',
               task_log = '程序正常完成'
         where task_id = oi_task_id;
    else
        -- 任务出错则利用原任务ID记录程序出错时间和出错信息
        update di_source.zh_d_ts_log
           set end_time = sysdate,
               task_status = '3',
               task_log = substr(is_task_log, 1, 200)
         where task_id = oi_task_id;
    end if;
    commit;

    -- 成功返回
    return;

exception

    -- 出错处理
    when others then
        -- 得到出错信息
        vs_err_msg := substr(sqlerrm, 1, 200);
        -- 回滚事务
        rollback;
        -- 输出出错信息
        dbms_output.put_line('di_source.fs_log: ' || vs_err_msg);
        -- 出错返回
        return ;

end;
代码如上,大家帮我看看如何修改才能捕获出错信息.


__________________
有志者事竟成,无志者常立志
只看该作者    顶部
在线/呼叫 zhangfengh
老狐狸


精华贴数 3
个人空间 0
技术积分 11879 (98)
社区积分 5032 (281)
注册日期 2002-10-12
论坛徽章:79
现任管理团队成员2008北京奥运纪念徽章:曲棍球2008北京奥运纪念徽章:帆船2008年新春纪念徽章  
      

发表于 2008-6-25 10:05 
set serveroutput on?


__________________
=======================================
接受以下奥运徽章赞助
黄色:篮球、田径、体操
红色:铁人三项、射击
=======================================
接受鲜花赞助
蓝色妖姬
紫蜘蛛
九尾狐狸
玉兔
=======================================
狐狸在这个世界上是凭借聪明而得到生存的,并且在这个世界上占有一席之地,学习狐狸的聪明,少走弯路。
=======================================
聪明的人,能把别人的经验吸收过来,使之成为自己的经验!
=======================================
只看该作者    顶部
在线/呼叫 jvkojvko
小马哥


精华贴数 1
个人空间 0
技术积分 4749 (277)
社区积分 32376 (27)
注册日期 2007-9-10
论坛徽章:24
紫水晶紫水晶紫水晶紫水晶紫水晶紫水晶
      

发表于 2008-6-25 10:05 
什么错误信息返回不了?


__________________
马无夜草不肥,人无外财不富。
只看该作者    顶部
在线/呼叫 jvkojvko
小马哥


精华贴数 1
个人空间 0
技术积分 4749 (277)
社区积分 32376 (27)
注册日期 2007-9-10
论坛徽章:24
紫水晶紫水晶紫水晶紫水晶紫水晶紫水晶
      

发表于 2008-6-25 10:08 
只有在insert和update不成功才能返回错误信息啊,其他情况都直接return了啊


__________________
马无夜草不肥,人无外财不富。
只看该作者    顶部
离线 czj68586
初级会员



精华贴数 0
个人空间 0
技术积分 25 (45165)
社区积分 0 (190505)
注册日期 2004-10-29
论坛徽章:0
      
      

发表于 2008-6-25 10:08 
在函数调用这个过程的时候,ORACLE报的出错信息.


__________________
有志者事竟成,无志者常立志
只看该作者    顶部
离线 czj68586
初级会员



精华贴数 0
个人空间 0
技术积分 25 (45165)
社区积分 0 (190505)
注册日期 2004-10-29
论坛徽章:0
      
      

发表于 2008-6-25 10:12 
比如我运行一个函数的过程中,在这个函数中调用了这个写日志过程,我中途中止了函数或最后函数由于某些原因异常中止了,我想把这些出错信息在我的那个写日志的过程中建的日志表中记录下来,但是我就是获取不到那样的一个错误信息.


__________________
有志者事竟成,无志者常立志
只看该作者    顶部
离线 czj68586
初级会员



精华贴数 0
个人空间 0
技术积分 25 (45165)
社区积分 0 (190505)
注册日期 2004-10-29
论坛徽章:0
      
      

发表于 2008-6-25 11:35 
是不是我写的那个写日志的过程有问题,知道的支会下.谢谢.


__________________
有志者事竟成,无志者常立志
只看该作者    顶部
在线/呼叫 jvkojvko
小马哥


精华贴数 1
个人空间 0
技术积分 4749 (277)
社区积分 32376 (27)
注册日期 2007-9-10
论坛徽章:24
紫水晶紫水晶紫水晶紫水晶紫水晶紫水晶
      

发表于 2008-6-25 12:26 
中途中止了函数 怎么获取呢?


__________________
马无夜草不肥,人无外财不富。
只看该作者    顶部
在线/呼叫 阿日
2M-Never give up


精华贴数 0
个人空间 486
技术积分 1284 (1326)
社区积分 653 (1162)
注册日期 2004-1-4
论坛徽章:14
红孩儿2008北京奥运纪念徽章:摔跤2008北京奥运纪念徽章:羽毛球2008北京奥运纪念徽章:举重2008北京奥运纪念徽章:垒球2008北京奥运纪念徽章:皮划艇激流回旋
每日论坛发贴之星     

发表于 2008-6-25 13:45 


QUOTE:
原帖由 jvkojvko 于 2008-6-25 10:08 发表
只有在insert和update不成功才能返回错误信息啊,其他情况都直接return了啊

我测了,你的过程是没有问题的,关于如何在中止时获取错误,我关注


__________________
我欲将心向明月,奈何明月照沟渠.
阳光灿烂的日子,提高自身素质,努力向前 --自强不息 Don't give up!
相信-坚持-一定成功-多问-多看-多总结-多分析-加油
过去的都过去了,大不了从头再来,别回头,向前看!
http://blog.csdn.net/zxf_feng
只看该作者    顶部
离线 DragonBill
武陵愚生


精华贴数 1
个人空间 10
技术积分 3260 (440)
社区积分 391 (1573)
注册日期 2006-12-18
论坛徽章:13
2008北京奥运纪念徽章:击剑生肖徽章2007版:虎    
      

发表于 2008-6-25 14:02 


QUOTE:
原帖由 czj68586 于 2008-6-25 10:12 发表
比如我运行一个函数的过程中,在这个函数中调用了这个写日志过程,我中途中止了函数或最后函数由于某些原因异常中止了,我想把这些出错信息在我的那个写日志的过程中建的日志表中记录下来,但是我就是获取不到那样的一个错误信息.

假设有Funcation funWritLog call procedure p_di_fs_log,
在 funWritLog 中有, 中途中止或异常中止两种要write log
那么在funWritLog中你应该写
begin
  ...
  if normal_Terminate then  --中途中止
     call p_di_fs_log(...)
  end if;
  ...

exception  --异常中止
  when exception then
       call p_di_fs_log(...)
      ...
end;


只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问